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)
}
Sí
FirebaseInstanceIdService
está en desuso
DE DOCS: - Esta clase fue desaprobada. A favor de
overriding onNewToken
enFirebaseMessagingService
. 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 suFirebaseMessagingService
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 UsegetInstanceId ()
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 elID
y eltoken
.
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
enFirebaseMessagingService
. 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")
}