【问题标题】:Can iOS still launch an app in range of iBeacon in iOS 10?iOS 仍然可以在 iOS 10 中启动 iBeacon 范围内的应用程序吗?
【发布时间】:2017-07-12 16:17:17
【问题描述】:

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

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

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

【问题讨论】:

  • 在检查您的设备是否启用和允许、设置时处理错误等方面有很多工作要做。请发布您尝试过的内容。
  • @danh 我的代码现在已更改为匹配下面davidgyoung 的答案

标签: ios objective-c bluetooth ibeacon uibackgroundmode


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 这太棒了,你听起来正是我需要与之交谈的人。好的,所以我已经准备好您提到的所有内容,并且它正在启动 didEnter 和 didExit 方法,并且当它们达到这些状态时我会收到通知,因此我知道该应用程序正在运行。请记住,我知道您无法将应用程序重新启动到前台,我的问题是......我如何让应用程序重新启动到后台状态?从后台我可以启动我的蓝牙服务,这就是这里的真正目标。我需要这个 iBeacon 启动到后台,这样我才能与蓝牙配对
  • 我所说的“后台”是指应用在任务切换器中,而不仅仅是作为服务打开。
  • 上述内容将允许您在后台运行时间的 10 秒内启动蓝牙服务。此外,请注意,如果您从任务切换器中删除了在后台重新启动的应用程序,则它不会显示在任务切换器中,因为它最后在前台。仅仅因为你没有看到它并不意味着它没有被启动到后台。使用 XCode 的 Windows -> 设备 -> iPhone 面板查看连接设备的日志,并使用 NSLog 记录您在应用重新启动时可以看到的事件。
  • 非常感谢您的帮助,我会试一试,明天再报告
  • 我暂时把这个作为正确答案,但我希望你明天仍然能回答我的问题
猜你喜欢
  • 1970-01-01
  • 2014-04-09
  • 2012-11-15
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多