2016-05-31 10 views
1

Google Nearby APIを使用したiOSアプリを作成中です。あるデバイスがサブスクリプションを開始し、近くの別のデバイス(両方のiOSデバイス)からパブリケーションをピックアップすると、サブスクライブしているデバイスが他のデバイスから解放されたパブリケーションを取得する可能性があることに気付きました(明らかにリリースされた私のアプリで)。公開するときにUUIDを送信しています。サブスクライバが受信した古い(つまり前の実行の)UUIDが確実に見えます。
https://stackoverflow.com/a/32540735には、「セッション」が10分のバケットに分割されていると説明されていますが、この問題はAndroidにのみ関連するようです。 iOS周辺がベータ版であることがわかりました。これはバグでしょうか?iOS端末でまだ受信している公開済みの出版物

アイデア?ありがとう。

答えて

0

表示されている問題を引き起こす可能性のあるシナリオを次に示します。 - パブリケーションがアクティブな状態でパブリッシュアプ​​リケーションが終了した場合。たとえば、それを殺すためにスワイプしたり、デバッガから殺すとします。 - ネットワーク接続が失われているか、または近隣のサーバーへの呼び出しを防止するのに十分なほど悪い場合

公開オブジェクトの割り当てを解除すると、公開されているメッセージを取り消すために[近くのサーバー]が呼び出され、ユーザーは公開されたメッセージを受信しなくなります。上記のシナリオでは、サーバーへの呼び出しは行われないため、出版物はしばらく続きます。 iOSでは、この「しばらくの間」5分です。

約5分後に問題は解決しますか?

+0

問題は数分後に消えます。したがって、パブリケーションをnilに設定するだけでは十分ではありません。サーバーに通知するのに十分な時間を許す必要があります。ユーザーがアプリケーションを強制終了したり、バックグラウンドに置いた場合は不可能です。 – 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をnilに設定しているので、バックグラウンドにGNSアクティビティはありません(これはビデオ[ここ](https: //www.youtube.com/watch?v=hultDpBS22s)、Android onPauseでの公開を解除し、登録を解除すると言っています)。私のデバッグでは、当時の私の出版社はゼロになっています。 – Urilicious

関連する問題