我在iOS应用中使用Nearby Messages API接收Eddystone信标触发的消息,效果很好。我在应用程序的后端使用Firebase的实时数据库。由于Firebase的缓存非常棒,我能够让应用程序在离线状态下正常运行。
我的问题是,是否有人知道/使用某种技术(可能与Firebase结合)提前缓存与信标关联的附件(例如,缓存特定命名空间中的所有Eddystone附件),以便我可以在应用时有效地获取信标附件与互联网无关。
任何有关探索领域的建议或建议都会很棒。
答案 0 :(得分:4)
一种选择是使用Proximity Beacon API的beaconinfo:getforobserved
方法来主动获取您的应用知道的所有信标的附件。您可以看到here.
应用程序可以定期(例如,在启动时或在其具有互联网连接的其他时间)进行此呼叫以获取每个已知信标的所有附件信息。对方法调用的响应将返回具有附件数据的BeaconInfo数组。然后,应用程序可以将其存储在Firebase或由Eddystone命名空间和实例ID键入的其他一些本地数据存储中。
显然,应用程序需要预先知道所有信标标识符才能使用。可以使用API_KEY从iOS应用程序进行Web服务调用。
在缓存中显示此信息后,仍然需要一种方法来触发应用程序根据信标检测向用户发送消息。据我所知,当附件信息不可用时,iOS附近的API不会脱机。您仍然可以使用iOS Eddystone信标扫描工具包来完成这项工作,就像我放在一起here.这样,您可以这样做:
self.beaconScanner = [RNLBeaconScanner sharedBeaconScanner];
[self.beaconScanner startScanning];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRangeBeacons:) name:@"didRangeBeacons" object:nil];
...
- (void) didRangeBeacons: (NSNotification *) notification {
NSArray *beacons = notification.userInfo[@"beacons"];
for (RNLBeacon *beacon in beacons) {
NSString *eddystoneNamespace = beacon.id1;
NSString *eddystoneInstance = beacon.id2;
// TODO: look up cached attachments for this beacon in data store
}
}