【问题标题】:iOS Launching Settings -> Restrictions URL SchemeiOS 启动设置 -> 限制 URL 方案
【发布时间】:2012-02-20 22:16:30
【问题描述】:

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

我发现这很有效,将用户从我的应用程序引导到“设置”应用程序:

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

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

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

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

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

【问题讨论】:

标签: ios iphone settings url-scheme uiapplication


【解决方案1】:

iOS 10

使用app-prefs:

App-prefs:root=MOBILE_DATA_SETTINGS_ID

gist

【讨论】:

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

正如@Nix Wang 的回答,这在IOS 10

中不起作用

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

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

“设置”应用中当前已知的 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=亮度
  • prefs:root=General&path=蓝牙
  • 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=照片
  • prefs:root=General&path=ManagedConfigurationList
  • prefs:root=General&path=Reset
  • prefs:root=声音&path=铃声
  • prefs:root=Safari
  • prefs:root=General&path=Assistant
  • prefs:root=声音
  • prefs:root=General&path=SOFTWARE_UPDATE_LINK
  • prefs:root=STORE
  • prefs:root=TWITTER
  • prefs:root=General&path=USAGE
  • prefs:root=VIDEO
  • prefs:root=General&path=Network/VPN
  • prefs:root=壁纸
  • prefs:root=WIFI
  • prefs:root=INTERNET_TETHERING

【讨论】:

  • 只是一个善意的警告,idownloadblog.com/2011/11/29/iphone-5-1-disables-shortcutsiOS 设置的所有 url 方案都将在 iOS5.1 中删除(所以像 prefs:root=General&path=Network 这样的 url 将不再工作)所以,请注意。
  • 它们并没有完全删除,您只需将这些 URL 链接放在 UIAlertView 中的按钮中。因此,只需在 UIAlertView 中放置一条警告,即应用程序将进入后台,设置将打开,然后确定,然后取消等。
  • 它不再工作了,它在我的一个应用程序上工作了一段时间,但现在不行了。
  • 从 iOS8 开始,您可以使用以下网址启动内置设置应用程序:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
  • 请提供任何适用于 ios10 的解决方案/替代方案。
【解决方案3】:

iOS10 解决方案。工作正常。

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

【讨论】:

  • 这是合法的吗?成功的应用提交并不意味着这是合法的。将来它最终可能会失败..
  • @Stas :不,不是,因为它是私有 API。
  • > 重要提示:prefs: URL 方案未记录。除本文档中描述的特定情况外,其使用违反了 iOS 应用审查指南,并可能导致您的应用被拒绝。您只能使用清单 1 中的特定 URL 方案来打开键盘设置,并且只能通过自定义键盘扩展。它不能被任何其他类型的应用程序使用,也不能打开任何其他设置。 developer.apple.com/library/archive/qa/qa1924/_index.html
【解决方案4】:

iOS10 起可以使用

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

打开常规设置。

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

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

【讨论】:

  • "App-Prefs:root=TOUCHID_PASSCODE" 在 iOS 11 上不起作用。还有其他解决方案吗?
  • App-Prefs 是私有 API,会导致审核期间应用被拒绝。
  • > 重要提示:prefs: URL 方案未记录。除本文档中描述的特定情况外,其使用违反了 iOS 应用审查指南,并可能导致您的应用被拒绝。您只能使用清单 1 中的特定 URL 方案来打开键盘设置,并且只能通过自定义键盘扩展。它不能被任何其他类型的应用程序使用,也不能打开任何其他设置。 developer.apple.com/library/archive/qa/qa1924/_index.html
【解决方案5】:

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

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

