因此,我们正在尝试使用 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
}
}
两个注意事项:
在后台监控 iBeacon 区域可能有点棘手,并且获取回调所需的时间可能比您想象的要长。看这个detailed discussion.
从应用程序被唤醒到重新进入休眠状态,您只有五秒钟的时间,因此您的网站最好快速响应。一个跨网络丢失的更安全的想法是预先获取 XML 并将其缓存在您的应用程序中,这样即使出现网络丢失,它也可以正常运行。
我的公司 Radius Networks 提供了一个库和 Web 服务,名为 ProximityKit它会预先缓存特定于信标的键/值对,您可以使用网络浏览器进行配置。这样,您就不必自己编写 Web 服务。
关于iBeacon 百货商店场景 - 测距与监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459542/