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

时间:2011-11-23 16:57:16

标签: ios iphone settings url-scheme uiapplication

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

我发现这可行,将用户从我的应用程序导向设置应用程序:

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

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

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

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

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

13 个答案:

答案 0 :(得分:140)

AS @Nix Wang的回答这不适用于 IOS 10


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

path组件的名称可能与实际部分的名称不同,但您也可能无法直接从URL访问该部分。我发现了一个可能的URL列表,并且没有限制,可能它还没有找到。

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

  • 首选项:根=通用及安培;路径=关于
  • prefs:root = General& path = ACCESSIBILITY
  • 首选项:根= AIRPLANE_MODE
  • prefs:root = General& path = AUTOLOCK
  • prefs:root = General& path = USAGE / CELLULAR_USAGE
  • prefs:root =亮度
  • prefs:root = General& path = Bluetooth
  • 首选项:根=通用及安培;路径= DATE_AND_TIME
  • prefs:root = FACETIME
  • 首选项:根=通用
  • prefs:root = General& path = Keyboard
  • 首选项:根= CASTLE
  • prefs:root = CASTLE& path = STORAGE_AND_BACKUP
  • prefs:root = General& path = INTERNATIONAL
  • prefs:root = LOCATION_SERVICES
  • 首选项:根= ACCOUNT_SETTINGS
  • prefs:root = MUSIC
  • 首选项:根=音乐与安培;路径= EQ
  • prefs:root = MUSIC& path = VolumeLimit
  • prefs:root = General& path = Network
  • prefs:root = NIKE_PLUS_IPOD
  • prefs:root = NOTES
  • 首选项:根= NOTIFICATIONS_ID
  • 首选项:根=电话
  • prefs:root = Photos
  • prefs:root = General& path = ManagedConfigurationList
  • prefs:root = General& path = Reset
  • prefs:root = Sounds& path =铃声
  • 首选项:根= Safari浏览器
  • prefs:root = General& path = Assistant
  • 首选项:根=声音
  • prefs:root = General& path = SOFTWARE_UPDATE_LINK
  • prefs:root = STORE
  • 首选项:根= TWITTER
  • 首选项:根=通用及安培;路径= USAGE
  • prefs:root = VIDEO
  • 首选项:根=通用及安培;路径=网络/ VPN
  • prefs:root = Wallpaper
  • 首选项:根= WIFI
  • 首选项:根= INTERNET_TETHERING

答案 1 :(得分:47)

从iOS8开始,您可以使用以下命令打开内置的“设置”应用

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

实际的网址字符串为@"app-settings:"。我尝试在字符串中附加不同的部分("蓝牙"," GENERAL"等),但似乎只链接到主设置屏幕。如果您发现其他情况,请发布回复。

答案 2 :(得分:42)

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

答案 3 :(得分:32)

更新

自iOS 10以来,

prefs:将无效。

答案 4 :(得分:22)

是的,看到了这个(以及更多),甚至在测试应用程序中实现了它。真的需要从苹果公司得到明确的一句话,但社区的共识意见是苹果公司在公开“发现/发布”后不允许使用它,因此包含它的应用程序将不被接受。

08/01/12更新:通过我的开发者帐户询问Apple是否有办法以编程方式启动WiFi设置对话框。以下是回复:

  

“我们的工程师已经审核了您的要求并得出结论   没有支持的方法来实现所需的功能   目前正在发货的系统配置。“

答案 5 :(得分:18)

iOS 9 中,它再次有效!

要打开设置>一般>键盘,我用:

prefs:root=General&path=Keyboard

此外,可以更进一步键盘

prefs:root=General&path=Keyboard/KEYBOARDS

答案 6 :(得分:7)

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

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

确保首先定义prefs网址方案。

答案 7 :(得分:5)

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

function eris_entry_header() {

if ( !is_single() && ( !is_search() && ( 'link' == get_post_format() || 'quote' == get_post_format() ) ) ) {
    return;
}

$time_string = '<time class="entry-date published updated" datetime="%1$s">%2$s</time>';

if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) {
    $time_string = '<time class="entry-date published" datetime="%1$s">%2$s</time><time class="updated" datetime="%3$s">%4$s</time>';
}

$edit_post_link = '';

if ( is_user_logged_in() ) {
    $edit_post_link = '<a href="' . esc_url( get_edit_post_link() ) . '"></a>';
}

$time_string = sprintf( $time_string,
    esc_attr( get_the_date( 'c' ) ),
    esc_html( get_the_date() ),
    esc_attr( get_the_modified_date( 'c' ) ),
    esc_html( get_the_modified_date() )
);

$posted_on = sprintf(
    esc_html_x( '%s', 'post date', 'eris' ),
    '<a href="' . esc_url( get_permalink() ) . '" rel="bookmark">' . $time_string . '</a>'
);

if ( 'portfolio' == get_post_type() ) {
    $categories_list = get_the_term_list( get_the_ID(), 'ct_portfolio', '', '&nbsp;', '' );
} else {
    $categories_list = get_the_term_list( get_the_ID(), 'category', '', '&nbsp;', '' );
}

if ( is_single() ) {
    the_title( '<h1 class="entry-title">', '</h1>' );
} else {
    the_title( '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' );
}

printf( '<div class="entry-meta"><span class="category-list">%1$s</span><span class="post-date">%2$s</span><span class="edit-link">%3$s</span></div>', $categories_list, $posted_on, $edit_post_link );}

答案 8 :(得分:4)

从iOS10开始,您可以使用

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

打开常规设置。

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

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

答案 9 :(得分:2)

以下是我发现的其他内容:

  1. 在我定义了“prefs”网址后,“prefs:root = Safari&amp; path = ContentBlockers”正在使用模拟器(iOS 9.1 英文 ),但不适用于模拟器(简体中文)。它只是跳转到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之间没有发现任何差异。

答案 10 :(得分:2)

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

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

答案 11 :(得分:2)

iOS 10

使用app-prefs:

App-prefs:root=MOBILE_DATA_SETTINGS_ID

请参阅gist

答案 12 :(得分:0)

我在这里更新一条新闻。 使用'prefs:'只是不被Apple拒绝,我测试并检查批准到应用程序商店(2016年8月)。 THX。