iOS设备上仍收到附近发布的出版物

问题描述:

我正在编写使用Google Nearby API的iOS应用程序。我注意到,有时当一个设备开始订阅并从另一个附近设备(这两个iOS设备)获取出版物时,订阅设备可能从其他设备获得发布的出版物(来自其他设备的先前运行,显然已经发布由我的应用程序)。我在发布时发送UUID,并且我肯定会看到用户收到的旧UUID(即先前运行的UUID)。
我遇到了https://stackoverflow.com/a/32540735,其中解释“会话”分为10分钟桶可以解释这个问题,但答案似乎只与Android相关。 我注意到iOS附近仍处于测试阶段,这可能是一个错误吗?iOS设备上仍收到附近发布的出版物

任何想法?谢谢。

以下是可能导致您看到的问题的情景: - 发布活动时发布应用程序被终止。例如,如果你滑动杀死它,或者如果你从调试器中杀死它。 - 如果网络连接丢失或不足以阻止对Nearby服务器的呼叫。

当发布对象被解除分配时,它会调用Nearby服务器来撤销发布的消息,并且订阅者不应再收到发布的消息。在上面的情况下,不对服务器进行调用,所以发布会持续一段时间。在iOS上,这个“一段时间”的金额是5分钟。

大约5分钟后问题就消失了吗?

+0

几分钟后,问题就消失了。因此,将出版物设置为零是不够的,您必须让它有足够的时间通知服务器,如果用户杀死应用程序或将其置于后台,这是不可能的,对吗? – Urilicious

+0

它应该能够在应用程序被推入后台时成功调用服务器(我们使用[UIApplication -beginBackgroundTaskWithExpirationHandler:](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/ #// apple_ref/occ/instm/UIApplication/beginBackgroundTaskWithExpirationHandler :)以虚拟地确保它运行足够长的时间)。 但是,如果它在出版物处于活动状态时死亡,那么我们无能为力。 您能否确定没有对发布对象的另一个引用? –

+0

我相信如此。在我的AppDelegate.applicationDidEnterBackground中,我将所有发布者,订阅者甚至是GNEMessageManager都设置为零,所以在后台将不会有任何GNS活动(这是为了遵循视频中提供的附近提示[here](https: //www.youtube.com/watch?v=hultDpBS22s),它表示在Android onPause上取消发布和取消订阅)。我的调试还显示当时我的发布者为零。 – Urilicious