【问题标题】:Background Location Updates are stopping with background task issue identified in debugger后台位置更新因调试器中发现的后台任务问题而停止
【发布时间】:2020-01-29 16:21:06
【问题描述】:

我从 iOS 9 开始一直在使用后台位置更新,没有任何问题,而这个问题现在刚刚出现在 iOS 13 中。当应用程序进入后台时,调试器控制台会识别出这个问题:“无法结束 BackgroundTask:没有背景任务存在标识符为 3 (0x3),或者它可能已经结束。中断 UIApplicationEndBackgroundTaskError() 以进行调试。"

以下是在后台更新位置的样板代码:

一、AppDelegate中的代码:

if CLLocationManager.authorizationStatus() == .notDetermined {
   locationManager.requestAlwaysAuthorization()
   locationManager.allowsBackgroundLocationUpdates = true
}

info.plist:

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>"MY APP" is optimized to run in the background as well as when your using it directly.  For best results, choose ALWAYS.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>"MY APP" is optimized to run in the background.  Please choose ALLOW.</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Please choose ALLOW WHILE USING APP.  "MY APP" needs to use your location to get its altitude data.</string>
    <key>UIBackgroundModes</key>
    <array>
        <string>location</string>

据我所知,没有什么应该导致这个问题。为什么它才刚刚开始是没有意义的。

【问题讨论】:

  • 尽管有一个在后台不执行任何操作的应用程序,但我还是收到了这条消息。 AFAICT,这是某种 iOS 13 问题。不过,它似乎并没有造成任何问题(除了烦人之外),也没有阻止应用通过审核。
  • 我想更大的问题是位置更新正在后台停止,我必须调试的唯一信息是控制台消息。

标签: ios swift xcode


【解决方案1】:

Apple 改进了请求用户位置权限的方式,以使其在 iOS 13 中更加用户友好。

您的代码没有任何问题,您不应更改任何内容(因为您已经在使用 requestAlwaysAuthorization()allowsBackgroundLocationUpdates。)

基本上正在发生的事情是:在 iOS 12 之前,用户将被要求获得位置许可,并且可以选择始终允许、允许一次和根本不允许。 在 iOS 13 中,选项为使用时允许、允许一次和不允许。

然后,iOS 本身会在判断有必要时(也就是当您的应用进入后台并尝试执行一些需要位置信息的操作时)请求“始终”权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 2012-06-09
    • 2019-02-03
    • 2017-03-26
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2015-11-26
    相关资源
    最近更新 更多