iOS 11下用Swift 4打开设置内应用设置页面的方法咨询
Hey there! Let's break down what's going on here and how to fix it.
首先:你的代码其实是对的,但有前提条件
你用的UIApplicationOpenSettingsURLString就是苹果官方提供的用来直达你的应用专属设置页的URL,那为什么它只打开设置首页呢?大概率是因为你的应用在系统设置里还没有生成独立的设置页面。
系统只会给那些需要用户授权的应用生成专属设置页——比如你的应用请求了相机、通知、定位、相册权限等,并且在Info.plist里添加了对应的权限描述字段(比如NSCameraUsageDescription、NSNotificationUsageDescription)。如果你的应用没有任何需要授权的功能,系统不会为它创建单独的设置入口,这时候调用这个URL就只能打开设置首页。
关于自定义URL Scheme的疑问
直接说结论:不需要用自定义URL Scheme,而且也没办法通过自定义Scheme实现直达应用设置页。
系统的设置页属于系统级界面,只有苹果官方提供的UIApplicationOpenSettingsURLString是合法且受支持的跳转方式。自定义Scheme只能用来跳转到你自己的应用或者其他公开了Scheme的应用,没办法直接指向系统设置里的应用专属页。
优化后的代码示例
你可以稍微完善一下代码,加上回调来确认跳转是否成功:
if let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) { UIApplication.shared.open(settingsUrl) { success in if success { print("成功跳转到应用设置页啦") } else { print("跳转失败,可能你的应用还没有生成专属设置页哦") } } }
额外提醒:跳转到特定设置子项?
如果你想直接跳转到应用设置里的某个子项(比如通知设置、相机权限设置),很遗憾,苹果没有提供公开的API支持这种操作。你只能先跳转到应用的根设置页,让用户手动点击进入子项。用私有API实现的话,会被App Store拒绝,绝对不建议这么做。
内容的提问来源于stack exchange,提问作者Vincent