【讨论】:

    【解决方案6】:

    更新:

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

    【讨论】:

    • 有什么选择?
    • 这太疯狂了,因为这个官方 Apple Doc (developer.apple.com/library/ios/qa/qa1924/_index.html) 特意解决了首选项问题,日期为 2016 年 8 月 2 日。
    • 该文档确实说仅将其用于键盘设置(除特定用途之外的任何内容均属违规。)
    • 不幸的是,即使对于 iOS 10 中的键盘设置,它似乎也不起作用。
    • 虽然prefs: 不再起作用,但以下操作(至少在一般情况下)起作用:App-Prefs::root=Settings&path=General
    【解决方案7】:

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

    【讨论】:

    • 我正在使用这个[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=DO_NOT_DISTURB"]]; 来打开设备的免打扰设置。苹果会拒绝这个?
    • 它只是通过了审查还是也有效?我的意思是 openURL 会带你去设置吗?它对我不起作用。
    【解决方案8】:

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

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

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

    【讨论】:

    • 我建议任何需要此功能的人记录官方错误报告。报告的越多,它就越容易被看到,并且将来提供支持的解决方案的机会就越大。 bugreport.apple.com
    【解决方案9】:

    这是我发现的其他东西:

    1. 在我定义了“prefs”URL 方案后,"prefs:root=Safari&path=ContentBlockers" 正在模拟器上运行(iOS 9.1 English),但不适用于模拟器(简体中文)。它只是跳转到 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 有什么区别。

    【讨论】:

    • 你有没有让它再次工作?如果没有,那就太可惜了!
    • @RyanBrodie “这么丢脸”是什么意思?
    • 很遗憾,直接链接到 Safari 的内容拦截器设置会很棒
    • @RyanBrodie 即使它可以工作,我建议你现在不要将它用于 App Store 应用程序,我今天早上刚从 iTunes Connect 收到“拒绝”,用于“prefs:root”是一个私有 API(在 App Store 上有一些应用程序使用 prefs:root ......天知道为什么)
    • 我没有意识到非常感谢您的提醒!
    【解决方案10】:

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

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

    确保首先定义了prefs URL Scheme。

    【讨论】:

    • 这是因为蓝牙菜单在最近的 iOS 版本中被移动了。它现在是顶级设置,不在 General 下。
    • @Imran:你忘了prefs-stuff。
    【解决方案11】:

    iOS 9 中它又可以工作了!

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

    prefs:root=General&path=Keyboard
    

    此外,还可以进一步了解键盘

    prefs:root=General&path=Keyboard/KEYBOARDS
    

    【讨论】:

    • 我刚刚在 PopKey 应用程序中注意到了这一点。我尝试了“设置”>“Wi-Fi 设置”的网址,它也可以正常工作。让我们希望这仍然存在。
    • 这些方案是否需要在info.plist中添加到LSApplicationQueriesSchemes
    • 不,他们没有。只需将其与 openURL: 方法一起使用即可。
    • 我正在尝试使用它来链接到网页中的设置,它似乎可以在 iPhone 上的 Safari 中工作,但不能在 iPad 上工作。两者都在 9.0.2 上。说真的,苹果?
    • 仍然需要将 prefs URL 方案添加到目标
    【解决方案12】:

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

    【讨论】:

    • 这个技巧只适用于不需要它的iOS 8。
    • 但同样在 iOS 8 中,您不允许打开 WiFi 设置,例如,如果您不将此 URL 耻辱添加到您的应用程序。
    • 是的,你是对的。没有考虑过这个用例。
    • @conorgriffin 对于您和其他任何想知道该设置的人:目标 | (应用) |信息 | URL 类型 | +
    • 有人说他因使用“prefs:root”网址而被拒绝。 stackoverflow.com/questions/8246070/…
    【解决方案13】:

    从 iOS8 开始,您可以通过以下方式打开内置设置应用:

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

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

    【讨论】:

    • 那是因为该特定调用是设置启动 URL。它会打开应用程序的自定义设置(如果存在)。如果没有,它只会将“设置”应用程序打开到主屏幕。 developer.apple.com/library/ios/documentation/UIKit/Reference/…
    • 如果您的应用具有您想要启用/禁用的特定设置,那将是绝佳的答案。全部集中在一处,无需通过“设置”导航用户即可获得所需的配置。谢谢!
    • @FabianKöbel 你能找到一个用于 TouchID 和密码的吗?
    • @AspersionCast :你可以使用这个:prefs:root=TOUCHID_PASSCODE (stackoverflow.com/questions/35410746/…)
    • 这似乎是目前 Apple 批准的唯一启动“设置”应用的方法。
    猜你喜欢
    • 2015-05-06
    • 2014-11-17
    • 2016-10-22
    • 2014-04-03
    • 1970-01-01
    • 2021-04-14
    • 2012-10-25
    相关资源
    最近更新 更多