2016-06-13 2 views
32

C'est le premier à utiliser FCM.Firebase (FCM) comment obtenir le jeton

télécharger un échantillon de firebase/quickstart-android et installer la FCM Quickstart.But Je ne peux pas obtenir tout jeton du journal atteint même le bouton LOG TOKEN dans l'application.

Ensuite, j'essaie d'envoyer un message avec la console Firebase et de le définir pour cibler mon nom de package d'application. J'ai reçu un message entrant.

Je veux savoir FCM peut être utilisé? GCM tout va bien.

Solution:

Parce que je ne suis pas un développeur Android, juste un back-end developer.So il me prend un certain temps pour résoudre it.In mon avis, there`re un bug dans l'application de l'échantillon.

enter image description here

code:

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. 
    } 
} 

Ajouter ce dans le MainActivity.java.

Intent intent = new Intent(this, RegistrationIntentService.class); 
     startService(intent); 

Après faire ci-dessus, vous pouvez obtenir le jeton dans logcat.But enfin je trouve un moyen pratique pour l'obtenir. Il suffit d'utiliser le mode débogage pour installer l'exemple d'application et vous pouvez obtenir le jeton lorsque vous l'installez pour la première fois.

Mais je n t why it can t imprimer le journal lorsque je l'installe.Peut-être être lié à un système mobile.

Et puis pourquoi je ne peux pas obtenir la notification. FirebaseMessagingService.onMessageReceived n'a pas appelé sendNotification

+0

si le journal est touché, il montrerait le jeton dans l'exemple d'application – Shubhank

+0

Non, l'exemple d'application dit .it n'affichera le jeton dans logcat si je frappe le bouton. Mais je ne trouve rien dans logcat. @ Shubhank – wyx

+0

décommenter ces lignes 'String refreshedToken = FirebaseInstanceId.getInstance(). GetToken(); Log.d (TAG, "Refreshed token:" + refreshedToken); ' – Gaurav

Répondre

13

Selon doc

Migrate a GCM client app to FCM

onTokenRefresh() 

seulement si appelé jeton InstanceID est mis à jour

Il sera cal l uniquement lors de la première installation d'une application sur votre appareil.

Je suggère donc désinstaller votre application s'il vous plaît manuellement et essayer de courir à nouveau

certainement vous obtiendrez TOKEN

+0

J'ai essayé de réinstaller l'application plusieurs fois. – wyx

+2

pas réinstaller, * désinstaller * manuellement puis exécuter le projet, – Gaurav

+0

décommenter ces lignes 'String refreshedToken = FirebaseInstanceId.getInstance(). GetToken(); Log.d (TAG, "Jeton actualisé:" + refreshedToken); ' – Gaurav

5

essayer. Pourquoi utilisez-vous RegistrationIntentService?

public class FirebaseInstanceIDService extends FirebaseInstanceIdService {  
    @Override 
    public void onTokenRefresh() {  
     String token = FirebaseInstanceId.getInstance().getToken();  
     registerToken(token); 
    } 

    private void registerToken(String token) { 

    } 
} 
6

Au lieu de cela:

// [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] 

Faites ceci:

// [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] 

Et une chose:

Vous devez appeler sendRegistrationToServer() méthode qui mettra à jour jeton sur le serveur, si vous êtes sendi ng push notifications du serveur.

MISE À JOUR:

nouveau jeton Firebase est généré (onTokenRefresh() est appelé) lorsque:

  • L'application supprime ID instance
  • L'application est restaurée sur un nouveau dispositif
  • L'utilisateur désinstalle/réinstalle l'application
  • L'utilisateur ars app données.
+0

je devais supprimer l'instance ID FirebaseInstanceId .getInstance(). deleteInstanceId() mais un ERREUR DE SERVICE, –

+0

Quelle erreur obtenez-vous exactement? – activesince93

+0

Vous devez exécuter 'FirebaseInstanceId.getInstance(). DeleteInstanceId()' dans un autre thread – rockar06

14

Informations importantes.

si Google Play service est suspendu ou non en cours d'exécution, puis retour fcm jeton = null

+0

Oui, mais cela arrive très souvent –

23

travail pour moi

Log.d("Firebase", "token "+ FirebaseInstanceId.getInstance().getToken()); 
4

En même temps, ne facturons pas oublier d'inclure dans votre fichier manifeste pour recevoir l'identificateur de jeton

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

Si utilisent une fonction auth de FB, vous pouvez utiliser ce jeton:

//------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(); 
         // ... 
       } 
      } 
     }); 

travail bien si l'utilisateur est connecté. getCurrentUser()

4

Cette ligne devrait vous permettre d'obtenir le jeton FCM Firebase.

String token = FirebaseInstanceId.getInstance().getToken(); 
Log.d("MYTAG", "This is your Firebase token", + token); 

Log.d pour l'imprimer sur le moniteur android.

-1
Settings.Secure.getString(getContentResolver(), 
        Settings.Secure.ANDROID_ID); 
+0

Cela ne fournit pas de réponse à la question. Une fois que vous avez suffisamment [réputation] (https://stackoverflow.com/help/whats-reputation) vous pourrez [commenter n'importe quel article] (https://stackoverflow.com/help/privileges/comment); Au lieu de cela, [fournissez des réponses qui ne nécessitent pas de précisions de la part du demandeur] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- je-fais-à la place). - [De l'avis] (/ review/low-quality-posts/18451948) – Aryan