前言
有个需求是根据App未打开权限跳转相应的设置页面,如WIFI,蓝牙,通知等等.
经过调研后有以下结论
iOS 10 之后苹果加强了对权限和隐私的控制,不允许App跳转到相应的设置页面,建议是跳转到相应App的设置界面如下示例图:
此方式仅需要使用代码
//跳转App应用设置
if let url = URL(string: UIApplication.openSettingsURLString) {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
注:此方法,必须App有相应权限才会跳转,如果是一个新的App没用调取任何权限则只会跳转到iOS设置首页,如果App调用了定位,通知,则会跳转到应用设置页且展示定位和通知的选项
跳转到相应页面
那么跳转到相应页面的需求是否能实现呢?
是可以的!
首先我们看看iOS 10 以后网络上的资料
打开通用设置: App-Prefs:root=General
打开关于本机: App-Prefs:root=General&path=About
打开软件更新: App-Prefs:root=General&path=SOFTWARE_UPDATE_LINK
打开网络设置: App-Prefs:root=General&path=Network
打开Wi-Fi设置: App-Prefs:root=WIFI
打开蓝牙设置: App-Prefs:root=Bluetooth
打开移动数据设置: App-Prefs:root=MOBILE_DATA_SETTINGS_ID
打开运营商设置: App-Prefs:root=Carrier
打开个人热点设置: App-Prefs:root=INTERNET_TETHERING
打开声音和振动设置: App-Prefs:root=Sounds
打开显示和亮度设置: App-Prefs:root=Brightness
打开壁纸设置: App-Prefs:root=Wallpaper
打开Siri设置: App-Prefs:root=SIRI
打开Touch ID和密码设置: App-Prefs:root=TOUCHID_PASSCODE
打开Face ID和密码设置: App-Prefs:root=PASSCODE
打开隐私设置: App-Prefs:root=Privacy
打开位置服务设置: App-Prefs:root=LOCATION_SERVICES
打开日期和时间设置: App-Prefs:root=General&path=DATE_AND_TIME
打开iCloud设置: App-Prefs:root=CASTLE
打开iCloud存储空间设置: App-Prefs:root=CASTLE&path=STORAGE_AND_BACKUP
在最新的系统中 这样设置无效,只会跳转到首页
经过查询资料后发现,在文章发布日期时用
App-prefs:WIFI格式的字符串是可以跳转的
如:App-prefs:WIFI,App-prefs: Bluetooth,App-prefs: INTERNET_TETHERING
示例代码:
let url = URL(string: "App-prefs:WIFI")!
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
}
总结
目前官方推荐的实现方式是跳转App应用设置页面,但是要实现跳转相应的设置页面也是有方法做到的(相关资料说此方法被苹果官方认定为私有API,有上架被拒绝的风险,所以在使用并且上架时需和领导或产品进行讨论)
个人建议 使用跳转App应用设置的方案基本是可以实现相应的需求的,在不是必须要跳转到系统的设置页时建议使用方案一,避免被拒绝风险.