繁体   English   中英

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

[英]Can iOS still launch an app in range of iBeacon in iOS 10?

我一直在寻找有关该主题的天。 我看过几篇文章,但所有实现都不起作用,或者,他们提到了不推荐使用的方法,选项或私有库。 我发现Apple文档是有史以来最糟糕的事情,但是即使在那被称为文档的文本混乱墙中,我也发现了一些参考,它们基于输入iBeacon的范围来启动终止的应用程序。

我需要做的是完全关闭并终止该应用程序,就像用户已完成并完成该操作一样。 然后,我需要在info.plist中将UIBackgroundMode用于BLE服务,以侦听didRangeBeacons委托方法。 它会触发,所以我知道很多工作。

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

借助CoreLocation和iBeacon, CoreLocation基于iBeacon检测的应用程序从未运行状态自动启动非常容易。

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

  1. 该应用程序必须已经手动启动过一次。
  2. 该应用必须在首次启动时向用户请求并获得“始终”位置访问权限。
  3. 应用必须通过调用locationManager.startMonitoring(region: region)CLLocationManager注册CLBeaconRegion ,并设置locationManager.delegate 由于您还想进行范围调整,因此可以同时调用startRanging(beacons: beacons, region: region) 通常最简单的方法是在AppDelegate.执行此操作AppDelegate.
  4. 手机必须启用了位置并打开了蓝牙。

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

有很多方法可以在测试时出错,所以这是行不通的。 但是,如果您做对了所有事情,这是相当可靠的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM