Migracja aplikacji z GCM do FCM.
Gdy nowy użytkownik instaluje moją aplikację, onTokenRefresh()
jest automatycznie wywoływana. Problem polega na tym, że użytkownik nie jest jeszcze zalogowany (brak identyfikatora użytkownika).
Jak mogę wywołać onTokenRefresh()
po zalogowaniu się użytkownika?
android
firebase-cloud-messaging
TareK Khoury
źródło
źródło
Odpowiedzi:
Plik
onTokenRefresh()
Metoda zostanie wywołana, kiedy nowy znak jest generowany. Po zainstalowaniu aplikacji zostanie ona natychmiast wygenerowana (tak jak znalazłeś). Zostanie również wywołany, gdy token się zmieni.Według
FirebaseCloudMessaging
przewodnika:Oznacza to, że rejestracja tokena dotyczy jednej aplikacji. Wygląda na to, że chciałbyś wykorzystać token po zalogowaniu się użytkownika. Sugeruję, abyś zapisał token w
onTokenRefresh()
metodzie do pamięci wewnętrznej lub wspólnych preferencji. Następnie pobierz token z magazynu po zalogowaniu się użytkownika i zarejestruj go na serwerze w razie potrzeby.Jeśli chcesz ręcznie wymusić
onTokenRefresh()
, możesz utworzyć IntentService i usunąć instancję tokenu. Następnie, gdy wywołasz getToken,onTokenRefresh()
metoda zostanie wywołana ponownie.Przykładowy kod:
EDYTOWAĆ
onTokenRefresh () jest przestarzały . Użyj
onNewToken()
wMyFirebaseMessagingService
źródło
Spróbuj zaimplementować,
FirebaseInstanceIdService
aby uzyskać odświeżający token.Uzyskaj dostęp do tokena rejestracyjnego:
Możesz uzyskać dostęp do wartości tokena, rozszerzając FirebaseInstanceIdService . Upewnij się, że dodano usługę do manifestu , a następnie wywołaj
getToken
w kontekścieonTokenRefresh
i zarejestruj wartość, jak pokazano:Pełny kod:
Zobacz moją odpowiedź tutaj .
EDYCJE:
Nie powinieneś samodzielnie uruchamiać usługi FirebaseInstanceIdService .
Nie będzie to wywoływane zbyt często, jest potrzebne do rotacji kluczy i obsługi zmian identyfikatora instancji z powodu:
System ograniczy zdarzenie odświeżania na wszystkich urządzeniach, aby uniknąć przeciążenia serwerów aplikacji aktualizacjami tokenów.
Spróbuj poniżej :
źródło
onTokenRefresh()
wywołana?Utrzymuję jedną flagę we wspólnym pref, która wskazuje, czy token gcm został wysłany do serwera, czy nie. Na ekranie powitalnym za każdym razem, gdy wywołuję jedną metodę sendDevicetokenToServer. Ta metoda sprawdza, czy identyfikator użytkownika nie jest pusty, a status wysyłania gcm, a następnie wysyła token do serwera.
}
W klasie MyFirebaseInstanceIDService
źródło
Chłopaki, ma bardzo proste rozwiązanie
https://developers.google.com/instance-id/guides/android-implementation#generate_a_token
Uwaga: jeśli Twoja aplikacja używała tokenów, które zostały usunięte przez deleteInstanceID, aplikacja będzie musiała wygenerować tokeny zastępcze.
Zamiast usuwać identyfikator instancji, usuń tylko token:
źródło
Jest to w RxJava2 w scenariuszu, w którym jeden użytkownik wylogowuje się z aplikacji, a inni użytkownicy logują się (ta sama aplikacja). login API)
Zaloguj sie
źródło
Ta odpowiedź nie niszczy identyfikatora instancji, zamiast tego może pobrać bieżący. Przechowuje również odświeżoną wersję w preferencjach wspólnych.
Strings.xml
Utility.java (dowolna klasa, w której chcesz ustawić / pobrać preferencje)
MyFirebaseInstanceIdService.java (rozszerza FirebaseInstanceIdService)
}
onCreate
Usługa Android 2.0 lub nowsza nie jest wywoływana podczas automatycznego uruchamiania ( źródło ). Zamiast tegoonStartCommand
jest zastępowany i używany. Ale w rzeczywistej usłudze FirebaseInstanceIdService jest zadeklarowany jako ostateczny i nie można go zastąpić. Jednak gdy uruchamiamy usługę za pomocą startService (), jeśli usługa już działa, używana jest jej oryginalna instancja (co jest dobre). Nasza onCreate () (zdefiniowana powyżej) również została wywołana !.Użyj tego na początku MainActivity lub w dowolnym momencie, gdy potrzebujesz identyfikatora instancji.
I w końcu,
Zauważ , że możesz to dodatkowo ulepszyć, próbując przenieść kod startedervice () do metody getFirebaseInstanceId.
źródło
źródło
Nowym sposobem byłoby zastąpienie
onNewToken
metody fromFirebaseMessagingService
Nie zapomnij również dodać usługi w pliku Manifest.xml
źródło
Jak zaktualizować swój deviceToken
Najpierw, kiedy się loguję, wysyłam pierwszy token urządzenia w ramach kolekcji użytkowników i aktualnie zalogowanego użytkownika.
Następnie po prostu nadpisuję
onNewToken(token:String)
w mojejFirebaseMessagingService()
i aktualizuję tę wartość, jeśli zostanie wygenerowany nowy token dla tego użytkownikaZa każdym razem, gdy Twoja aplikacja się otworzy, będzie sprawdzać nowy token, jeśli użytkownik nie jest jeszcze zalogowany, nie zaktualizuje tokena, jeśli użytkownik jest już zalogowany, możesz sprawdzić, czy
newToken
źródło