xcode 如何要求用户始终使用'精确位置'选项?

3phpmpom  于 2022-11-30  发布在  其他
关注(0)|答案(2)|浏览(196)

你好。我正在开发一个应用程序,可以组织用户在徒步旅行时的移动记录。所以我想鼓励用户一直使用Precise Location选项。
但是,我看到很多弹出窗口要求我在其他应用上设置位置权限,但我找不到一个弹出窗口或UX要求我打开已经关闭的Precise Location,这样要求是否违反Apple's policy
如果你不违反,我想知道其他应用程序是如何要求用户打开权限的。

  • 谢谢-谢谢
gc0ot86w

gc0ot86w1#

您可以使用CLLocationManagerCLAccuracyAuthorization属性来确定用户是否具有完全/降低的准确度。请注意,这在iOS 14 / macOS 11中可用。

switch locationManager.accuracyAuthorization {
    case .fullAccuracy:
        // TODO: handle fullAccuracy
    case .reducedAccuracy:
        // TODO: handle reducedAccuracy - request temporary full accuracy
    @unknown default:
        // TODO: handle default
}

如果结果是.reducedAccuracy,则可以使用requestTemporaryFullAccuracyAuthorization(withPurposeKey:completion:)请求对.fullAccuracy的临时访问。
不要忘记填写NSLocationTemporaryUsageDescriptionDictionary并在上述功能中使用适当的键。
它看起来像这样

5cg8jx4n

5cg8jx4n2#

您可以通过显示UIAlertController(其中包含您需要它的原因说明以及导航到应用设置的操作),要求用户启用精确定位。当他们按下操作时,您将以同样的方式导航到应用设置:

func navigateToSystemSettings() {
    if let settingsUrl = URL(string: UIApplication.openSettingsURLString)  {
        if UIApplication.shared.canOpenURL(settingsUrl) {
            UIApplication.shared.open(settingsUrl, completionHandler: { (success) in
                print("Settings opened: \(success)") // Prints true
            })
        }
    }
}

呈现简单UIAlert:

func presentAlert() {
    let alert = UIAlertController(title: "Precise location", message: "Please enable precise location by tapping location -> precise location", preferredStyle: .alert)
    let action = UIAlertAction(title: "Navigate to settings", style: .default) { _ in
        self.navigateToSystemSettings()
    }
    alert.addAction(action)
    DispatchQueue.main.async {
        self.present(alert, animated: true)
    }
}

此外,在显示UIAlertController之前,最好呈现一些屏幕截图,其中一些箭头指向设置中的"精确位置"开关,这样用户应该做什么就更清楚了。

    • P.S.**此navigateToSystemSettings()函数应打开您的应用程序设置。如果它只打开普通的"设置",请通过将应用程序上传到testflight来修复此问题,以便它出现在"设置"应用程序底部显示的其他应用程序中。

相关问题