Je viens de mettre à jour GCM à FCM conformément à ce guide ici . Le site indique que mon service, qui étend FirebaseInstanceIdService, sera appelé dès que le jeton sera généré. Pour une raison quelconque, mon service n'est jamais appelé et onTokenRefresh
n'est jamais exécuté.
Mes services sont enregistrés comme ceci, selon le guide:
<service Android:name=".fcm.FcmService">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service Android:name=".fcm.InstanceIdService">
<intent-filter>
<action Android:name="com.google.firebase.INSTANCEID_EVENT"/>
</intent-filter>
</service>
Mon service:
public class InstanceIdService extends FirebaseInstanceIdService {
private static final String TAG = "InstanceIdService";
@Override
public void onTokenRefresh() {
String token = FirebaseInstanceId.getInstance().getToken();
Log.e(TAG, "Got token: " + token);
}
}
Le LogCat ne dit rien sur les fichiers de configuration manquants ou autre, et je peux voir les journaux sur FirebaseApp et une entrée de journal mentionnant le jeton, mais mon service n'est toujours pas appelé.
Dois-je démarrer ce service quelque part dans mon activité? .__ Est-ce que je fais quelque chose de mal? Est-ce que quelqu'un peut me guider dans la bonne direction?
EDIT: using Log.e("TOKEN", "Token: " + FirebaseInstanceId.getInstance().getToken());
imprime correctement mon jeton, ce qui signifie qu'il a été généré avec succès. Le service n'est toujours pas appelé ...
EDIT 2: La modification de INSTANCEID_EVENT en INSTANCE_ID_EVENT a corrigé le problème, mais j'ai dû réinstaller l'application. Comme j'ai déjà publié une version bêta contenant le nouveau FCM, mes bêta-testeurs ne pourront pas s'abonner aux rubriques pour recevoir les messages entrants. Alors, comment devrais-je résoudre cela?
Merci Endanke d'avoir compris cela avec moi. Il semble que la documentation de Firebase est incohérente. Une page indique que votre filtre d'intention dans votre fichier manifeste doit être INSTANCE_ID_EVENT
, et un autre dit INSTANCEID_EVENT
.
Vous devez utiliser INSTANCE_ID_EVENT
et une fois les modifications apportées, vous devez désinstaller et réinstaller complètement votre application pour que les modifications soient prises en compte.
FCM devrait être utilisé en remplacement du GCM. Dans votre cas, il semblerait que votre manifeste contienne des services pour FCM et GCM. Essayez de supprimer le gcm.GcmService et utilisez uniquement celui qui étend FirebaseInstanceId.
Après une tonne d'essais et d'erreurs, mon problème était d'avoir des outils: node = "replace" dans mon tag d'application ... le supprimer l'a résolu pour moi
Ce que veut «Firebase Cloud Messaging», c'est:
MyFirebaseInstanceIdService est un nom 'suggéré'. Personnellement, je préfère préfixer ces classes dérivées d'un acronyme ou d'un nom que j'utilise dans l'application.
Vérifiez également la date de votre téléphone! J'ai eu une fois une différence de 5-7 jours! Réparer la journée et réinstaller l'application a résolu le problème!
remplacez simplement INSTANCE_ID_EVENT par INSTANCEID_EVENT .il a fonctionné pour moi
J'ai différentes variantes de construction dans mon projet et j'ai le problème suivant:
De: https://firebase.google.com/docs/Android/setup#prerequisites
Remarque: Si vous avez défini plusieurs variantes de construction avec différents noms de package, chaque application doit être ajoutée à votre projet dans la console Firebase.
Assurez-vous que votre fichier Firebase "MyFirebaseInstanceIDService.Java" se trouve directement sous l’arborescence du nom de package "com.company".
Ne les mettez pas dans un sous-paquet distinct, comme "com.company.services". En effet, votre service google-services.json recherchera les fichiers directement dans le répertoire "com.company".
Ajoutez ce qui suit dans votre balise d’application de manifeste sous la balise méta (le cas échéant)
<service
Android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action Android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
Vous obtiendrez votre JETON sur la méthode publique void onTokenRefresh ()
PS: Téléchargez et remplacez le dernier fichier google-services.json à partir de la console de votre projet.
J'ai eu le même problème et en désinstallant et en réinstallant l'application sur l'appareil onTokenRefresh()
on m'a appelé une fois. Donc, je suppose que cela a changé de GCM où il était souvent appelé à être appelé une seule fois, alors qu’il n’y avait pas de jeton.
onTokenRefresh()
appellera une seule fois. Lorsque votre application sera installée pour la première fois, si vous souhaitez accéder au jeton depuis une autre activité, vous devez appeler cette méthode:
FirebaseInstanceId.getInstanceId().getToken();