86

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

我发现这可以工作,将用户从我的应用程序引导到设置应用程序:

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

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

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

有没有人找到这方面的文档或能够完成这项工作?

任何见解将不胜感激。我试图让用户启用应用内购买,并且不希望用户手动点击限制(不是很明显)。

4

13 回答 13

145

正如@Nix Wang的回答,这在IOS 10中不起作用


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

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

设置应用程序中当前已知的 URL 列表:

  • prefs:root=General&path=关于
  • 首选项:root=General&path=ACCESSIBILITY
  • 首选项:root=AIRPLANE_MODE
  • 首选项:root=General&path=AUTOLOCK
  • 首选项:root=General&path=USAGE/CELLULAR_USAGE
  • 首选项:根=亮度
  • 首选项:根=常规&路径=蓝牙
  • 首选项:root=General&path=DATE_AND_TIME
  • 首选项:root=FACETIME
  • 首选项:根=常规
  • 首选项:根=常规&路径=键盘
  • 首选项:根=城堡
  • 首选项:root=CASTLE&path=STORAGE_AND_BACKUP
  • 首选项:root=General&path=INTERNATIONAL
  • 首选项:root=LOCATION_SERVICES
  • 首选项:root=ACCOUNT_SETTINGS
  • 首选项:根=音乐
  • 首选项:根=音乐&路径=EQ
  • 首选项:根=音乐&路径=音量限制
  • 首选项:根=常规&路径=网络
  • 首选项:root=NIKE_PLUS_IPOD
  • 首选项:根=注意
  • 首选项:root=NOTIFICATIONS_ID
  • 首选项:根=电话
  • 首选项:根=照片
  • prefs:root=General&path=ManagedConfigurationList
  • 首选项:根=常规&路径=重置
  • 首选项:根=声音&路径=铃声
  • 首选项:根=Safari
  • 首选项:root=General&path=Assistant
  • 首选项:根=声音
  • 首选项:root=General&path=SOFTWARE_UPDATE_LINK
  • 首选项:根=存储
  • 首选项:root=TWITTER
  • 首选项:root=General&path=USAGE
  • 首选项:根=视频
  • 首选项:根=常规&路径=网络/VPN
  • 首选项:根=壁纸
  • 首选项:根=WIFI
  • 首选项:root=INTERNET_TETHERING
于 2011-11-23T17:52:56.627 回答
48

从 iOS8 开始,您可以使用以下命令打开内置设置应用程序:

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

实际的 URL 字符串是@"app-settings:". 我尝试将不同的部分附加到字符串(“蓝牙”、“通用”等),但似乎只链接到主设置屏幕有效。如果您发现其他情况,请发布回复。

于 2014-09-30T19:27:47.527 回答
42

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

于 2015-07-06T19:10:22.810 回答
33

更新:

prefs:自 iOS 10 起将无法使用。

于 2016-08-08T09:08:56.313 回答
22

是的,看到了这个(以及更多),甚至在测试应用程序中实现了它。确实需要从 Apple 那里得到明确的消息,但社区一致意见是 Apple 在公开“发现/发布”后在 5.1 中不允许它,因此包含它的应用程序将不被接受。

2012 年 8 月 1 日更新:通过我的开发者帐户询问 Apple 是否有办法以编程方式启动 WiFi 设置对话框。这是回应:

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

于 2012-06-27T03:02:11.057 回答
18

iOS 9中它又可以工作了!

要打开Settings > General > Keyboard,我使用:

prefs:root=General&path=Keyboard

此外,还可以走得更远Keyboards

prefs:root=General&path=Keyboard/KEYBOARDS
于 2015-09-29T08:30:56.030 回答
7

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

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

确保首先prefs定义了 URL 方案。

于 2015-07-23T03:29:35.097 回答
5

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

NSURL *URL = [NSURL URLWithString:@"App-prefs:root=TWITTER"];
[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];
于 2017-02-10T13:22:49.477 回答
4

从 iOS10 开始,您可以使用

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

打开常规设置。

您也可以向其中添加已知网址(您可以在最受好评的答案中看到它们)以打开特定设置。例如下面的一个打开 touchID 和密码。

UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root=TOUCHID_PASSCODE")!)
于 2017-02-06T14:00:14.650 回答
2

这是我发现的其他东西:

  1. 在我定义了“prefs”URL 方案后,“prefs:root=Safari&path=ContentBlockers”在 Simulator (iOS 9.1 English ) 上工作,但在 Simulator (Simplified Chinese)上不工作。它只是跳转到 Safari,而不是内容拦截器。如果您的应用程序是国际化的,请小心。
    更新:不知道为什么,现在我不能再跳入 ContentBlockers,相同的代码,相同的版本,现在不起作用。:(

  2. 在真实设备上(我的是 iPhone 6S 和 iPad mini 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 之间有什么区别。

于 2015-11-24T14:33:08.283 回答
2

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

if(&UIApplicationOpenSettingsURLString != nil){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
于 2017-01-25T12:31:52.783 回答
2

iOS 10

采用app-prefs:

App-prefs:root=MOBILE_DATA_SETTINGS_ID

要点

于 2017-10-08T08:14:30.087 回答
0

我在这里更新一则新闻。仅使用“首选项:”不会被 Apple 拒绝,我对其进行了测试并检查了应用商店的批准(2016 年 8 月)。谢谢。

于 2016-08-05T06:17:14.033 回答