2016-05-31 15 views
1

Ich schreibe gerade eine iOS-App, die Google Nearby API verwendet. Mir ist aufgefallen, dass manchmal, wenn ein Gerät ein Abonnement startet und Publikationen von einem anderen Gerät in der Nähe (beide iOS-Geräte) annimmt, das abonnierte Gerät Veröffentlichungen von dem anderen Gerät erhält (von früheren Läufen des anderen Geräts, die offensichtlich veröffentlicht wurden) von meiner App). Ich sende UUIDs bei der Veröffentlichung und ich sehe definitiv alte UUIDs (d. H. Frühere Läufe), die der Abonnent erhalten hat.
Ich stieß auf https://stackoverflow.com/a/32540735, die erklärt, dass "Sitzungen" in 10 Minuten Eimer unterteilt sind, die dieses Problem erklären könnten, jedoch scheint die Antwort nur mit Android verwandt zu sein. Mir ist aufgefallen, dass das iOS in der Nähe noch in der Beta ist, könnte das ein Bug sein?In der Nähe veröffentlichte Veröffentlichungen, die noch auf iOS-Geräten empfangen wurden

Irgendwelche Ideen? Vielen Dank.

Antwort

0

Hier sind die Szenarien, die das Problem verursachen können, das Sie sehen: - Wenn die Veröffentlichungs App getötet wird, während die Publikation lebt. ZB wenn Sie wischen, um es zu töten, oder wenn Sie es vom Debugger töten. - Wenn die Netzwerkverbindung verloren geht oder nicht mehr ausreicht, um einen Anruf auf dem Server in der Nähe zu verhindern.

Wenn das Publikationsobjekt freigegeben wird, ruft es den Nearby-Server auf, um die veröffentlichte Nachricht zu widerrufen, und Abonnenten sollten die veröffentlichten Nachrichten nicht mehr empfangen. In den obigen Szenarien wird der Aufruf an den Server nicht vorgenommen, so dass die Veröffentlichung für eine Weile beibehalten wird. Bei iOS beträgt diese "für eine Weile" 5 Minuten.

Geht das Problem nach etwa 5 Minuten weg?

+0

Das Problem verschwindet nach ein paar Minuten. Es reicht also nicht aus, die Veröffentlichung auf null zu setzen, sondern es muss genug Zeit für die Benachrichtigung des Servers bleiben, was nicht möglich ist, wenn der Benutzer die App tötet oder in den Hintergrund stellt, richtig? – Urilicious

+0

Es sollte in der Lage sein, den Server erfolgreich zu starten, wenn die App in den Hintergrund geschoben wird (wir verwenden [UIApplication -beginBackgroundTaskWithExpirationHandler:] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/ # // apple_ref/occ/instm/UIApplication/beginBackgroundTaskWithExpirationHandler :) um sicherzustellen, dass es lange genug läuft). Aber wenn es getötet wird, während die Veröffentlichung aktiv ist, können wir nichts tun. Können Sie sicherstellen, dass es keinen weiteren Verweis auf das Publikationsobjekt gibt? –

+0

Ich glaube schon. In meinem AppDelegate.applicationDidEnterBackground setze ich alle Publisher, Subscriber und sogar den GNEMessageManager auf Null, damit es keine GNS-Aktivität im Hintergrund gibt (dies geschieht, um den Tipps zu folgen, die im Video [hier] angegeben sind (https: //www.youtube.com/watch?v=hultDpBS22s), die auf einem Android onPause die Veröffentlichung aufheben oder abmelden. Mein Debugging zeigt auch, dass mein Publisher zu diesem Zeitpunkt null ist. – Urilicious