Ich hoffe, dass Sie alle über diese Klasse Bescheid wissen. Sie wird verwendet, um ein Benachrichtigungstoken zu erhalten, wenn das Firebase-Benachrichtigungstoken aktualisiert wurde. Wir erhalten das aktualisierte Token dieser Klasse.
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
}
Um dies zu verwenden, da ich FCM implementieren möchte, habe ich MyClass um FirebaseInstanceIdService
erweitert.
Zeigt an, dass FirebaseInstanceIdService veraltet ist.
Weiß jemand das?, Welche Methode oder Klasse sollte ich stattdessen verwenden, um ein aktualisiertes Token zu erhalten, da dieses veraltet ist.
Ich verwende: implementation 'com.google.firebase:firebase-messaging:17.1.0'
Ich habe das Dokument daraufhin überprüft, da nichts darüber erwähnt wird. : FCM-SETUP-DOKUMENT
UPDATE
Dieses Problem wurde behoben.
Da Google die FirebaseInstanceService
nicht mehr akzeptierte,
Ich habe die Frage gestellt, um den Weg zu finden, und ich erfahre, dass wir das Token von FirebaseMessagingService erhalten können.
Wie zuvor, als ich gefragt wurde, dass die Fragendokumente nicht aktualisiert wurden. Jetzt wurden Google-Dokumente aktualisiert. Weitere Informationen finden Sie in diesem Google-Dokument: FirebaseMessagingService
OLD From: FirebaseInstanceService (veraltet)
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
}
NEW Von: FirebaseMessagingService
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.d("NEW_TOKEN",s);
}
Vielen Dank.
Feuerball hier
Überprüfen Sie die Referenzdokumentation für FirebaseInstanceIdService
:
Diese Klasse wurde nicht mehr empfohlen.
Zugunsten des Überschreibens von
onNewToken
inFirebaseMessagingService
. Nach der Implementierung kann dieser Dienst sicher entfernt werden.
Komischerweise erwähnt das JavaDoc für FirebaseMessagingService
die onNewToken
-Methode noch nicht. Es scheint, dass nicht alle aktualisierten Dokumentationen noch nicht veröffentlicht wurden. Ich habe ein internes Problem eingereicht, um die Aktualisierungen der Referenzdokumente zu veröffentlichen und die Beispiele im Handbuch zu aktualisieren.
In der Zwischenzeit sollten sowohl die alten als auch die veralteten Aufrufe funktionieren. Wenn du Probleme hast, poste den Code und ich schaue nach.
JaFirebaseInstanceIdService
ist veraltet
FROM DOCS: - Diese Klasse wurde nicht mehr weiterentwickelt . Zugunsten von
overriding onNewToken
inFirebaseMessagingService
. Nach der Implementierung kann dieser Dienst sicher entfernt werden.
Sie müssen den FirebaseInstanceIdService
-Dienst nicht verwenden, um das FCM-Token zu erhalten. Sie können den FirebaseInstanceIdService
-Dienst sicher entfernen
Jetzt müssen wir @Override onNewToken
Token
in FirebaseMessagingService
bekommen.
BEISPIELCODE
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
Log.e("NEW_TOKEN", s);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> params = remoteMessage.getData();
JSONObject object = new JSONObject(params);
Log.e("JSON_OBJECT", object.toString());
String NOTIFICATION_CHANNEL_ID = "Nilesh_channel";
long pattern[] = {0, 1000, 500, 1000};
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Your Notifications",
NotificationManager.IMPORTANCE_HIGH);
notificationChannel.setDescription("");
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.setVibrationPattern(pattern);
notificationChannel.enableVibration(true);
mNotificationManager.createNotificationChannel(notificationChannel);
}
// to diaplay notification in DND Mode
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = mNotificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID);
channel.canBypassDnd();
}
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
notificationBuilder.setAutoCancel(true)
.setColor(ContextCompat.getColor(this, R.color.colorAccent))
.setContentTitle(getString(R.string.app_name))
.setContentText(remoteMessage.getNotification().getBody())
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_launcher_background)
.setAutoCancel(true);
mNotificationManager.notify(1000, notificationBuilder.build());
}
}
Sie müssen Ihr
FirebaseMessagingService
in einer solchen Manifestdatei registrieren
<service
Android:name=".MyFirebaseMessagingService"
Android:stopWithTask="false">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
.getToken();
ist ebenfalls veraltet Wenn Sie in Ihrer Aktivität ein Token erhalten müssen, verwenden SiegetInstanceId ()
Jetzt müssen wir getInstanceId ()
verwenden, um ein Token zu generieren
getInstanceId ()
Gibt die ID
und das automatisch generierte Token für dieses Firebase
-Projekt zurück.
Dadurch wird eine Instanz-ID generiert, falls diese noch nicht vorhanden ist. Anschließend werden regelmäßig Informationen an das Firebase-Backend gesendet.
Kehrt zurück
InstanceIdResult
anzeigen können, die die Variablen ID
und token
enthält.BEISPIELCODE
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this, new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String newToken = instanceIdResult.getToken();
Log.e("newToken",newToken);
}
});
Hier ist der Arbeitscode für Kotlin
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(p0: String?) {
}
override fun onMessageReceived(remoteMessage: RemoteMessage?) {
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val NOTIFICATION_CHANNEL_ID = "Nilesh_channel"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationChannel = NotificationChannel(NOTIFICATION_CHANNEL_ID, "Your Notifications", NotificationManager.IMPORTANCE_HIGH)
notificationChannel.description = "Description"
notificationChannel.enableLights(true)
notificationChannel.lightColor = Color.RED
notificationChannel.vibrationPattern = longArrayOf(0, 1000, 500, 1000)
notificationChannel.enableVibration(true)
notificationManager.createNotificationChannel(notificationChannel)
}
// to diaplay notification in DND Mode
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = notificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID)
channel.canBypassDnd()
}
val notificationBuilder = NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
notificationBuilder.setAutoCancel(true)
.setColor(ContextCompat.getColor(this, R.color.colorAccent))
.setContentTitle(getString(R.string.app_name))
.setContentText(remoteMessage!!.getNotification()!!.getBody())
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_launcher_background)
.setAutoCancel(true)
notificationManager.notify(1000, notificationBuilder.build())
}
}
Und das:
FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()
nehmen Sie an, Lösung von veraltet zu sein:
FirebaseInstanceId.getInstance().getToken()
EDIT
FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()
kann eine Ausnahme erzeugen, wenn die Aufgabe noch nicht abgeschlossen ist. Daher ist die von Nilesh Rathod beschriebene Methode (mit .addOnSuccessListener
) der richtige Weg.
Kotlin:
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener(this) { instanceIdResult ->
val newToken = instanceIdResult.token
Log.e("newToken", newToken)
}
In KOTLIN: - Wenn Sie Token in der Datenbank oder in den gemeinsamen Einstellungen speichern möchten, überschreiben Sie onNewToken in FirebaseMessagingService .
override fun onNewToken(token: String?) {
super.onNewToken(token)
}
Token zur Laufzeit abrufen, verwenden
FirebaseInstanceId.getInstance().instanceId
.addOnSuccessListener([email protected]) { instanceIdResult ->
val mToken = instanceIdResult.token
println("printing fcm token: $mToken")
}
Kotlin erlaubt noch einfacheren Code als in anderen Antworten gezeigt.
So erhalten Sie das neue Token bei jeder Aktualisierung:
class MyFirebaseMessagingService: FirebaseMessagingService() {
override fun onNewToken(token: String?) {
Log.d("FMS_TOKEN", token)
}
...
}
So rufen Sie das Token zur Laufzeit von überall ab:
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
Log.d("FMS_TOKEN", it.token)
}
FirebaseinstanceIdService
ist veraltet. Also muss "FirebaseMessagingService" verwendet werden
Sea das Bild bitte:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.e("NEW_TOKEN",s);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
}
}