【发布时间】:2017-01-30 03:30:37
【问题描述】:
首先:我有一台 iPad Air 2 和一台 iPhone 7。为了进一步阅读,我们估计该应用程序在 iPad 上处于活动状态并打开,在 iPhone 上处于后台模式。该应用程序完全相同,即使具有相同的蓝牙服务 UUID 和相同的 DataLocalNameKey。
我想编写一个可以在后台宣传蓝牙服务并能够发现该服务的应用程序(在后台也是最佳的)。 As I already read 我不能使用苹果的信标技术,因为它只能通过后台附近的信标进行扫描/通知(我对此进行了测试,工作正常)但不能做广告。所以我开始使用上面提到的 SO 答案中描述的 CoreBluetooth,因为它可以在后台做广告。
我的应用在 iPhone 上调用 CBCentralManagerDelegate 中的didDiscoverPeripheral 方法(后台应用),因此它检测到了 iPad。 iPhone 上 CBPeripheralManager 的isAdvertising 属性是true。但是didDiscoverPeripheral 不会在 iPad 上调用。我有点困惑。一种选择是我的 iPad 由于某些原因无法再检测到 iPhone,或者我的 iPhone 在撒谎并且不是广告。
所以我认为我只是有点笨,并在谷歌上搜索“CoreBluetooth 调试应用程序”。我找到了Vicinity 和AltBeacon。对于这两个应用程序,行为是相同的!如果您背景(按主页/睡眠按钮)广告应用程序,浏览应用程序将无法再发现它。如果您打开后台应用程序,它将立即发现它。两个应用程序都提到它们可以在后台广播。
我做错了什么吗?这种行为是预期的吗?我误解了框架吗?你能确认一下这种行为吗?
要确认这一点,最快的方法是在两台设备上安装Vicinity(您必须将NSBluetoothPeripheralUsageDescription 键添加到Info.plist)设置一台设备进行广播并按下主页按钮。
【问题讨论】:
标签: ios bluetooth ibeacon core-bluetooth ios10