Firebase (FCM) cómo obtener el token
Es mi primer uso FCM.
Descargar una muestra de firebase / quickstart-android e instalar el FCM Quickstart.But no puedo obtener ningún símbolo del registro incluso pulsar el botón LOG TOKEN en la aplicación.
- Crear notificación de emisión diaria mediante Firebase Cloud Messaging
- Cómo manejar FirebaseInstanceId.getInstance (). GetToken () = null
- Migración de gcm a fcm en android
- ¿Puede la notificación FCM sobre Android sobreescribir anterior?
- Fireman FCM token - ¿Cuándo enviar al servidor?
Entonces intento enviar el mensaje con la consola de Firebase y fijar para apuntar al nombre de paquete de mi app. Conseguí cualquier mensaje entrante.
Quiero saber si FCM se puede usar? GCM todo está bien.
Solución:
Debido a que no soy un desarrollador de Android, sólo un desarrollador de backend.Por lo que me lleva algún tiempo para resolver it.In mi opinión, hay `re algún error en la aplicación de ejemplo.
Código:
RegistrationIntentService.java
public class RegistrationIntentService extends IntentService { private static final String TAG = "RegIntentService"; public RegistrationIntentService() { super(TAG); } @Override protected void onHandleIntent(Intent intent) { String token = FirebaseInstanceId.getInstance().getToken(); Log.i(TAG, "FCM Registration Token: " + token); } }
MyFirebaseInstanceIDService.java
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { private static final String TAG = "MyFirebaseIIDService"; /** * Called if InstanceID token is updated. This may occur if the security of * the previous token had been compromised. Note that this is called when the InstanceID token * is initially generated so this is where you would retrieve the token. */ // [START refresh_token] @Override public void onTokenRefresh() { // Get updated InstanceID token. // String refreshedToken = FirebaseInstanceId.getInstance().getToken(); // Log.d(TAG, "Refreshed token: " + refreshedToken); // // // TODO: Implement this method to send any registration to your app's servers. // sendRegistrationToServer(refreshedToken); // Intent intent = new Intent(this, RegistrationIntentService.class); startService(intent); } // [END refresh_token] /** * Persist token to third-party servers. * <p> * Modify this method to associate the user's FCM InstanceID token with any server-side account * maintained by your application. * * @param token The new token. */ private void sendRegistrationToServer(String token) { // Add custom implementation, as needed. } }
Agrega esto en MainActivity.java.
Intent intent = new Intent(this, RegistrationIntentService.class); startService(intent);
Después de hacer arriba, usted puede conseguir el Token en logcat. Pero finalmente encuentro una manera conveniente de conseguirlo. Simplemente use el modo de depuración para instalar la aplicación de ejemplo y puede obtener el token cuando la instale por primera vez.
Pero no sé t why it can
imprimir el registro cuando lo instalo. Tal vez esté relacionado con el sistema móvil.
Y entonces por qué no puedo obtener la Notificación. FirebaseMessagingService.onMessageReceived no llamó a sendNotification
- Notificaciones duplicadas de mensajería en la nube de Firebase
- GoogleApiAvailability se perdió con firebase-messaging: 9.4.0
- Error de token no registrado después de enviar una notificación
- ¿Es necesaria la migración de GCM a FCM?
- AbstractMethodError con la mensajería de Cloud Firebase
- Firebase Cloud Messaging colapse_key no se ha recibido (tasa limitada?)
- Actividad abierta en la notificación de firebase recibida en primer plano
- Google FCM getIntent no devolver los datos esperados cuando la aplicación está en el estado de fondo
Información importante.
Si el servicio de juego de google se colgó o no se ejecutó, entonces fcm return token =
null
De acuerdo con doc
Migrar una aplicación cliente GCM a FCM
onTokenRefresh()
Sólo se llama si se actualiza Token InstanceID
Por lo tanto, solo llamará a primera hora cuando instale una aplicación en su dispositivo.
Por lo tanto, sugiero desinstalar su aplicación manualmente y tratar de ejecutar de nuevo
Definitivamente obtendrás TOKEN
Trabaja para mi
Log.d("Firebase", "token "+ FirebaseInstanceId.getInstance().getToken());
Prueba esto. ¿Por qué utiliza RegistrationIntentService
?
public class FirebaseInstanceIDService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { String token = FirebaseInstanceId.getInstance().getToken(); registerToken(token); } private void registerToken(String token) { } }
En lugar de esto:
// [START refresh_token] @Override public void onTokenRefresh() { // Get updated InstanceID token. // String refreshedToken = FirebaseInstanceId.getInstance().getToken(); // Log.d(TAG, "Refreshed token: " + refreshedToken); // // TODO: Implement this method to send any registration to your app's servers. // sendRegistrationToServer(refreshedToken); // Intent intent = new Intent(this, RegistrationIntentService.class); startService(intent); } // [END refresh_token]
Hacer esto:
// [START refresh_token] @Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); // Log.d(TAG, "Refreshed token: " + refreshedToken); // Implement this method to send token to your app's server sendRegistrationToServer(refreshedToken); } // [END refresh_token]
Y una cosa más:
sendRegistrationToServer()
llamar al métodosendRegistrationToServer()
que actualizará el token en el servidor, si está enviando notificaciones push desde el servidor.
ACTUALIZAR:
Se genera un nuevo token Firebase ( onTokenRefresh()
se llama) cuando:
- La aplicación elimina ID de instancia
- La aplicación se restaura en un dispositivo nuevo
- El usuario desinstala / vuelve a instalar la aplicación.
- El usuario borra los datos de la aplicación.
Al mismo tiempo don no se olvide de incluir esto en su archivo de manifiesto para recibir id de token
<service android:name=".MyFirebaseInstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service>
Si está utilizando alguna función de autorización de FB, puede tomar el token usando esto:
//------GET USER TOKEN------- FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser(); mUser.getToken(true) .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() { public void onComplete(@NonNull Task<GetTokenResult> task) { if (task.isSuccessful()) { String idToken = task.getResult().getToken(); // ... } } });
Funcione bien si el usuario está registrado. GetCurrentUser ()
- OnActivityResult () no se llama
- Adb logcat -f log.txt error: no se pudo abrir el archivo de salida: Sistema de archivos de sólo lectura