首页 > 解决方案 > 是否有非公共 URL 方案 (App-Prefs:root=LOCATION_SERVICES) 的替代方法来打开 iOS 上的系统设置?

问题描述

截至 2018 年 7 月,Apple 似乎不再接受App-Prefs:rootURL 方案的使用。请在标记为重复之前阅读以下内容,因为许多答案已过时或不合适。

问题描述我目前显示一个警报,以方便用户在电话级别激活位置。这是一个强烈的用户体验问题。也就是设置->隐私->定位服务

不幸的是,我的应用程序已被拒绝,因为我使用了非公共 API URL 方案 App-Prefs:root=LOCATION_SERVICES

我知道我不能使用这个非公共方案,但有什么替代方案?

事实上,当我停用位置并打开苹果“地图”应用程序时,它会打开非法计划所针对的位置设置。(谷歌地图也是如此)如果苹果或谷歌工程师仍然设法打开手机位置设置,那么这意味着有一种支持的方法可以这样做。

其他设法在电话级别直接访问位置服务的应用程序:

过时或不适当的答案表明:

  1. using app-settings:root // 它会打开我自己的应用设置
  2. using UIApplicationOpenSettingsURLString // 同样 1.
  3. using App-Prefs:root // prefs:root // 和我一样的问题
  4. 使用 // Too bad for user experience 删除代码的和平

对于 1. 和 2. 请查看显示当前答案不合适的屏幕截图:

我的应用设置


请在下面找到二进制被拒绝的消息:

您的应用使用“prefs:root=”非公共 URL 方案,这是一个私有实体。App Store 不允许使用非公共 API,因为如果这些 API 发生变化,可能会导致糟糕的用户体验。

在未来提交此应用程序时继续使用或隐藏非公开 API 可能会导致您的 Apple Developer 帐户被终止,以及从 App Store 中删除所有相关应用程序。

我今天还向 Apple Developer Technical Support 提出了请求。


重现步骤

在审查二进制文件时,苹果现在会拒绝下面的代码和平。

func showAlertGeo() {
    let alertController = UIAlertController (title: "Location not active", message: "To use all the feature of this app, please activate location on your phone.", preferredStyle: .alert)
    let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil)

    alertController.addAction(cancelAction)

    let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in

        if UIApplication.shared.canOpenURL(URL(string:"App-Prefs:root=LOCATION_SERVICES")!) {
            if #available(iOS 10.0, *) {
                UIApplication.shared.open(URL(string:"App-Prefs:root=LOCATION_SERVICES")!, completionHandler: nil)

            } else {
            // Fallback on earlier versions
                UIApplication.shared.openURL(URL(string:"App-Prefs:root=LOCATION_SERVICES")!)
            }
        }
    }
    alertController.addAction(settingsAction)
    present(alertController, animated: true, completion: nil)
}

标签: iosswiftgeolocationuser-experienceurl-scheme

解决方案


推荐阅读