2016-05-31 77 views
1

我正在編寫使用Google Nearby API的iOS應用程序。我注意到,有時當一個設備開始訂閱並從另一個附近設備(這兩個iOS設備)獲取出版物時,訂閱設備可能從其他設備獲得發佈的出版物(來自其他設備的先前運行,顯然已經發布由我的應用程序)。我在發佈時發送UUID,並且我肯定會看到用戶收到的舊UUID(即先前運行的UUID)。
我遇到了https://stackoverflow.com/a/32540735,其中解釋「會話」分爲10分鐘桶可以解釋這個問題,但答案似乎只與Android相關。 我注意到iOS附近仍處於測試階段,這可能是一個錯誤嗎?iOS設備上仍收到附近發佈的出版物

任何想法?謝謝。

回答

0

以下是可能導致您看到的問題的情景: - 發佈活動時發佈應用程序被終止。例如,如果你滑動殺死它,或者如果你從調試器中殺死它。 - 如果網絡連接丟失或不足以阻止對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

相關問題