我正在尝试在应用关闭时进入某个区域(在近距离)时向用户发送本地通知。如果该应用程序在后台运行,我目前可以使用它,但如果关闭该应用程序,它就无法运行。我读过其他帖子说这是可能的,但没有一个解决方案有效,而且它们已经过时了。如果能在 Swift 3 中提供一些帮助,我将不胜感激。
这是我的代码(全部在 AppDelegate 中):
在 didFinishLaunchingWithOptions 中:
locationManager.delegate = self
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.allowsBackgroundLocationUpdates = true
locationManager.requestAlwaysAuthorization()
let uuid = UUID(uuidString: "someuuid")!
let beaconRegion = CLBeaconRegion(proximityUUID: uuid, identifier: "SomeBeacon")
beaconRegion.notifyEntryStateOnDisplay = true
beaconRegion.notifyOnEntry = true
beaconRegion.notifyOnExit = true
locationManager.startMonitoring(for: beaconRegion)
locationManager.startRangingBeacons(in: beaconRegion)
我还实现了 didRangeBeacons。
最佳答案
代码看起来正确,允许在应用程序关闭时进行检测。你不需要:
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.allowsBackgroundLocationUpdates = true
但他们不应该伤害任何东西。
您只提到应用关闭时出现问题,所以我认为前景检测工作正常。可以?如果不是,请先解决此问题。
通常很难正确测试应用关闭用例,导致测试设置问题导致失败。一些提示可能会有所帮助:
iOS 只有在认为自己不在区域时才会发送区域进入事件。通常在测试中它认为它在区域中,所以你没有得到一个事件。为确保您不在该区域,请关闭您的信标或离开范围应用程序在前台并等待直到您收到退出回调。只有这样,您才应该终止该应用程序以测试关闭检测。
如果重启手机,请务必在启动后等待 5 分钟,以确保 CoreLocation 已完全初始化。并确保您已遵守规则 1。
确保您没有在手机上安装一堆其他信标应用程序,占用所有蓝牙检测硬件加速插槽。如果这样做,后台检测最多可延迟 15 分钟。卸载所有信标应用,然后卸载并重新安装您的应用。
如果您遵循上述测试提示,您应该会在信标位于附近的几秒内看到检测回调。
关于ios - 应用程序关闭时的 iBeacon 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41892611/