2013-06-26 9 views
16

Pracujemy nad implementacją GCM i zauważyliśmy, że adres urządzenia przypisany do instalacji aplikacji może działać nawet po odinstalowaniu aplikacji.Czy stare tokeny GCM są wyświetlane nawet po odinstalowaniu?

Tak więc instalujemy aplikację, otrzymujemy token A, urządzenie subskrybuje konkretny typ alertu 1, token komunikatu A z dużym sukcesem. Następnie odinstalowujemy aplikację.

Nie dokonamy ponownej instalacji, otrzymamy tokena B, a urządzenie subskrybuje określony typ alarmu 2, z dużym sukcesem przekazujemy tokenowi B.

Teraz, ponieważ nie wysłaliśmy wiadomości do tokenu A między czasem odinstalowania aplikacji a jej ponownym zainstalowaniem, nadal możemy wysłać oba tekeny, a aplikacja otrzymuje oba.

Gdybyśmy próbowali wysłać tokena A, gdy aplikacja została odinstalowana, moglibyśmy to wyczyścić z odpowiedzi Google.

Czy jest jakiś sposób, aby wiedzieć, że token A jest już nieaktualny?

Odpowiedz

5

Zakładam, że przez "token" rzeczywiście odnosisz się do identyfikatora rejestracyjnego. Stare identyfikatory rejestracyjne mogą pozostać aktywne przez pewien czas. Jednak Google informuje, że musisz zaktualizować swój regid dla konkretnej kombinacji urządzenia/aplikacji za pomocą canonical ID w odpowiedzi na wysłaną wiadomość.

+0

dzięki @nickT, przechowywanie, które działało idealnie. "GCM udostępnia obiekt o nazwie" kanoniczne identyfikatory rejestracyjne ", które można łatwo odzyskać z tych sytuacji: Kanoniczny identyfikator rejestracji jest identyfikatorem ostatniej rejestracji wymaganej przez aplikację. Jest to identyfikator, który powinien być używany przez serwer podczas wysyłania wiadomości do użytkownika. urządzenie." –

+0

Wystarczy wspomnieć o czymś; Otrzymasz ten sam identyfikator rejestracji dla tego samego urządzenia po aktualizacji Google gcm server. – EvanBlack

10

Z oficjalnej dokumentacji:

How uninstalled client app unregistration works

Aplikacja klienta może być automatycznie wyrejestrowana po jego odinstalowane. Jednak proces ten nie następuje natychmiast. Co dzieje się w tym scenariuszu jest:

  1. Użytkownik końcowy odinstalowuje aplikację kliencką.
  2. Serwer aplikacji wysyła wiadomość do serwera połączeń GCM.
  3. Serwer połączeń GCM wysyła wiadomość do klienta GCM na urządzeniu.
  4. Klient GCM na urządzeniu odbiera komunikat i wykrywa, że ​​aplikacja klienta została odinstalowana; szczegóły detekcji zależą od platformy, na której działa aplikacja kliencka.
  5. Klient GCM na urządzeniu informuje serwer GCM o połączeniu , że aplikacja klienta została odinstalowana.
  6. Serwer połączeń GCM oznacza token rejestracji do usunięcia.
  7. Serwer aplikacji wysyła wiadomość do GCM.
  8. GCM zwraca komunikat o niezarejestrowanym błędzie do serwera aplikacji .
  9. Serwer aplikacji powinien usunąć token rejestracji.

Uwaga , że może to potrwać do token rejestracyjny być całkowicie usunięty z GCM.Dlatego możliwe jest, że wiadomości wysłane podczas kroku 7 powyżej otrzymają prawidłowy ID wiadomości w odpowiedzi, mimo że wiadomość nie zostanie dostarczona do aplikacji klienckiej. W końcu, token rejestracyjny zostanie usunięty, a serwer otrzyma niezarejestrowany błąd, , bez dalszych działań wymaganych od serwera aplikacji.

Można jednak najwyraźniej zdarzyć, że jeszcze dostać powiadomienie o starej rejestracji identyfikatora, jak stwierdzić, użytkownicy w innych pytań:

W tym problem, istnieje funkcja o nazwie „kanoniczny identyfikatory”:

Canonical IDs

Jeśli to błąd w aplikacji klienckiej powoduje wielokrotne rejestracje dla tego samego urządzenia , to może być ciężko aby uzgodnić stan i aplikację klienta, może pojawić się zduplikowana wiadomość.

Wdrażanie identyfikatorów kanonicznych może pomóc w łatwiejszym odzyskaniu sprawności po tych sytuacjach . Identyfikator rejestracji kanonicznej jest tokenem rejestracji ostatniej rejestracji żądanej przez aplikację kliencką. Jest to identyfikator , z którego serwer powinien korzystać podczas wysyłania wiadomości do urządzenia.

Jeśli spróbujesz wysłać wiadomość używając starego rejestracyjny żeton, GCM będzie proces wniosek jak zwykle, ale będzie zawierać identyfikator kanoniczny w pole registration_id odpowiedzi. Pamiętaj, aby zastąpić token rejestracji przechowywany na serwerze z tym kanonicznym ID, jako w końcu stary token rejestracyjny przestanie działać.

+0

Co ciekawe, mamy bardzo dużą rozbieżność między urządzeniami, które są uważane przez GCM za aktywne, ale dla których nie było żadnej aktywności użytkownika przez ponad rok. Ponadto liczba aktywnych urządzeń na pulpicie nawigacyjnym Google Play jest znacznie niższa niż liczba urządzeń, na które wysyłane są wiadomości GCM i nie zgłoszono żadnych awarii. – silentser

Powiązane problemy