前言
有个需求是根据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)
}
2024-11-21
最新测试 iOS 18 上面的方法也只能跳转到首页了
论坛上也有人说不能跳转了,这个属于私有方法苹果更新后导致不能使用也属于正常,建议还是遵循苹果官方的方法
https://forums.developer.apple.com/forums/thread/759900
该论坛提出
消息设置:App-prefs:com.apple.MobileSMS
手机设置:App-prefs:com.apple.mobilephone
Safari浏览器:App-Prefs:com.apple.mobilesafari
以上测试是可用的
参考地址:https://github.com/bhagyas/app-urls?tab=readme-ov-file#settings-app-preferences (暂未更新到最新)
总结
目前官方推荐的实现方式是跳转App应用设置页面,但是要实现跳转相应的设置页面也是有方法做到的(相关资料说此方法被苹果官方认定为私有API,有上架被拒绝的风险,所以在使用并且上架时需和领导或产品进行讨论)
个人建议 使用跳转App应用设置的方案基本是可以实现相应的需求的,在不是必须要跳转到系统的设置页时建议使用方案一,避免被拒绝风险.