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

87

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

我已经发现这可以使用户从我的应用程序中跳转到设备的设置界面:

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

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

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

有人找到相关文档或成功实现了吗?

非常感谢任何见解。我正在尝试让用户启用应用内购买,而不想让用户手动点击“限制”(这并不明显)。


2
有人知道Touch ID和Passcode的URL吗? - Fabian Köbel
1
使用以下代码来启用Touch ID:prefs:root=TOUCHID_PASSCODE (https://dev59.com/jlsW5IYBdhLWcg3wFj5p#35411090) - Fabian Köbel
14个回答

146

根据@Nix Wang的回答,此方法在中不起作用。


警告:此方法对于运行iOS 5.1及以上版本的设备无效-请查看Hlung的评论。

可能path组件具有不同于实际部分的名称,但也有可能您当前无法直接从URL访问该部分。我找到了一个可能的URL列表,其中不包括“限制”,也许尚未发现。

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

  • prefs:root=General&path=About
  • prefs:root=General&path=ACCESSIBILITY(辅助功能)
  • prefs:root=AIRPLANE_MODE(飞行模式)
  • prefs:root=General&path=AUTOLOCK(自动锁定)
  • prefs:root=General&path=USAGE/CELLULAR_USAGE(使用情况/移动蜂窝数据使用情况)
  • prefs:root=Brightness(亮度)
  • prefs:root=General&path=Bluetooth(蓝牙)
  • prefs:root=General&path=DATE_AND_TIME(日期和时间)
  • prefs:root=FACETIME
  • prefs:root=General
  • prefs:root=General&path=Keyboard(键盘)
  • prefs:root=CASTLE
  • prefs:root=CASTLE&path=STORAGE_AND_BACKUP(存储和备份)
  • prefs:root=General&path=INTERNATIONAL(语言与地区)
  • prefs:root=LOCATION_SERVICES(定位服务)
  • prefs:root=ACCOUNT_SETTINGS(账户设置)
  • prefs:root=MUSIC
  • prefs:root=MUSIC&path=EQ(均衡器)
  • prefs:root=MUSIC&path=VolumeLimit(音量限制)
  • prefs:root=General&path=Network(网络)
  • prefs:root=NIKE_PLUS_IPOD
  • prefs:root=NOTES(备忘录)
  • prefs:root=NOTIFICATIONS_ID(通知)
  • prefs:root=Phone(电话)
  • prefs:root=Photos(照片)
  • prefs:root=General&path=ManagedConfigurationList(受管理的配置文件列表)
  • prefs:root=General&path=Reset(重置)
  • prefs:root=Sounds&path=Ringtone(铃声)
  • prefs:root=Safari
  • prefs:root=General&path=Assistant(Siri与搜索)
  • prefs:root=Sounds(声音)
  • prefs:root=General&path=SOFTWARE_UPDATE_LINK(软件更新)
  • prefs:root=STORE(iTunes Store和App Store)
  • prefs:root=TWITTER
  • prefs:root=General&path=USAGE(用量)
  • prefs:root=VIDEO
  • prefs:root=General&path=Network/VPN(网络/VPN)
  • prefs:root=Wallpaper(壁纸)
  • prefs:root=WIFI
  • prefs:root=INTERNET_TETHERING(个人热点)

55
友情提醒,http://www.idownloadblog.com/2011/11/29/iphone-5-1-disables-shortcuts/ 指出,在iOS5.1中所有链接到iOS设置的url scheme都将被删除(因此像prefs:root=General&path=Network这样的链接将不再起作用)。所以,请注意。 - Hlung
4
它们并没有完全被移除,你只需要将这些URL链接放在UIAlertView的按钮中。因此,在UIAlertView中简单地添加一个警告,说明应用程序将转至后台并打开设置,然后显示“确定”、“取消”等选项。 - zambono
4
不再起作用了,之前在我的一个应用程序中能够正常工作,但现在无法工作。 - zambono
5
从iOS8开始,您可以使用以下url启动内置的设置应用程序:[NSURL URLWithString:UIApplicationOpenSettingsURLString] - Jason Moore
2
请问有没有iOS10的解决方案或替代方案? - ranjit.x.singh
显示剩余26条评论

48

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

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
   [[UIApplication sharedApplication] openURL:url];
}
实际的URL字符串是@"app-settings:"。我尝试将不同的部分添加到字符串中("Bluetooth","GENERAL"等),但似乎只有链接到主设置屏幕才有效。如果您发现其他情况,请回复本帖。

