iOS启动设置 – >限制URL方案

我最近发现了一个非常棒的iOS5自定义设置URL方案 ,可以在这个伟大的网站上详细解释。

我已经找到了这个工作,指导用户从我的应用程序的设置应用程序:

[[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"prefs:root=General"]]; 

但似乎无法通过path参数直接路由到限制路径:

 [[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"prefs:root=General&path=Restrictions"]]; 

有没有人找到这方面的文件或能够使这项工作?

任何有识之士将不胜感激。 我试图让用户启用应用程序内购买,而不是用户手动点击限制(不是很明显)。

AS @Nix Wang回答这个问题不适用于 IOS 10


警告:此方法不适用于运行iOS 5.1及更高版本的设备 – 请参阅下面的Hlung的注释。

path组件的名称可能与实际部分不同,但也有可能您目前无法直接从URL访问该部分。 我发现了一个可能的URL和限制的列表不在上面,也许还没有被发现。

“设置”应用中当前已知的网址列表:

  • 首选项:根=通用及路径=关于
  • 首选项:根=通用及路径= ACCESSIBILITY
  • 首选项:根= AIRPLANE_MODE
  • 首选项:根=通用及路径= AUTOLOCK
  • 首选项:根=通用及路径= USAGE / CELLULAR_USAGE
  • 首选项:根=亮度
  • 首选项:根=通用及路径=蓝牙
  • 首选项:根=通用及路径= DATE_AND_TIME
  • 首选项:根= FACETIME
  • 首选项:根=通用
  • 首选项:根=通用及路径=键盘
  • 首选项:根= CASTLE
  • 首选项:根=城堡&路径= STORAGE_AND_BACKUP
  • 首选项:根=通用及路径= INTERNATIONAL
  • 首选项:根= LOCATION_SERVICES
  • 首选项:根= ACCOUNT_SETTINGS
  • 首选项:根= MUSIC
  • 首选项:根=音乐与路径= EQ
  • 首选项:根=音乐与路径= VolumeLimit
  • 首选项:根=通用及路径=网络
  • 首选项:根= NIKE_PLUS_IPOD
  • 首选项:根= NOTES
  • 首选项:根= NOTIFICATIONS_ID
  • 首选项:根=电话
  • 首选项:根=照片
  • 首选项:根=通用及路径= ManagedConfigurationList
  • 首选项:根=通用及路径=复位
  • 首选项:根=声音和路径=铃声
  • 首选项:根= Safari浏览器
  • 首选项:根=通用及路径=助理
  • 首选项:根=声音
  • 首选项:根=通用及路径= SOFTWARE_UPDATE_LINK
  • 首选项:根= STORE
  • 首选项:根= TWITTER
  • 首选项:根=通用及路径= USAGE
  • 首选项:根= VIDEO
  • 首选项:根=通用及路径=网络/ VPN
  • 首选项:根=壁纸
  • 首选项:根= WIFI
  • 首选项:根= INTERNET_TETHERING

从iOS8开始,您可以打开内置的设置应用程序:

 NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; } 

实际的URL字符串是@"app-settings:" 。 我尝试追加不同部分的字符串(“蓝牙”,“通用”等),但似乎只有链接到主要设置屏幕的作品。 发表一个答复,如果你发现了其他情况。

如果您将iOS的prefs URL方案添加到您的iOS应用程序中,它将允许您使用我们在iOS 5中可以使用的所有方案。我已经在iOS 9上对其进行了测试,但是我认为它也适用于旧版本。

更新:

prefs:从iOS 10开始不起作用。

是的,看到这个(还有更多),甚至在测试应用程序中实现它。 真的需要得到苹果公司的权威词汇,但是社区的共识是苹果在公开“发现/公布”之后不允许在5.1版本中公开发表,否则包含它的申请将不被接受。

08/01/12更新:通过我的开发人员帐户问苹果是否有方法以编程方式启动WiFi设置对话框。 这是回应:

“我们的工程师已经审查了您的要求,并得出结论认为,鉴于目前的运输系统配置,没有支持的方式来实现所需的功能。”

iOS 9中,它再次运作!

要打开设置>常规>键盘 ,我使用:

 prefs:root=General&path=Keyboard 

而且, 键盘可以走得更远:

 prefs:root=General&path=Keyboard/KEYBOARDS 

我想打开设置应用程序中的蓝牙菜单,上面的路径(prefs:root = General&path = Bluetooth)不适用于我。 最后为我工作的是

 UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=Bluetooth")!) 

确保首先定义了prefs URL Scheme。

解决方案为iOS10。 工作正常。

 NSURL *URL = [NSURL URLWithString:@"App-prefs:root=TWITTER"]; [[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil]; 

从iOS10开始,你可以使用

 UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root")!) 

打开常规设置。

你也可以添加已知的网址(你可以在最高的答案中看到它们)来打开特定的设置。 例如下面的打开touchID和密码。

 UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root=TOUCHID_PASSCODE")!) 

这里是我发现的其他东西:

  1. 在定义了“prefs”URL Scheme之后, “prefs:root = Safari&path = ContentBlockers”正在模拟器(iOS 9.1 English )上工作,但在Simulator (简体中文)上不能工作。 它只是跳转到Safari,而不是内容拦截器。 如果你的应用程序是国际的,要小心。
    更新:不知道为什么,现在我无法再跳到ContentBlockers,相同的代码,相同的版本,现在不工作。 🙁

  2. 在真正的开发(我的iPhone 6S和iPad的迷你2), “Safari”应该是“SAFARI” ,“Safari”不工作在真正的设备上,“SAFARI”现在在模拟器上工作:

     #if arch(i386) || arch(x86_64) // Simulator let url = NSURL(string: "prefs:root=Safari")! #else // Device let url = NSURL(string: "prefs:root=SAFARI")! #endif if UIApplication.sharedApplication().canOpenURL(url) { UIApplication.sharedApplication().openURL(url) } 
  3. 到目前为止,没有发现iPhone和iPad之间的任何区别。

我在这里更新一个消息。 只使用“首选项:”不被苹果拒绝,我测试了它,并核准了应用程序商店(2016年8月)。 谢谢。

适用于IOS 10的应用程序通知设置(测试)

 if(&UIApplicationOpenSettingsURLString != nil){ [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; } 

iOS 10

使用app-prefs:

 App-prefs:root=MOBILE_DATA_SETTINGS_ID 

参见要点