【发布时间】:2016-06-01 10:44:21
【问题描述】:
我创建了一个应用程序,即使应用程序在后台或屏幕被锁定,它也会跟踪用户的位置。我已经在装有 iOS 9.2 的 iPhone 5s 设备上对其进行了测试,一切正常。更新到 iOS 9.3.1 后,我注意到应用程序会在后台运行大约 10 分钟,然后应用程序会自动停止。我昨天将手机更新到 iOS 9.3.2,希望能解决这个问题。但是问题仍然存在。
我在 AppDelegate 类中有以下代码
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
private static var backgroundService : BackgroundService? = nil
var startServices : Bool = false
public static var bgTask = UIBackgroundTaskIdentifier()
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
print("didFinishLaunchingWithOptions")
AppDelegate.bgTask = beginBackgroundUpdateTask()
startBackgroundService()
return true
}
internal func startBackgroundService(){
if AppDelegate.backgroundService == nil{
AppDelegate.backgroundService = BackgroundService.getBackgroundService()
}
AppDelegate.backgroundService!.startService(self)
}
internal func stopBackgroundService(){
AppDelegate.backgroundService!.stopService()
}
func beginBackgroundUpdateTask() -> UIBackgroundTaskIdentifier {
return UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({})
}
func applicationDidEnterBackground(application: UIApplication) {
self.startBackgroundService()
print("applicationDidEnterBackground")
}
}
已为 iphone 上的应用启用后台应用刷新和定位服务。 Info.plist 中已启用后台模式并添加了其他所需权限。
问题不是由于任何代码更改,因为我在另一部装有 iOS 9.2 的手机上测试了代码,它运行良好。将第二部手机更新到 iOS 9.3.2 后,发生了同样的问题。 9.3 中是否有任何更改导致此问题?我浏览了变更日志和文档,但找不到任何有用的东西。有没有其他人遇到过类似的问题?是否需要进行任何更改以确保该应用与 iOS 9.3 兼容?
【问题讨论】:
-
我怀疑苹果已经收紧了后台处理。使用
backgroundTaskWithExpirationHandler不是在后台获取位置更新的正确方法。 -
@Paulw11 - 您能否建议在后台获取更新的正确方法是什么?我是 iOS 开发新手,backgroundTaskWithExpirationHandler 是我设法让它在后台工作的唯一方法。
-
您是否使用后台模式进行位置更新?
-
@Ahmed - 是的,位置更新的后台模式已启用。
-
您是否在后台模式下对其进行了多次测试?