10
这是因为这个特定的调用是“设置启动URL”。如果应用程序具有自定义设置,它将打开该设置。如果没有,则只会打开设置应用程序的主屏幕。https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//apple_ref/doc/constant_group/Settings_Launch_URL - JAL
1
如果您的应用程序具有特定的设置需要启用/禁用,则这是一个非常好的答案。所有设置都在一个地方,无需通过设置导航用户以获取所需的配置。谢谢! - kyleturner
1
@FabianKöbel 你找到TouchID和Passcode的解决方案了吗? - ShayanK
1
@AspersionCast:你可以使用这个:prefs:root=TOUCHID_PASSCODE(https://dev59.com/jlsW5IYBdhLWcg3wFj5p#35411090) - Fabian Köbel
这似乎是目前唯一被苹果批准的启动设置应用程序的方法。 - u2Fan
不行苹果拒绝了我们的应用,原因是因为这个"prefs:"。 - ergunkocak

42

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


这个技巧只适用于iOS 8及以上版本,之后就不再需要它了。 - Valeriy Van
1
但是在iOS 8中,如果您没有将此URL添加到应用程序中,您将无法打开WiFi设置,例如。 - Pedro Tôrres
是的,你说得对。我没有考虑到这种使用情况。 - Valeriy Van
9
针对您和其他想了解此设置的人:目标 |(应用程序)| 信息 | URL类型 | + - Kevin Sylvestre
有人说他因为使用了“prefs:root”网址而被拒绝。https://dev59.com/6msy5IYBdhLWcg3w5CBr#iK6gEYcBWogLw_1b2g6k - Hlung

34

更新:

prefs:自iOS 10以后已经失效。


4
替代方案是什么? - OXXY
1
这太疯狂了,因为这份官方的 Apple 文档(https://developer.apple.com/library/ios/qa/qa1924/_index.html)特意解决了 prefs 问题,日期是 2016 年 8 月 2 日。 - daspianist
1
那份文档确实只说了要将其用于键盘设置(除此之外的任何使用都是违规的)。 - Peter Johnson
嘿,这确实在iOS10上不再起作用,但有趣的是,像谷歌地图/苹果地图这样的应用程序,在您在设置中禁用位置服务并尝试调用这些应用程序中的“导航”功能时,两个应用程序都能够打开设置/位置服务,即使在iOS 10上 :)..黑客,或者我不知道(在苹果应用程序的情况下并不奇怪,但在谷歌地图的情况下..) - luky
4
虽然 prefs: 不再起作用,但以下内容可以实现相同的功能(至少在打开常规设置方面):App-Prefs::root=Settings&path=General - daspianist
显示剩余4条评论

22

是的,看到过这个(和许多其他的),甚至在测试应用程序中实现了它。确实需要从苹果公司获得权威的解释,但社区一致认为在5.1之后被公开“发现/发布”后,苹果禁止了它,因此包含它的应用程序将不会被接受。

08/01/12更新:通过我的开发者账户向苹果提问是否有一种编程方式来启动WiFi设置对话框。以下是回复:

"我们的工程师已经审核了您的请求,并得出结论 在当前的系统配置下,没有支持的方式来实现所需的功能。"


9
我建议需要此功能的人提交官方的错误报告。报告次数越多,就越容易引起注意,以及未来出现支持解决方案的机会就会更大。http://bugreport.apple.com/ - Matt Connolly

18

iOS 9中,它再次可用!

我使用以下方法打开“设置>通用>键盘”:Settings > General > Keyboard

prefs:root=General&path=Keyboard

此外,还可以更进一步地探索键盘

prefs:root=General&path=Keyboard/KEYBOARDS

我刚在PopKey应用程序中注意到了这一点。我尝试了设置> Wi-Fi设置的URL,它也可以正常工作。希望这能保持不变。 - Jamie McDaniel
这些方案需要添加到 info.plist 中的 LSApplicationQueriesSchemes 吗? - Warpling
2
不需要。只需使用openURL:方法即可。 - Mikhail
1
我正在尝试使用这个链接从网页连接到设置页面,它似乎可以在iPhone的Safari上工作,但不能在iPad上运行。两者均为9.0.2版。认真点,苹果! - Randy H.
3
仍需要将偏好设置的 URL 方案添加到目标中。 - shim
显示剩余9条评论

7

我想在设置应用程序中打开蓝牙菜单,但上述路径(prefs:root=General&path=Bluetooth)对我无效。 最终有效的方法是

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

请确保您首先定义了prefs URL Scheme。

这是因为在最近的iOS版本中,蓝牙菜单已经被移动了。现在它是一个顶级设置,不再在“通用”下面。 - Nate
@Imran:你忘记了prefs这部分内容。 - Michael Dorner

5

iOS10的解决方案。效果不错。

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

这是合法的吗?成功提交应用程序并不意味着它是合法的。它在未来可能会失败。 - Stas
@Stas:不是的,因为它是私有API。 - Tejas K
重要提示:prefs: URL方案未经记录。除非在本文档中描述的特定情况下使用,否则将违反iOS应用程序审核指南,并可能导致您的应用被拒绝。您只能使用清单1中的特定URL方案来打开键盘设置,并且仅限于自定义键盘扩展。它不能被任何其他类型的应用程序使用,也不能用于打开任何其他设置。https://developer.apple.com/library/archive/qa/qa1924/_index.html - Pouria Almassi

4

iOS10之后,你可以使用

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

打开通用设置。

同时,您还可以将已知的网址(您可以在最受欢迎的答案中看到它们)添加到其中以打开特定设置。例如,下面的网址可打开Touch ID和密码设置。

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

1
“App-Prefs:root=TOUCHID_PASSCODE” 在iOS 11上无法使用。还有其他解决方案吗? - myaug
App-Prefs 是一个私有 API,使用它将导致应用在审核期间被拒绝。 - Tejas K
重要提示:prefs: URL方案未经记录。除非在本文档中描述的特定情况下使用,否则将违反iOS应用程序审核指南,并可能导致您的应用被拒绝。您只能使用清单1中的特定URL方案来打开键盘设置,并且仅限于自定义键盘扩展。它不能被任何其他类型的应用程序使用,也不能用于打开任何其他设置。https://developer.apple.com/library/archive/qa/qa1924/_index.html - Pouria Almassi

2

iOS 10

请使用app-prefs:

App-prefs:root=MOBILE_DATA_SETTINGS_ID

请查看gist

重要提示:prefs: URL 方案是未记录的。除了本文档中描述的特定情况外,其使用违反 iOS 应用审核指南,可能导致您的应用被拒绝。您只能使用清单 1 中的特定 URL 方案来打开键盘设置,并且只能从自定义键盘扩展中使用。它不能被任何其他类型的应用程序使用,也不能用于打开任何其他设置。https://developer.apple.com/library/archive/qa/qa1924/_index.html - Pouria Almassi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接