3

我正在使用我的 iOS 应用程序中的 Nearby Messages API 接收由 Eddystone 信标触发的消息,并且运行良好。我正在为应用程序的后端使用 Firebase 的实时数据库。由于 Firebase 的缓存非常棒,我可以让应用在离线状态下运行得非常好。

我的问题是是否有人知道/使用一种技术(可能与 Firebase 结合使用)来提前缓存与信标关联的附件(例如将所有 Eddystone 附件缓存在特定命名空间中),以便在应用程序没有连接时有效地获取信标附件到互联网。

任何关于探索领域的建议或建议都会很棒。

4

1 回答 1

5

一种选择是使用 Proximity Beacon API 的beaconinfo:getforobserved方法来主动获取应用程序知道的所有信标的附件。您可以在此处查看相关文档

该应用程序可以定期(例如在启动时或在它具有互联网连接的其他时间)进行此调用,以获取每个已知信标的所有附件信息。对方法调用的响应将返回包含附件数据的BeaconInfo数组。然后,应用程序可以将其存储在 Firebase 或其他由 Eddystone 命名空间和实例 ID 键入的本地数据存储中。

显然,应用程序需要预先知道所有信标标识符才能正常工作。可以使用 API_KEY 从 iOS 应用程序进行 Web 服务调用。

一旦你在缓存中获得了这些信息,你仍然需要一种方法来触发应用程序根据信标检测向用户发送消息。据我所知,当附件信息不可用时,iOS 附近的 API 不会离线执行此操作。您仍然可以使用我在此处放置的 iOS Eddystone 信标扫描工具包来完成这项工作。 有了这个,你可以做这样的事情:

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
    }
  }
于 2016-07-26T13:33:29.757 回答