onnewtoken library gettoken firebasemessagingservice firebaseinstanceidservice android firebase firebase-cloud-messaging

android - library - FirebaseInstanceIdService está en desuso



onnewtoken firebase (6)

Kotlin permite un código aún más simple que lo que se muestra en otras respuestas.

Para obtener el nuevo token cada vez que se actualice:

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

Para obtener el token desde cualquier lugar en tiempo de ejecución:

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

Espero que todos ustedes conozcan esta clase, que se utiliza para obtener el token de notificación cada vez que se actualiza el token de notificación de base de fuego, obtenemos el token actualizado de esta clase, Del siguiente método.

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

Para usar esto cuando quiero implementar FCM, extendí MyClass desde FirebaseInstanceIdService

Pero, mostrando que FirebaseInstanceIdService está en desuso

¿Alguien sabe esto? ¿Qué método o clase debo usar en lugar de esto para obtener el token actualizado ya que está en desuso?

Estoy usando: implementation ''com.google.firebase:firebase-messaging:17.1.0''

Revisé el documento para el mismo no hay nada mencionado sobre esto. : DOCUMENTO DE CONFIGURACIÓN FCM

ACTUALIZAR

El problema ha sido resuelto.

Como Google desaprobó el Servicio de Servicio de FirebaseInstanceService ,

Hice la pregunta para encontrar el camino y llego a saber que podemos obtener el token de FirebaseMessagingService ,

Al igual que antes, cuando hice la pregunta, los documentos de la pregunta no se actualizaron, pero ahora los documentos de Google se actualizaron, así que para obtener más información, consulte este documento de google:

OLD From: FirebaseInstanceService (en desuso)

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

NUEVO de: FirebaseMessagingService

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

Gracias.


Y esto:

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

Supongamos que es solución de desaprobación:

FirebaseInstanceId.getInstance().getToken()

EDITAR

FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken() puede producir una excepción si la tarea aún no se ha completado, por lo que el método que describió Nilesh Rathod (con .addOnSuccessListener ) es la forma correcta de hacerlo.

Kotlin:

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


FirebaseInstanceIdService está en desuso

DE DOCS: - Esta clase fue desaprobada. A favor de overriding onNewToken en FirebaseMessagingService . Una vez que se haya implementado, este servicio puede ser eliminado de manera segura.

No es necesario utilizar el servicio FirebaseInstanceIdService para obtener el token FCM. Puede eliminar el servicio FirebaseInstanceIdService forma segura.

Ahora necesitamos @Override onNewToken obtener Token en FirebaseMessagingService

CÓDIGO DE MUESTRA

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

FirebaseMessagingService registrar su FirebaseMessagingService en un archivo de manifiesto como este

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

como obtener token en tu actividad

.getToken(); también está en desuso si necesita obtener un token en su actividad que Use getInstanceId ()

Ahora necesitamos usar getInstanceId () para generar el token

getInstanceId () Devuelve el ID y el token generado automáticamente para este proyecto Firebase .

Esto genera una ID de instancia si aún no existe, que comienza a enviar información periódicamente al servidor de Firebase.

Devoluciones

  • Tarea que puede utilizar para ver el resultado a través de InstanceIdResult que contiene el ID y el token .

CÓDIGO DE MUESTRA

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

Editar 2

Aquí está el código de trabajo para 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()) } }


FirebaseinstanceIdService está en desuso. Así que hay que usar "FirebaseMessagingService"

Mar la imagen por favor:

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


firebaser aquí

Consulte la documentación de referencia de FirebaseInstanceIdService :

Esta clase fue desaprobada.

A favor de anular onNewToken en FirebaseMessagingService . Una vez que se haya implementado, este servicio puede ser eliminado de manera segura.

Por extraño que parezca, el JavaDoc para FirebaseMessagingService aún no menciona el método onNewToken . Parece que no toda la documentación actualizada no estaba publicada todavía. He archivado un problema interno para obtener las actualizaciones de los documentos de referencia publicados y para obtener las muestras en la guía actualizada también.

Mientras tanto, las llamadas antiguas / obsoletas y las nuevas deberían funcionar. Si tiene problemas con alguno de los dos, publique el código y lo echaré un vistazo.


En KOTLIN: - Si desea guardar el token en la base de datos o en las preferencias compartidas, sobrescriba enNewToken en FirebaseMessagingService

override fun onNewToken(token: String?) { super.onNewToken(token) }

Obtener el token en tiempo de ejecución, usar

FirebaseInstanceId.getInstance().instanceId .addOnSuccessListener(this@SplashActivity) { instanceIdResult -> val mToken = instanceIdResult.token println("printing fcm token: $mToken") }