194 votes

FirebaseInstanceIdService est déprécié

J'espère que vous connaissez tous cette classe, utilisée pour obtenir le jeton de notification chaque fois que le jeton de notification de firebase est rafraîchi, nous obtenons le jeton rafraîchi de cette classe, à partir de la méthode suivante.

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);
}

Pour l'utiliser comme je veux implémenter le FCM, j'ai étendu MyClass de la manière suivante FirebaseInstanceIdService

Mais, en montrant que FirebaseInstanceIdService est déprécié

Quelqu'un le sait-il ? Quelle méthode ou classe je devrais utiliser à la place de ceci pour obtenir un jeton rafraîchi car ceci est déprécié.

J'utilise : implementation 'com.google.firebase:firebase-messaging:17.1.0'

J'ai vérifié le document pour la même chose, il n'y a rien de mentionné à ce sujet : DOCUMENT DE CONFIGURATION FCM


UPDATE

Ce problème a été corrigé.

Google ayant supprimé l'option FirebaseInstanceService ,

J'ai posé la question pour trouver le chemin et j'ai appris que nous pouvons obtenir le jeton à partir de FirebaseMessagingService ,

Comme auparavant, lorsque j'ai posé la question, les documents n'ont pas été mis à jour, mais maintenant les documents Google ont été mis à jour, donc pour plus d'informations, consultez ce document Google : FirebaseMessagingService

OLD De : FirebaseInstanceService (Déprécié)

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);
}

NOUVEAU De : FirebaseMessagingService

@Override
public void onNewToken(String s) {
    super.onNewToken(s);
    Log.d("NEW_TOKEN",s);
}

Merci.

125voto

Nilesh Rathod Points 34836

Oui FirebaseInstanceIdService est déprécié

DE DOCS :- Cette classe a été dépréciée. En faveur de overriding onNewToken en FirebaseMessagingService . Une fois que cela a été mis en œuvre, ce service peut être supprimé en toute sécurité.

Pas besoin d'utiliser FirebaseInstanceIdService pour obtenir le jeton FCM Vous pouvez supprimer en toute sécurité FirebaseInstanceIdService service

Maintenant, nous devons @Override onNewToken obtenir Token en FirebaseMessagingService

CODE ÉCHANTILLON

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

EDITAR

Vous devez enregistrer votre FirebaseMessagingService dans le fichier manifeste comme ceci

    <service
        android:name=".MyFirebaseMessagingService"
        android:stopWithTask="false">
        <intent-filter>

            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

comment obtenir un jeton dans votre activité

[.getToken();](https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId#getToken()) est également déprécié si vous avez besoin d'obtenir un jeton dans votre activité, il faut utiliser [getInstanceId ()](https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId.html#getInstanceId())

Maintenant, nous devons utiliser [getInstanceId ()](https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId.html#getInstanceId()) pour générer un jeton

getInstanceId () Retourne le ID et un jeton généré automatiquement pour ce Firebase projet.

Cela génère un ID d'instance s'il n'existe pas encore, qui commence à envoyer périodiquement des informations au backend de Firebase.

Renvoie à

  • Task que vous pouvez utiliser pour voir le résultat via l'outil InstanceIdResult qui détient le ID y token .

CODE ÉCHANTILLON

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this,  new OnSuccessListener<InstanceIdResult>() {
     @Override
     public void onSuccess(InstanceIdResult instanceIdResult) {
           String newToken = instanceIdResult.getToken();
           Log.e("newToken",newToken);

     }
 });

EDIT 2

Voici le code de travail pour 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())

    }
}

108voto

Frank van Puffelen Points 16029

firebaser ici

Vérifiez le la documentation de référence pour FirebaseInstanceIdService :

Cette classe a été dépréciée.

En faveur d'une dérogation onNewToken en FirebaseMessagingService . Une fois que cela a été mis en œuvre, ce service peut être supprimé en toute sécurité.

Bizarrement, la JavaDoc pour FirebaseMessagingService ne mentionne pas le onNewToken méthode pour l'instant. Il semble que toute la documentation mise à jour n'ait pas encore été publiée. J'ai déposé un problème interne pour que les mises à jour des documents de référence soient publiées, et que les exemples du guide soient également mis à jour.

Entre-temps, les anciens appels (dépréciés) et les nouveaux devraient fonctionner. Si vous avez des problèmes avec l'un ou l'autre, postez le code et je regarderai.

11voto

Et ceci :

FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()

est censé être une solution de dépréciation :

FirebaseInstanceId.getInstance().getToken()

EDITAR

FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken() peut produire une exception si la tâche n'est pas encore terminée, donc la méthode décrite par Nilesh Rathod (avec .addOnSuccessListener ) est la manière correcte de le faire.

Kotlin :

FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener(this) { instanceIdResult ->
        val newToken = instanceIdResult.token
        Log.e("newToken", newToken)
    }

5voto

Gumby The Green Points 179

Kotlin permet un code encore plus simple que celui présenté dans les autres réponses.

Pour obtenir le nouveau jeton à chaque fois qu'il est rafraîchi :

class MyFirebaseMessagingService: FirebaseMessagingService() {

    override fun onNewToken(token: String?) {
        Log.d("FMS_TOKEN", token)
    }
    ...
}

Pour obtenir le jeton de n'importe où au moment de l'exécution :

FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
    Log.d("FMS_TOKEN", it.token)
}

4voto

Harunduet Points 607

FirebaseinstanceIdService est déprécié. Il faut donc utiliser "FirebaseMessagingService".

Mer l'image s'il vous plaît :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X