iBeacon 百货商店场景 - 测距与监控

标签 ibeacon clregion

因此,我们正在尝试使用 iBeacons 构建一个场景,我认为我们陷入了后台测距和监控之间的差异,现在我不确定我们想要做的事情是否可行。

我们有 500 家商店想要部署 iBeacons。信标的目的是向客户发出通知和优惠券(有时)。我们想要做的是使用单个 UUID,其中主要是商店编号,次要是商店类型(常规商店与 child 商店。 child 商店可以连接到常规商店)。理想情况下,一旦找到具有我们 UUID 的 iBeacon,我们希望我们的应用程序从我们的网站中提取特定于主要号码(商店号码)的 XML 文件,显示通知欢迎消息(可能会说明“我们为您提供优惠券”)取决于 xml 文件的内容),并将 xml 文件数据保存到应用程序中,以便用户在打开应用程序时可以检索优惠券。对于前台应用程序来说,这一切似乎都是可能的,但我们似乎很难让它在后台工作。我所描述的可能吗?我是否应该考虑采用不同的方法来做到这一点?

谢谢

最佳答案

是的,你可以做到这一点。诀窍在于您需要同时结合测距和监控。需要进行监控才能将您的应用程序启动到后台。需要进行测距才能获取您看到的信标的具体 ID。

设置如下:

CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"blah"];
region.notifyOnEntry = YES;
[self.locationManager startMonitoringForRegion:region]; 
[self.locationManager startRangingBeaconsInRegion:region]; 

一旦发生这种情况,您将在应用程序返回 sleep 状态之前收到大约五秒钟的测距回调,并且该方法将每秒调用一次:

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
    if (!_firstOneSeen) { 
      _firstOneSeen = true;
      // Do something with beacons array here.  read out the major/minor and get the 
      // notification message from your XML web service                   
   }
}

两个注意事项:

  1. 在后台监控 iBeacon 区域可能有点棘手,并且获取回调所需的时间可能比您想象的要长。看这个detailed discussion.

  2. 从应用程序被唤醒到重新进入休眠状态,您只有五秒钟的时间,因此您的网站最好快速响应。一个跨网络丢失的更安全的想法是预先获取 XML 并将其缓存在您的应用程序中,这样即使出现网络丢失,它也可以正常运行。

我的公司 Radius Networks 提供了一个库和 Web 服务,名为 ProximityKit它会预先缓存特定于信标的键/值对,您可以使用网络浏览器进行配置。这样,您就不必自己编写 Web 服务。

关于iBeacon 百货商店场景 - 测距与监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459542/

相关文章:

ios - CLLocationManager startMonitoringForRegion 在 ios 8.4 上崩溃

ios - [LocationManager didEnterRegion] 可以获取 Beacon 的 Major & Minor 吗?

iOS + nRF51822 = iBeacon?

ios - didEnterRegion 仅在设备唤醒时触发

ios - 哪些 iOS 设备支持区域监控?

objective-c - iBeacon 发射器的 major 和 minor 的最大值是多少?

ios - iBeacon Bluetooth didEnterRegion 和 didExitRegion 方法永远不会触发

swift - LocationManager didEnterRegion 未调用(再次)

ios - 以更大的半径调用 didEnterRegion (iOS)

ios - CLCircularRegion 和唤醒应用