iOS 仍然可以在 iOS 10 中启动 iBeacon 范围内的应用程序吗?



我已经在这个主题上搜索了好几天了。我看过一些帖子,但没有一个实现有效,或者,他们提到了不推荐使用的方法、选项或私有库。我发现 Apple 文档是有史以来最糟糕的事情,但即使在被称为他们的文档的崩溃文本墙中,我也发现了一些基于输入 iBeacon 范围启动终止应用程序的参考资料.

我需要的是让应用程序完全关闭并终止,就好像用户已完成并完成它一样。然后,我需要在info.plist中使用 BLE 服务的UIBackgroundMode来侦听didRangeBeacons委托方法。它开火了,所以我知道很多事情都在起作用。

正是在这一点上,到目前为止的所有实现都失败了。您究竟如何将应用程序从iBeacon的范围内启动到后台状态?我开始认为您所能做的就是在范围内触发本地通知......

使用CoreLocation和 iBeacon 让应用程序从未运行状态自动启动非常容易.

为了使它正常工作,必须满足一些先决条件:

  1. 应用之前必须手动启动过一次。
  2. 应用必须在首次启动时请求并获取用户的"始终"位置访问权限。
  3. 应用必须通过调用locationManager.startMonitoring(region: region)CLLocationManager注册CLBeaconRegion,并设置locationManager.delegate。 由于您还想范围,因此可以同时调用startRanging(beacons: beacons, region: region)。 通常最简单的
  4. 方法是在您的AppDelegate.
  5. 手机必须启用位置信息并打开蓝牙。

如果您正确执行上述所有操作,则 iOS CoreLocation 将记住您的应用程序已注册CLBeaconRegion并在信标检测时自动启动您的应用程序。 即使您重新启动手机,或者从任务切换器中终止您的应用程序,它也会执行此操作。 在后台自动启动应用后,它将调用委托上的didEnter(region: region)回调,然后开始每秒调用一次didRange(beacons: beacons, region: region)回调,持续约 10 秒,直到操作系统再次挂起您的应用。

测试时有很多方法会犯错误,所以这是行不通的。但如果你做的一切都正确,这是非常可靠的。

您不能做的是以编程方式将应用程序置于前台,因为 iOS 不允许这样做。 在iOS上,用户必须手势将应用程序带到前台 - 这与信标无关,而是操作系统设计中的长期规则。 这就是为什么许多应用在检测到信标后处于此简短后台状态时发送本地通知的原因,以便为用户提供将应用置于前台的方法。

最新更新