所以我们正在尝试将一个场景与iBeacons结合起来,我认为我们在背景中遇到了测距和监控之间的差异,现在我不确定我们想做什么是可能的。
我们想要将iBeacons部署到500家商店。信标的目的是通过通知和优惠券(有时)向客户致意。我们想要做的是使用单个UUID,主要是商店号码和次要商店类型(常规商店与小孩。小孩商店可以连接到常规商店)。理想情况下,一旦找到带有我们UUID的iBeacon,我们希望我们的应用程序从我们的网站上提取特定于主要号码(商店号码)的XML文件,显示通知欢迎消息(可能声明'我们有优惠券给你'取决于xml文件所说的内容),并将xml文件数据保存到应用程序,以便用户可以在打开应用程序时检索优惠券。这一切似乎都可能在前台应用程序,但我们似乎很难让它在后台工作。我所描述的是可能的,我应该考虑采用不同的方法来做到这一点吗?
由于
答案 0 :(得分:2)
是的,你可以这样做。诀窍是你需要同时组合两个测距和监控。需要进行监控才能将应用程序启动到后台。需要测量来获得您看到的信标的特定ID。
像这样设置:
CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"blah"];
region.notifyOnEntry = YES;
[self.locationManager startMonitoringForRegion:region];
[self.locationManager startRangingBeaconsInRegion:region];
一旦发生这种情况,您将在应用程序恢复休眠之前获得大约五秒的测距回调,并且此方法将每秒调用一次:
-(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创建了一个名为ProximityKit的库和Web服务,可以对您可以使用Web浏览器配置的特定于信标的键/值对进行预先缓存。这样,您就不必自己编写Web服务。