通过[peripheralManager startAdvertising:]发出的iBeacon将触发输入,很快就会出现另一台设备上的退出区域

时间:2014-06-27 16:49:33

标签: ios ibeacon

我试图将AirBocate示例代码中的iBeacon广告代码抓到一个空应用中。它看起来像:

    NSDictionary *peripheralData = nil;

    region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:beaconUuid] major:beaconMajor minor:beaconMinor identifier:beaconIdentifier];
    peripheralData = [region peripheralDataWithMeasuredPower:nil];//[NSNumber numberWithInt:power]

    // The region's peripheral data contains the CoreBluetooth-specific data we need to advertise.
    if(peripheralData)
    {
        [peripheralManager startAdvertising:peripheralData];

        return YES;
    }

空应用程序能够发出iBeacon信号,该信号可以被另一台设备上的另一个应用程序成功监控。但问题出现在另一个app上,locationManager:didEnterRegion:delegate方法后跟locationManager:didExitRegion:非常快。

外围设备:iPad mini 2视网膜 中央设备:iPhone 5S

运行AirLocate应用程序以将一个设备单独配置为iBeacon发射器而另一个设备作为监视器也可以重现上述问题。

其他一些调查结果:

  1. 如果您按原样离开接收器应用程序,它将报告 didEnterRegion会在几分钟后自动完成,然后是 didExitRegion很快,仍然是同样的问题。
  2. 如果您通过按主页按钮将发射器应用程序移动到后台模式并输入 同样的应用程序再次,接收器将触发这两个中的另一轮 监控方法,还是一样的问题。
  3. 我的猜测是iBeacon广告的频率如此之小(比如说,几秒钟一次),接收者可能会认为该区域在再次收到包裹之前已退出。它也可能是iOS中的一个错误。

    有人知道吗?

2 个答案:

答案 0 :(得分:0)

请注意,您无法在后台将iOS传输为iBeacon。如果锁定屏幕出现,您很快就会在另一台设备上收到退出通知。

默认情况下,iOS设备以30 Hz的频率发送广告,但同样,应用必须位于前台。我用硬件BLE嗅探器测量了这一点。所以我怀疑传输频率是一个问题。

答案 1 :(得分:0)

我想用有趣的东西更新我自己的问题。

在本周发布的针对iBeacon稳定性修复的iOS 7.1.2升级后,情况有所改善:接收端将在我自己的应用测试中输入事件后一分钟报告退出事件(之前它在进入事件后很快发生)。如果我在两端使用Locate Beacon,我观察到同样的不稳定性。

我做的另一个测试是使用第三个iOS 7.1(未升级到7.1.2)手机作为接收器,它根本不会从外设掉线。按预期稳定。所以问题可能与接收器设备(又称中央)有关。

所以我的第一个iPhone接收器上的蓝牙模块似乎有问题。我希望它不是由它上面那么多的蓝牙调试引起的:)

如果我使用原装的iPad mini 2作为外围设备并将此iPhone 5s作为中央设备,则始终可以观察到此问题。但是,如果我使用第三部iPhone(iPhone 5,如果类型重要)作为外围设备,并且仍然以可疑的iPhone 5s为中心,那么它非常稳定。

因此,如果您遇到同样的奇怪问题,建议如下:

  1. 双方升级iOS
  2. 在接收设备上重启蓝牙 (aka。central)有时会解决问题,如果不是总是在你的 情况。