2012-07-21 13 views
43

Wiem, że rejestracje C2DM wygasają, a Ty powinieneś okresowo odświeżać identyfikator rejestracji. Czy tak jest w przypadku GCM? patrząc na poniższy kod w przewodniku GCM dla Androida (pokazanym poniżej), wydaje się, że robisz to tylko raz i nie musisz odświeżać, ale nie widzę tego wyraźnie nigdzie pisanego, więc chciałem tylko sprawdzić.Czy identyfikator rejestracji GCM wygasa?

final String regId = GCMRegistrar.getRegistrationId(this); 
if (regId.equals("")) { 
    GCMRegistrar.register(this, SENDER_ID); 
} else { 
    Log.v(TAG, "Already registered"); 
} 
+0

podobne: http://stackoverflow.com/questions/16838654/handling-registration-id-changes-in-google-cloud-messaging-on-android – trante

Odpowiedz

41

EDIT: Ta odpowiedź jest zdecydowanie nieaktualne, nie mam pojęcia, jaka jest obecna zachowanie jest


Znalazłem odpowiedź siebie. Nie musisz wyraźnie rejestrować się cały czas, just once according to the example in the docs.

Również przeciwieństwie do poprzednich wersji GCM i C2DM Google sam nie ma odświeżyć sama rejestracja teraz: skoro masz identyfikator rejestracyjny od pierwszej rejestracji jesteś dobry, aby przejść, wyjątkiem w jednym przypadku : robisz wciąż muszą zarejestrować się ponownie, gdy aktualizacje użytkownika do nowej wersji (w tym przypadku jest również obsługiwane na przykład w linku powyżej):

gdy aplikacja jest aktualizowana, należy unieważnić swoje istniejące ID rejestracji, ponieważ nie gwarantuje się pracy z nową wersją. Ponieważ nie jest wywoływana żadna metoda cyklu życia, gdy aplikacja jest zaktualizowana , najlepszym sposobem na uzyskanie tego sprawdzenia jest przechowywanie aktualnej wersji aplikacji po zapisaniu identyfikatora rejestracji.

+0

Ale jak wygenerować identyfikator rejestracji mannn ????? –

+1

@AndroidKiller: przeczytaj za pośrednictwem dokumentów: http://developer.android.com/google/gcm/index.html –

+0

hej @MohamedHafez.Twój pierwszy akapit pochodzi z dokumentacji C2DM, a nie z GCM, co oznacza (moim zdaniem), że nie dotyczy GCM. To sprawia, że ​​twoja odpowiedź jest trochę myląca. Thx – AndroidGecko

10

Wydaje mi się, że ostatecznie odświeża się, tak. Z oficjalnych dokumentów:

Istniejący identyfikator rejestracji może przestać być ważne w wielu scenariuszach, w tym: Jeśli aplikacja ręcznie wyrejestrowanie wydając intencję com.google.android.c2dm.intent.UNREGISTER. Jeśli aplikacja zostanie automatycznie wyrejestrowana, co może się zdarzyć (ale nie jest gwarantowane), jeśli użytkownik odinstaluje aplikację. Jeśli wygaśnie identyfikator rejestracji. Google może podjąć decyzję o odświeżeniu identyfikatorów rejestracji. We wszystkich tych przypadkach należy usunąć ten identyfikator rejestracji z serwera zewnętrznego i przestać używać go do wysyłania wiadomości. Zdarza się, gdy kod błędu jest niezarejestrowany.

Może się to zdarzyć w wezwaniu do GCM z serwera 3rd-partyjnej, która zwraca odpowiedzi json z błędem Niezarejestrowany Device.

Gdy to nastąpi, od Ciebie zależy odświeżenie odpowiednich identyfikatorów.

http://developer.android.com/guide/google/gcm/gcm.html

+0

Więc to zapisać po prostu sprawdzić, czy token zmienione w mojej "RegistationIntentService"? Mogę przechowywać token we wspólnych preferencjach i sprawdzać za każdym razem, czy się zmienił. – Zapnologica

Powiązane problemy