iOS 仍然可以在 iOS 10 中启动 iBeacon 范围内的应用程序吗?
Can iOS still launch an app in range of iBeacon in iOS 10?
关于这个主题,我已经搜索了好几天了。我看过一些帖子,但 none 的实现有效,或者,他们提到了已弃用的方法、选项或私有库。我发现 Apple 文档是有史以来最糟糕的事情,但即使在被称为其文档的崩溃文本墙中,我也发现了一些关于根据输入 iBeacon 范围启动终止应用程序的参考。
我需要的是让应用程序完全关闭并终止,就好像用户已完成并完成它一样。然后我需要在 info.plist
中使用 UIBackgroundMode
的 BLE 服务来监听 didRangeBeacons
委托方法。它火了,所以我知道很多东西都在起作用。
正是在这一点上,到目前为止所有的实施都失败了。您究竟如何将应用程序从 iBeacon 范围内启动到后台状态?我开始认为您所能做的就是在范围内触发本地通知...
使用 CoreLocation
和 iBeacon,根据 iBeacon 检测让应用程序从非 运行 状态自动启动非常容易。
为了使其正常工作,必须满足一些先决条件:
- 应用程序之前必须手动启动过一次。
- 应用程序必须在首次启动时请求并获得用户的 "Always" 位置访问权限。
- 应用程序必须通过调用
locationManager.startMonitoring(region: region)
向 CLLocationManager
注册 CLBeaconRegion
,并设置 locationManager.delegate
。既然你也想要range,那么你可以同时调用startRanging(beacons: beacons, region: region)
。在 AppDelegate.
中通常最容易做到这一点
- phone 必须启用定位功能并打开蓝牙。
如果您正确执行了上述所有操作,那么 iOS CoreLocation 将记住您的应用程序已注册 CLBeaconRegion
并在检测到信标时自动启动您的应用程序。即使您重新启动 phone,或从任务切换器中终止您的应用程序,它也会执行此操作。在后台自动启动你的应用程序后,它会在你的委托上调用 didEnter(region: region)
回调,然后开始每秒调用一次 didRange(beacons: beacons, region: region)
回调,持续大约 10 秒,直到操作系统再次暂停你的应用
测试时有很多方法会出错,所以这行不通。但如果你做对了一切,这是非常可靠的。
您不能做的 是以编程方式将应用程序带到前台,因为iOS 不允许这样做。在 iOS 上,用户必须通过手势才能将应用程序带到前台——这与信标无关,而是 OS 设计中长期存在的规则。这就是为什么许多应用程序在检测到信标后处于这种短暂的后台状态时会发送本地通知,以便用户将应用程序带到前台。
关于这个主题,我已经搜索了好几天了。我看过一些帖子,但 none 的实现有效,或者,他们提到了已弃用的方法、选项或私有库。我发现 Apple 文档是有史以来最糟糕的事情,但即使在被称为其文档的崩溃文本墙中,我也发现了一些关于根据输入 iBeacon 范围启动终止应用程序的参考。
我需要的是让应用程序完全关闭并终止,就好像用户已完成并完成它一样。然后我需要在 info.plist
中使用 UIBackgroundMode
的 BLE 服务来监听 didRangeBeacons
委托方法。它火了,所以我知道很多东西都在起作用。
正是在这一点上,到目前为止所有的实施都失败了。您究竟如何将应用程序从 iBeacon 范围内启动到后台状态?我开始认为您所能做的就是在范围内触发本地通知...
使用 CoreLocation
和 iBeacon,根据 iBeacon 检测让应用程序从非 运行 状态自动启动非常容易。
为了使其正常工作,必须满足一些先决条件:
- 应用程序之前必须手动启动过一次。
- 应用程序必须在首次启动时请求并获得用户的 "Always" 位置访问权限。
- 应用程序必须通过调用
locationManager.startMonitoring(region: region)
向CLLocationManager
注册CLBeaconRegion
,并设置locationManager.delegate
。既然你也想要range,那么你可以同时调用startRanging(beacons: beacons, region: region)
。在AppDelegate.
中通常最容易做到这一点
- phone 必须启用定位功能并打开蓝牙。
如果您正确执行了上述所有操作,那么 iOS CoreLocation 将记住您的应用程序已注册 CLBeaconRegion
并在检测到信标时自动启动您的应用程序。即使您重新启动 phone,或从任务切换器中终止您的应用程序,它也会执行此操作。在后台自动启动你的应用程序后,它会在你的委托上调用 didEnter(region: region)
回调,然后开始每秒调用一次 didRange(beacons: beacons, region: region)
回调,持续大约 10 秒,直到操作系统再次暂停你的应用
测试时有很多方法会出错,所以这行不通。但如果你做对了一切,这是非常可靠的。
您不能做的 是以编程方式将应用程序带到前台,因为iOS 不允许这样做。在 iOS 上,用户必须通过手势才能将应用程序带到前台——这与信标无关,而是 OS 设计中长期存在的规则。这就是为什么许多应用程序在检测到信标后处于这种短暂的后台状态时会发送本地通知,以便用户将应用程序带到前台。