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


86

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

我发现这可行,可以将用户从我的应用程序定向到“设置”应用程序:

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

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

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

有没有人找到有关此文件的文档或能够完成这项工作?

任何见识将不胜感激。我试图让用户启用应用程序内购买,而不希望用户手动单击“限制”(不是很明显)。


2
有人知道Touch ID和密码的网址吗?
FabianKöbel'16

1
使用它作为触摸ID:prefs:root = TOUCHID_PASSCODE(stackoverflow.com/questions/35410746/…
FabianKöbel,2016年

Answers:


144

AS @Nix王的回答是不行的在IOS 10


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

path组件的名称可能与实际部分的名称不同,但是当前您可能无法直接从URL访问该部分。我找到了可能的URL列表,但没有找到限制,也许还没有找到。

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

  • prefs:root = General&path =关于
  • prefs:root = General&path =可访问性
  • prefs:root = AIRPLANE_MODE
  • prefs:root = General&path = AUTOLOCK
  • prefs:root = General&path = USAGE / CELLULAR_USAGE
  • prefs:root =亮度
  • prefs:root = General&path =蓝牙
  • prefs:root = General&path = DATE_AND_TIME
  • prefs:root = FACETIME
  • prefs:root =常规
  • prefs:root = General&path =键盘
  • prefs:root =城堡
  • prefs:root = CASTLE&path = STORAGE_AND_BACKUP
  • prefs:root = General&path = INTERNATIONAL
  • prefs:root = LOCATION_SERVICES
  • prefs:root = ACCOUNT_SETTINGS
  • prefs:root =音乐
  • prefs:root = MUSIC&path = EQ
  • prefs:root = MUSIC&path = VolumeLimit
  • prefs:root = General&path =网络
  • prefs:root = NIKE_PLUS_IPOD
  • prefs:root =注意
  • prefs:root = NOTIFICATIONS_ID
  • prefs:root =电话
  • prefs:root =照片
  • prefs:root = General&path = ManagedConfigurationList
  • prefs:root = General&path =重置
  • prefs:root =声音和路径=铃声
  • prefs:root = Safari
  • prefs:root = General&path = Assistant
  • prefs:root =声音
  • prefs:root = General&path = SOFTWARE_UPDATE_LINK
  • prefs:root =存储
  • prefs:root = TWITTER
  • prefs:root = General&path =用法
  • prefs:root =视频
  • prefs:root = General&path =网络/ VPN
  • prefs:root =壁纸
  • prefs:root = WIFI
  • prefs:root = INTERNET_TETHERING

54
只是一种警告,idownloadblog.com / 2011/11/29 / iphone-5-1-disables-shortcuts表示,所有指向iOS设置的网址方案都将在iOS5.1中删除(因此类似prefs:root = General&path = Network的网址将不再起作用)因此,请注意。
Hlung 2012年

3
它们并没有完全删除,您只需要将这些URL链接放在UIAlertView中的按钮中即可。因此,简单地把警告在UIAlertView中该应用程序会去后台和设置将打开,然后确定,取消等
zambono

4
它不再起作用,前一段时间它正在我的一个应用程序上工作,但现在不再可用。
zambono 2012年

5
从iOS8开始,您可以使用以下网址启动内置的“设置”应用程序:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
Jason Moore

2
请为ios10提供任何解决方案/替代方案。
ranjit.x.singh's

48

从iOS8开始,您可以使用以下方法打开内置的“设置”应用程序:

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

实际的URL字符串是@"app-settings:"。我尝试将不同的部分附加到字符串(“蓝牙”,“通用”等),但似乎仅链接到主“设置”屏幕有效。否则,请发表回复。


10
这是因为该特定调用是“设置启动URL”。如果存在应用程序的自定义设置,它将打开。如果没有,它只是将“设置”应用程序打开到主屏幕。developer.apple.com/library/ios/documentation/UIKit/Reference/...
日航

1
如果您的应用具有要启用/禁用的特定设置,那就好极了。全部集中在一个地方,无需浏览用户“设置”即可获得所需的配置。谢谢!
kyleturner 2014年

1
@FabianKöbel您能为TouchID和密码找到一个吗?
ShayanK '16

1
@AspersionCast:您可以使用以下代码:prefs:root = TOUCHID_PASSCODE(stackoverflow.com/questions/35410746/…
FabianKöbel,2016年

这似乎是苹果公司目前唯一批准的启动“设置”应用程序的方法。
u2Fan

42

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


此技巧仅适用于不需要此功能的iOS 8。
瓦列里·范

1
但是在iOS 8中同样如此,例如,如果您不将此URL耻辱添加到应用程序中,则不允许打开WiFi设置。
PedroTôrres2015年

你是对的。没想到这个用例。
Valeriy Van

9
@conorgriffin对于您和其他任何想知道环境的人来说:目标| (应用程序)| 信息| 网址类型| +
凯文·西尔维斯特

有人说他被拒绝使用“ prefs:root” URL。stackoverflow.com/questions/8246070/…–
Hlung

33

更新:

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


4
有什么选择?
OXXY

1
这太疯狂了,因为此官方Apple文档(developer.apple.com/library/ios/qa/qa1924/_index.html)专门解决了偏好问题,并于2016年8月2日发布。
daspianist's

1
该文档确实说仅将其用于键盘设置(除该特定用途以外的任何其他用途
Peter Johnson

不幸的是,似乎没有即使在iOS的10键盘设置工作
Intrications

4
尽管prefs:不再起作用,但以下操作(至少在一般情况下有效):App-Prefs::root=Settings&path=General
daspianist

22

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

2012年8月1日更新:通过我的开发人员帐户询问苹果是否可以通过编程方式启动“ WiFi设置”对话框。这是响应:

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


9
我建议需要此功能的任何人记录正式的错误报告。报告的次数越多,可见的内容就越多,将来有更好的机会提出受支持的解决方案。bugreport.apple.com
马特·康诺利

18

iOS 9中,它可以再次使用!

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

prefs:root=General&path=Keyboard

此外,可以更进一步介绍Keyboards

prefs:root=General&path=Keyboard/KEYBOARDS

我刚刚在PopKey应用程序中注意到了这一点。我尝试了“设置”>“ Wi-Fi设置”的网址,它也可以正常运行。我们希望这仍然存在。
Jamie McDaniel 2015年

这些方案是否需要添加到LSApplicationQueriesSchemesinfo.plist
2015年

2
不,他们没有。只需将其与openURL:方法一起使用。
米哈伊尔(Mikhail)

1
我正在尝试使用它来链接网页上的设置,它似乎可以在iPhone上的Safari中工作,但不能在iPad上工作。两者都在9.0.2上。说真的,苹果?
Randy H.

3
仍然需要向目标添加prefs URL方案
shim

7

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

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

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


这是因为在最近的iOS版本中,蓝牙菜单已被移动。现在是顶级设置,不在General之下。
Nate

@Imran:您忘记了prefs-stuff。
Michael Dorner

5

iOS10解决方案。工作正常。

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

这是合法的吗?成功提交应用程序并不意味着这是合法的。它最终可能会在将来失败
。– Stas

@Stas:不,不是,因为它是私有API。
Tejas K,

4

从iOS10开始,您可以使用

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

打开常规设置。

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

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

1
“ App-Prefs:root = TOUCHID_PASSCODE”在iOS 11上不起作用。还有其他解决方案吗?
myaug

App-Prefs是一个专用API,在审核期间会导致应用被拒绝。
Tejas K,

2

这是我发现的其他内容:

  1. 定义“ prefs” URL方案后,“ prefs:root = Safari&path = ContentBlockers”在Simulator(iOS 9.1英文)上工作,但在Simulator (简体中文)上不工作。它只是跳到Safari,而不是Content Blockers。如果您的应用程序是国际化的,请当心。
    更新:不知道为什么,现在我不能再进入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之间有任何区别。


您有没有再次进行这项工作?如果不是这样的耻辱!
瑞安·布罗迪

@RyanBrodie“这么可耻”是什么意思?
徐开元

非常不幸,直接链接到Safari的Content Blocker设置非常好
Ryan Brodie 2015年

6
@RyanBrodie即使它可以工作,我还是建议您不要立即将其用于App Store应用程序,今天早晨我刚从iTunes Connect中收到“已拒绝”消息,因为“ prefs:root”是私有API(有些应用程序在App Store上使用prefs:root ...天知道为什么)
徐开元2015年

我没有意识到非常感谢您的注意!
瑞安·布罗迪

2

在IOS 10上的App Notification设置工作正常(已测试)

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


0

我在这里更新一个新闻。使用'prefs:'不会被Apple拒绝,我对其进行了测试并确认已批准进入应用商店(2016年8月)。谢谢。


我正在使用它[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=DO_NOT_DISTURB"]];来打开设备的DND设置。苹果会拒绝这个吗?
Shreyank's

它只是通过审核还是有效?我的意思是openURL会带您进入设置吗?它在我这边没有用。
AhmetAkkök'16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.