出现问题的代码
let url: URL = URL.init(string: UIApplication.openSettingsURLString)!
if UIApplication.shared.canOpenURL(url) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
// Fallback on earlier versions
UIApplication.shared.openURL(url)
}
}
问题详情:
在 iOS 10.3.1 设备上,从 APP 内跳转至系统设置界面时:
1.若跳转时设置界面处于后台模式,则表现正常;
2.若跳转时设置界面处于关闭状态,则在跳转时,无法成功打开设置界面,且退回至手机屏幕画面。
解决方案:
1.使用 App-Prefs:root=Bluetooth,但是无法通过审核。
2.(网上搜到的方式)对第一种方案进行转码处理,绕开审核检测
具体如下:
let urlBytes: [UInt8] = [0x41, 0x70, 0x70, 0x2d, 0x50, 0x72, 0x65, 0x66, 0x73, 0x3a, 0x72, 0x6f, 0x6f, 0x74, 0x3d, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68]
let urlData: Data = Data.init(bytes: urlBytes)
let urlString = String.init(data: urlData, encoding: .utf8)!
let url: URL = URL.init(string: urlString)!
if UIApplication.shared.canOpenURL(url) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
// Fallback on earlier versions
UIApplication.shared.openURL(url)
}
}
目前项目还处于开发阶段,暂不确定是否可以通过审核。有结果了再更新。
补充:
上述解决方案里的第 2 种方案无法使用,审核时会被拒绝。
目前已放弃直接进入具体的蓝牙设置界面。
p.s. iOS 13.0 可以直接进入 APP 的系统设置界面。