Moja aplikacja używa programu gcm. Za każdym razem, gdy użytkownik się loguje, nowy token gcm jest rejestrowany i wysyłany na mój zewnętrzny serwer. Za każdym razem, gdy użytkownik się wyloguje, token gcm zostanie wyrejestrowany. To woki bez żadnych problemów.Unieważnij wszystkie tokeny gcm
Problem polega na tym, że tester może odinstalować aplikację bez konieczności wylogowywania, a następnie zainstalować ją ponownie i zalogować się na inne konto. Następnie otrzyma dwa gcms z dwóch różnych kont. Oznacza to, że otrzyma prywatne gcms dla konta, na którym obecnie nie jest zalogowany. Może się to zdarzyć nawet w przypadku użytkowników na żywo.
Dokumentacja GCM stwierdza, że tokeny gcm mogą wygasać czasami, jeśli aplikacja zostanie odinstalowana. W praktyce nigdy tak się nie dzieje.
http://developer.android.com/google/gcm/gcm.html
dokumentacja GCM stwierdza również, że można wyrejestrować tokeny GCM wykonując
Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
startService(unregIntent);
Ale ta metoda nie wydaje się działać, jeśli spróbujesz go po ponownej instalacji. Otrzymuję oddzwanianie, które mówi mi, że token jest niezarejestrowany, ale token gcm nadal działa poprawnie.
Moje pytanie brzmi: czy możesz zagwarantować, że nie ma prawidłowych tokenów gcm dla swojej aplikacji? Naprawdę chciałbym wyrejestrować wszystkie istniejące tokeny podczas pierwszego uruchomienia aplikacji lub przynajmniej zresetować je z ustawień telefonu.
Hej, Alexey, jakie rozwiązanie wybrałeś na –
Zrobiłem to, co zasugerował Mohamed Hafez. Mam tabelę z identyfikatorami użytkowników i tokenami gcm. Oba pola są unikalne. Po otrzymaniu istniejącego identyfikatora użytkownika z nowym tokenem gcm aktualizuję token gcm. Kiedy otrzymuję istniejący token gcm z nowym identyfikatorem użytkownika, aktualizuję identyfikator użytkownika. To wydaje się obejmować wszystkie możliwe przypadki narożne. – Alexey
Co się stanie, jeśli użytkownik jest zalogowany na dwóch urządzeniach. Obawiam się, że te dwa urządzenia nie otrzymają wiadomości GMC z tym rozwiązaniem. A może czegoś brakuje? –