美文网首页iOS开发ios 知识小集iOS-进阶学习
关于iOS应用跳转“prefs:root”无效的问题(包括iOS

关于iOS应用跳转“prefs:root”无效的问题(包括iOS

作者: 司机王 | 来源:发表于2016-05-03 10:58 被阅读18843次

    重要!!!!!!
    最新更新iOS10
    运行iOS10会报错

    -canOpenURL: failed for URL: "prefs:root=Bluetooth" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"

    发现iOS10里使用下面方法已经不行了,查阅各种文档,只有老外说的这么一句话,

    You can use UIApplicationOpenSettingsURLString
    to open your own app's settings (this has been available since iOS 8) but any other prefs:
    URL is now considered a private API and use will result in app rejection.

    意思就是苹果已经不允许app跳到各个设置页面了,只能用

    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    

    代替。

    (注:openURL这个api也在iOS10上过时,现在openURL:options:CompletionHandler:取代)

    如果你的项目曾经使用过下面的方法,想办法改变一下吧。

    ---------------------------------------分隔线------------------------------------------
    如果你的项目在iOS10以下:

    最近开发遇到一个很奇怪的问题,就是我们需要在app内部跳转到iOS的蓝牙开启页面。其实很简单就是三行代码的事:

     NSURL *url = [NSURL URLWithString:@"prefs:root=Bluetooth"];
        
        if ([[UIApplication sharedApplication]canOpenURL:url]) {
        
            [[UIApplication sharedApplication]openURL:url];
        
        }
    

    开发的时候测试可以,然后甩着不管了。

    然后就在五一的前一天,无意间发现,这个canOpenURL返回的竟然是否,然后openURL也打不开系统的蓝牙设置页。顿时蛋疼了起来。排查起来,发现关于所有的prefs:root系统的这种URL都打不开了,卧槽这不扯呢么,为什么好好的就不行了呢,Code的小船就这么翻了吗?

    上网查一下吧,baidu上完全没有这方面的信息,只好上StackOverFlow看一下。不得不说这方法还是歪果仁的信息全面,一查一准。

    “First configure the URL Schemes in your project. You will find it in Target -> Info -> URL Scheme. click on + button and type prefs in URL Schemes”

    加个这么个东西.png

    也就是说加了URL Schemes:prefs 这么一个玩意就能跳了,果然一跑也能跳了。这不坑爹呢么,为什么突然间就要加这个东西呢。我和同事想了想,只能一句话总结..可能是Xcode7.3的原因吧。

    附系统跳转代码

    Swift
    
    UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General")!)
    
    Objective-c
    
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General"]];
    
    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=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
    prefs:root=Sounds
    prefs:root=General&path=SOFTWARE_UPDATE_LINK
    prefs:root=STORE
    prefs:root=TWITTER
    prefs:root=FACEBOOK
    prefs:root=General&path=USAGE prefs:root=VIDEO
    prefs:root=General&path=Network/VPN
    prefs:root=Wallpaper
    prefs:root=WIFI
    prefs:root=INTERNET_TETHERING
    
    

    相关文章

      网友评论

      • 清都:现在直接用`UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)!, options: [:], completionHandler: nil)`这个方法跳转到设置页面了,直接跳转到WiFi页面这种的会被拒。当前也可以通过转换成ASCII码的方式绕过去,不过指不定什么时候苹果注意到这个了也封掉就悲催了。还是老老实实跳到设置界面吧:joy:
      • 麦子_KB:上线会被拒的,不要用了
      • _东阁堂主_:您好,跳转到勿扰模式是哪一个,谢过
      • 清無:ios 10就不行了
      • 5373a274bd80: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"App-Prefs:root=WIFI"]];
        Wifi的亲测,可以
        97f93e0c3c7b:测试跳到蓝牙可行。。几天前才试了prefs:root=Blutooth也行,这丫的苹果就是作。。
        43d59f15f36d:@影痕残碎 同问,上架会被拒吗
        影痕残碎:上架会被拒吗?
      • 默默磨墨:不能用啊老司机,像支付宝那样,touch id锁定后弹出系统输入密码界面应该怎么做
      • 無漾:iOS10不行啊,报-10814
        無漾:@小爷的岁月 只是跳到当前应用的设置界面,客户要跳到系统的,不行。
        GrayTaiWolf:@無漾 解决了么 同样的问题
      • Roger1219:ios10依然可以,只有首字母大写即可,但是只能从通知中调用
        阿小大人:@koreadragon 这个黑魔法上架会被拒吗?
        koreadragon:@2ca91432920a
        ```
        //注意首字母改成了大写,prefs->Prefs
        NSURL*url=[NSURL URLWithString:@"Prefs:root=General&path=About"];
        Class LSApplicationWorkspace = NSClassFromString(@"LSApplicationWorkspace");
        [[LSApplicationWorkspace performSelector:@selector(defaultWorkspace)] performSelector:@selector(openSensitiveURL:withOptions:) withObject:url withObject:nil];

        ```
        小灬博:@Roger1219 什么方法可以用 求指教
      • iOS之星:感谢大神的分享, 但是安装大神你的方法根本就不会跳到系统界面啊
        iOS之星:@司机王 我xcode项目是适配ios7以上的系统, 但是我的工具是xcode8的.到处都找不到方法跳转到系统wifi :sob:
        司机王:@iOS星客 iOS10以上方法都无效
      • 4985fe6e5886:iOS10 Today小插件可以跳转。
        用self.extensionContext.open(NSURL(string: "Prefs:root=WIFI
        可以实现
        4985fe6e5886:@iOS星客 today插件,就是通知中心那个,一直都有
        iOS之星:@yozoo 而且如果这样做了,存在不能上架的风险吧, 大神这样写, 上架成功了吗
        iOS之星:@yozoo 感谢大神分享, 好像ios不能用插件吧
      • 南方小金豆:但是挑到那个设置UIApplicationOpenSettingsURLString 里面没有蓝牙的选项啊。还有其它办法去设置蓝牙嘛
        司机王:@那份牵挂给了谁 或许有吧,但是不知道是什么黑科技, 让你们产品取消这个功能吧
      • 正确的道路上用笨方法:设置后不能呢个用
        5c6e2dc0a022:我也是
      • 天才小L:确定iOS10可以???
        司机王:@十位数 上面不是说了iOS10已经不能用了吗
      • StevenC:iOS 10.0.1 Xcode 8.0 GM Seed 版本还是有这个问题。
      • 达子的春天:The “prefs” URL Scheme not woring in iOS 10
        司机王:@达子的春天 iOS10里被弃用了。。
      • 嗯哎嘶唠咯:学习了学习了

      本文标题:关于iOS应用跳转“prefs:root”无效的问题(包括iOS

      本文链接:https://www.haomeiwen.com/subject/cfnlrttx.html