0

我一直在寻找关于这个主题的日子。我看过一些帖子,但没有一个实现有效,或者,他们提到了不推荐使用的私有方法、选项或库。我发现 Apple docs 是有史以来最糟糕的事情,但即使在被称为他们的 docs 的那面崩溃的文本墙中,我也发现了一些关于基于进入 iBeacon 范围启动终止应用程序的参考。

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

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

4

1 回答 1

4

使用 iBeacon 和 iBeacon ,基于 iBeacon 检测让应用程序从非运行状态自动启动非常容易CoreLocation

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

  1. 该应用程序之前必须手动启动过一次。
  2. 应用程序必须在首次启动时向用户请求并获得“始终”的位置访问权限。
  3. 应用程序必须通过调用注册一个CLBeaconRegion,并设置. 由于您还想范围,您可以同时调用. 通常在您的CLLocationManagerlocationManager.startMonitoring(region: region)locationManager.delegatestartRanging(beacons: beacons, region: region)AppDelegate.
  4. 手机必须启用定位并打开蓝牙。

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

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

你不能做的是以编程方式将应用程序带到前台,因为 iOS 不允许这样做。在 iOS 上,用户必须通过手势将应用程序带到前台——这与信标无关,而是 OS 设计中长期存在的规则。这就是为什么许多应用程序在检测到信标后处于这种短暂的后台状态时会发送本地通知,以便为用户提供一种将应用程序带到前台的方法。

于 2017-07-12T16:56:30.120 回答