webentwicklung-frage-antwort-db.com.de

FirebaseInstanceIdService ist veraltet

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.

115

Feuerball hier

Überprüfen Sie die Referenzdokumentation für FirebaseInstanceIdService :

Diese Klasse wurde nicht mehr empfohlen.

Zugunsten des Überschreibens von onNewToken in FirebaseMessagingService. 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.

76

JaFirebaseInstanceIdService ist veraltet

FROM DOCS: - Diese Klasse wurde nicht mehr weiterentwickelt . Zugunsten von overriding onNewToken in FirebaseMessagingService. 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 onNewTokenToken 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());
    }
}

EDIT

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>

wie bekomme ich ein Token in deiner Aktivität?

.getToken(); ist ebenfalls veraltet Wenn Sie in Ihrer Aktivität ein Token erhalten müssen, verwenden Sie getInstanceId ()

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

  • Aufgabe, mit der Sie das Ergebnis über die Variable 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);

     }
 });

BEARBEITEN 2

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())

    }
}
91
Nilesh Rathod

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)
    }
8

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")
                        }
1
Rahul

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)
}
0
Gumby The Green

FirebaseinstanceIdService ist veraltet. Also muss "FirebaseMessagingService" verwendet werden

Sea das Bild bitte:

enter image description here

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);
    }
}
0
Harunduet