73 votes

Firebase onTokenRefresh() n'est pas appelée

Dans mon MainActivitydans mon journal, je peux voir le jeton à l'aide de FirebaseInstanceId.getInstance().getToken() et il affiche le jeton généré. Mais il semble que dans mon MyFirebaseInstanceIDService où il s'étend à l' FirebaseInstanceIdService, onTokenRefresh() n'est pas appelée, où, dans cette fonction, il a été dit que le jeton est d'abord généré ici. J'ai besoin d'appeler sendRegistrationToServer() c'est pourquoi j'essaie de savoir pourquoi il n'est pas aller dans l' onTokenRefresh().

Voici mon code

public class MyFirebaseInstanceIDService  extends FirebaseInstanceIdService {


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

        sendRegistrationToServer(refreshedToken);
    }
}

106voto

Sagar Gangawane Points 1562

onTokenRefresh dans FirebaseInstanceIdService n'est appelée lorsqu'un nouveau jeton est généré. Si votre application a été précédemment installé et a généré un jeton puis onTokenRefresh ne serait pas appelé. Essayez de désinstaller et de réinstaller l'application pour forcer la génération d'un nouveau jeton, ce serait la cause de onTokenRefresh à être appelé.

Assurez-vous également que votre FirebaseInstanceIdService est correctement défini dans votre AndroidManifest.xml

Dans votre Fichier de Manifeste.

 <service
        android:name="com.bnt.etailers.fcm.MyFireBaseInstanceIDService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>

    <service
        android:name="com.bnt.etailers.fcm.GCMNotificationIntentService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

FirebaseInstanceIdService classe

public class MyFireBaseInstanceIDService extends FirebaseInstanceIdService {


private static final String TAG = MyFireBaseInstanceIDService.class.getSimpleName();

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

    if (refreshedToken!=null) {
        SettingPreferences.setStringValueInPref(this, SettingPreferences.REG_ID, refreshedToken);
    }
    // TODO: Implement this method to send any registration to your app's servers.
    sendRegistrationToServer(refreshedToken);
}
// [END refresh_token]

/**
 * Persist token to third-party servers.
 *
 * 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.
}}

FirebaseMessagingService classe.

public class GCMNotificationIntentService extends FirebaseMessagingService {
// Sets an ID for the notification, so it can be updated


public GCMNotificationIntentService() {
    super();
}


@Override
public void onMessageReceived(RemoteMessage message) {

}}

23voto

coelho Points 1013

J'ai eu le même problème comme vous. Mon erreur était la suivante: j'ai placé mon <service> balises en dehors de la <application> balise dans la AndroidManifest.xml fichier.

Maintenant la mienne ressemble à ça:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

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

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

Et il fonctionne sans aucun problème.

17voto

Surendar D Points 2927

Oui cela peut se produire plusieurs fois.

Veuillez appeler la méthode suivante où vous souhaitez obtenir votre fcm id.

    try {
            String refreshedToken = FirebaseInstanceId.getInstance().getToken();
            Log.d("Firbase id login", "Refreshed token: " + refreshedToken);
        } catch (Exception e) {
            e.printStackTrace();
        }

14voto

faruk Points 1742

Essayez de ré-installer l'application, par abord la désinstaller à partir de votre appareil ou de votre émulateur. Il va alors générer un nouveau jeton, donc onTokenRefresh() sera appelée de nouveau.

13voto

sreedhu madhu Points 495

Dans mon cas, j'ai oublié d'ajouter d'autorisations internet dans le manifeste,

<uses-permission android:name="android.permission.INTERNET" />

Espérons que la plupart des gens ne pas faire cette erreur.

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