Ich benutze FCM zum ersten Mal.
Ich lade ein Beispiel von firebase / quickstart-android herunter und installiere den FCM-Schnellstart. Aber ich kann kein Token aus dem Protokoll erhalten, auch wenn ich in der App auf die Schaltfläche LOG TOKEN geklickt habe .
Dann versuche ich, eine Nachricht mit der Firebase-Konsole zu senden und auf meinen App-Paketnamen zu zielen. Ich habe eingehende Nachrichten erhalten.
Ich möchte wissen, ob FCM verwendet werden kann. GCM, alles ist in Ordnung.
Lösung:
Weil ich kein Android-Entwickler bin, sondern nur ein Backend-Entwickler. Ich brauche also einige Zeit, um es zu lösen. Meiner Meinung nach gibt es einige Fehler in der Beispiel-App.
Code:
RegistrationIntentService.java
public class RegistrationIntentService extends IntentService {
private static final String TAG = "RegIntentService";
public RegistrationIntentService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
String token = FirebaseInstanceId.getInstance().getToken();
Log.i(TAG, "FCM Registration Token: " + token);
}
}
MyFirebaseInstanceIDService.java
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is called when the InstanceID token
* is initially generated so this is where you would retrieve the token.
*/
// [START refresh_token]
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
// String refreshedToken = FirebaseInstanceId.getInstance().getToken();
// Log.d(TAG, "Refreshed token: " + refreshedToken);
//
// // TODO: Implement this method to send any registration to your app's servers.
// sendRegistrationToServer(refreshedToken);
//
Intent intent = new Intent(this, RegistrationIntentService.class);
startService(intent);
}
// [END refresh_token]
/**
* Persist token to third-party servers.
* <p>
* Modify this method to associate the user's FCM InstanceID token with any server-side account
* maintained by your application.
*
* @param token The new token.
*/
private void sendRegistrationToServer(String token) {
// Add custom implementation, as needed.
}
}
Fügen Sie dies in der Datei MainActivity.java hinzu.
Intent intent = new Intent(this, RegistrationIntentService.class);
startService(intent);
Nach oben , erhalten Sie das Token in Logcat. Aber schließlich finde ich einen bequemen Weg , um es zu bekommen. Verwenden Sie einfach den Debug-Modus, um die Beispiel-App zu installieren, und Sie können das Token erhalten, wenn Sie es zum ersten Mal installieren.
Ich weiß jedoch nicht, warum das Protokoll bei der Installation nicht gedruckt werden kann. Vielleicht mit dem mobilen System verwandt sein.
Und warum kann ich dann keine Benachrichtigung erhalten? FirebaseMessagingService.onMessageReceived hat sendNotification nicht aufgerufen
String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken);
Antworten:
SCHNELLSTES UND GUTES FÜR PROTOTYP
Die schnelle Lösung besteht darin, es in sharedPrefs zu speichern und diese Logik der
onCreate
Methode in Ihrer MainActivity oder Klasse hinzuzufügen , die Application erweitert.SAUBERER WEG
Eine bessere Option besteht darin, einen Dienst zu erstellen und eine ähnliche Logik beizubehalten. Erstellen Sie zunächst einen neuen Service
Und fügen Sie es dann der AndroidManifest-Datei hinzu
Schließlich können Sie eine statische Methode aus Ihrem Dienst verwenden
MyFirebaseMessagingService.getToken(Context);
DAS SCHNELLSTE, ABER VERRINGERT
Es funktioniert immer noch, wenn Sie eine ältere Firebase-Bibliothek als Version 17.xx verwenden
quelle
FirebaseInstanceId.getInstance().getInstanceId()
stattdessen verwendenFirebaseInstanceId.getInstance().getToken()
, siehe diese AntwortWichtige Informationen.
Wenn der Wiedergabedienst ordnungsgemäß funktioniert, wird die
FirebaseInstanceId.getInstance().getToken()
Methode zurückgegebentoken
quelle
Das Team hinter Firebase Android SDK ändert die API ein wenig. Ich habe die "Token to Server" -Logik wie folgt implementiert:
In meiner Instanz von FirebaseMessagingService:
Beachten Sie, dass sich das Token pro Gerät befindet und von Firebase unabhängig von Ihrer Anmeldelogik aktualisiert werden kann. Wenn Sie also über Anmelde- und Abmeldefunktionen verfügen, müssen Sie zusätzliche Fälle berücksichtigen:
Mit der neuen API können Sie Token wie folgt erhalten:
Viel Glück!
quelle
Laut doc
Migrieren Sie eine GCM-Client-App zu FCM
Es wird also nur beim ersten Mal aufgerufen, wenn Sie eine App auf Ihrem Gerät installieren.
Ich empfehle daher, Ihre App manuell zu deinstallieren und erneut zu versuchen
auf jeden Fall werden Sie Token bekommen
quelle
String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken);
onTokenRefresh
nicht jedes Login aufrufen. Wie kann ich ein Token in meinem Anmeldebildschirm erhalten?Versuche dies. Warum benutzt du
RegistrationIntentService
?quelle
Diese Zeile sollte Ihnen das Firebase-FCM-Token geben.
Führen Sie Log.d aus, um es auf dem Android-Monitor auszudrucken.
quelle
An Stelle von:
Mach das:
Und noch etwas:
AKTUALISIEREN:
Ein neues Firebase-Token wird generiert (
onTokenRefresh()
wird aufgerufen), wenn:quelle
FirebaseInstanceId.getInstance().deleteInstanceId()
in einem anderen Thread laufenVergessen Sie nicht, dies in Ihre Manifestdatei aufzunehmen, um die Token-ID zu erhalten
quelle
In
firebase-messaging:17.1.0
und neuer ist der FirebaseInstanceIdService veraltet. Sie können ihnonNewToken
für dieFirebaseMessagingService
Klasse abrufen, wie unter https://stackoverflow.com/a/51475096/1351469 erläutertWenn Sie den Token jedoch jederzeit erhalten möchten, können Sie dies jetzt folgendermaßen tun:
quelle
Die Methode
getToken()
ist veraltet. Sie könnengetInstanceId()
stattdessen verwenden.Wenn Sie die Ergebnisse bei der Anforderung verarbeiten möchten
instanceId(token)
, überprüfen Sie diesen Code.quelle
Wenn Sie eine Auth-Funktion von Firebase verwenden, können Sie Token wie folgt verwenden:
Funktioniert gut, wenn Benutzer angemeldet sind. getCurrentUser ()
quelle
Versuche dies
quelle
Für diejenigen, die hier landen, ist bis jetzt
FirebaseInstanceIdService
veraltet, verwenden Sie stattdessen:und in AndroidManifest deklarieren
quelle
quelle
In Firebase (FCM) können Sie Folgendes verwenden, um das Token abzurufen:
quelle
quelle