2016-06-13 76 views
32

È il mio primo utilizzo di FCM.Firebase (FCM) come ottenere token

scarica un campione dal firebase/quickstart-android e installare il FCM Quickstart.But I `t ottenere qualsiasi token dal registro anche premere il pulsante LOG GETTONE in app.

Quindi provo a inviare un messaggio con la console Firebase e ho impostato il target sul nome del pacchetto dell'app. Ho ricevuto un messaggio in arrivo.

Voglio sapere che è possibile utilizzare FCM? GCM è tutto ok.

Soluzione:

Perché io non sono uno sviluppatore Android, solo un backend developer.So mi ci vuole un po 'di tempo per risolvere it.In mio parere, là `alcuni bug in app campione.

enter image description here

Codice:

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

Aggiungi questo nel MainActivity.java.

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

Dopo fare in precedenza, è possibile ottenere il token in logcat.But finalmente trovo un modo convenienteper ottenerlo. Basta usare la modalità di debug per installare l'app di esempio ed è possibile ottenere il token quando lo si installa per la prima volta.

Ma io indico t why it can t stampare il registro quando lo installo. Potrebbe essere correlato al sistema mobile.

E quindi perché non riesco a ottenere la notifica. FirebaseMessagingService.onMessageReceived non ha chiamato sendNotification

+0

se il log viene colpito, sarebbe mostrare il token con esso in app campione – Shubhank

+0

No, l'applicazione del campione ha detto .It mostrare solo il gettone nel logcat se mi ha colpito il tasto. Ma non trovo nulla in logcat. @ Shubhank – wyx

+0

decommenta questa riga 'String refreshedToken = FirebaseInstanceId.getInstance(). GetToken(); Log.d (TAG, "Token aggiornato:" + refreshedToken); ' – Gaurav

risposta

13

Secondo doc

Migrate a GCM client app to FCM

onTokenRefresh() 

chiamato solo se InstanceID token viene aggiornato

ti cal l solo al primo momento quando si installa un'app sul dispositivo.

quindi suggerisco si prega di disinstallare la vostra applicazione manualmente e provare a eseguire nuovamente

sicuramente si otterrà GETTONE

+0

Ho provato a reinstallare l'app molte volte. – wyx

+2

non reinstallare, * disinstallare * manualmente, quindi eseguire il progetto, – Gaurav

+0

decommentare questa riga 'String refreshedToken = FirebaseInstanceId.getInstance(). GetToken(); Log.d (TAG, "Token aggiornato:" + refreshedToken); ' – Gaurav

5

Prova questa. Perché stai usando RegistrationIntentService?

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

    private void registerToken(String token) { 

    } 
} 
6

Invece di questo:

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

fare questo:

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

E ancora una cosa:

È necessario chiamare sendRegistrationToServer() metodo che aggiornerà gettone sul server, se si è inviati ng push notifiche dal server.

UPDATE: viene generato

Nuovo Firebase gettone (onTokenRefresh() si chiama) quando:

  • L'applicazione elimina ID istanza
  • L'applicazione viene ripristinato su un nuovo dispositivo
  • L'utente disinstalla/reinstalla l'app
  • L'utente cle ars dati delle app.
+0

ho dovuto eliminare ID istanza FirebaseInstanceId .getInstance(). deleteInstanceId() ma ha ricevuto un ERRORE DI SERVIZIO, –

+0

Che errore stai ottenendo esattamente? – activesince93

+0

È necessario eseguire 'FirebaseInstanceId.getInstance(). DeleteInstanceId()' in un'altra discussione – rockar06

14

Informazioni importanti.

se il servizio Google Play appeso o non è in esecuzione, poi FCM ritorno di token = null

+0

Sì, ma ciò accade molto spesso –

23

lavoro per me

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

Allo stesso tempo, don Non dimenticare di includere questo il file manifest per ricevere l'ID del token

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

Se si utilizza una funzione di autenticazione di FB, si può prendere di token utilizza questo:

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

lavoro bene se l'utente è registrato. getCurrentUser()

4

Questa riga dovrebbe ottenere il token FCM firebase.

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

Do Log.d per stamparlo sul monitor Android.

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

Ciò non fornisce una risposta alla domanda. Una volta che hai [reputazione] sufficiente (https://stackoverflow.com/help/whats-reputation) sarai in grado di [commentare qualsiasi post] (https://stackoverflow.com/help/privileges/comment); invece [fornisci risposte che non richiedono chiarimenti da parte del richiedente] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-, invece). - [Dalla recensione] (/ recensione/post di bassa qualità/18451948) – Aryan

Problemi correlati