2

因此,我们正在尝试使用 iBeacons 组合一个场景,我认为我们陷入了测距和后台监控之间的差异,现在我不确定我们想要做什么是可能的。

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

谢谢

4

1 回答 1

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                   
   }
}

两个注意事项:

  1. 在后台监控 iBeacon 区域可能有点棘手,而且获得回调所需的时间可能比您想象的要长。请参阅此详细讨论。

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

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

于 2013-12-08T21:57:50.337 回答