-1

我已經爲了發起MyFirebaseInstanseIdService得到token,直接我會告訴你的代碼:MyFirebaseInstanceIdService沒有調用爲什麼?

@Override 
    public void onTokenRefresh() { 
     super.onTokenRefresh(); 
     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 


     storeRegIdInPref(refreshedToken); 


     sendRegistrationToServer(refreshedToken); 


     Intent registrationComplete = new Intent(Config.REGISTRATION_COMPLETE); 
     registrationComplete.putExtra("token", refreshedToken); 
     LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete); 
    } 

    private void sendRegistrationToServer(final String token) { 
     // sending gcm token to server 
     Log.e(TAG, "sendRegistrationToServer: " + token); 
    } 

    private void storeRegIdInPref(String token) { 
     SharedPreferences pref = getApplicationContext().getSharedPreferences(Config.SHARED_PREF, 0); 
     SharedPreferences.Editor editor = pref.edit(); 
     editor.putString("regId", token); 
     editor.commit(); 
    } 

我的manifest.xml:

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

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

我就先通過廣播令牌我也活動與共享prefrences,但似乎這個類沒有援引。

在我log我看到那些臺詞:

D/FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization. 
D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization. 

I/FirebaseInitProvider: FirebaseApp initialization successful 
+3

正如AL在他的回答中所說:您的代幣可能已經創建好了,所以'onTokenRefresh'不會被調用。卸載/重新安裝應用程序以強制刷新令牌,或[獲取當前令牌](https://firebase.google.com/docs/cloud-messaging/android/client#retrieve-the-current-registration-token)在主視圖的'onCreate'中放入'FirebaseInstanceId.getInstance()。getToken();'。 –

+1

@FrankvanPuffelen我以前遇到過這個問題,就像你說的,只是**卸載/重新安裝**。 – Ibrahim

+2

這確實有效,在開發過程中很好,大多數開發人員遇到這種情況。但是,如果您已經發布了該應用,則不能要求用戶也這樣做。因此,您需要處理兩種情況:在主視圖中讀取標記FirebaseInstanceId.getInstance()。getToken()並監視onTokenRefresh()。 –

回答

3

onTokenRefresh()方法在當前令牌過期只能被調用。當前令牌可能由於以下原因屆滿:

  • 應用刪除實例ID

  • 應用程序是一個新的設備

  • 用戶卸載上還原/重新安裝該應用

  • 用戶清除應用數據

還有一種情況,您第一次撥打電話getToken()時,可能會返回null值,您應該預計從哪裏觸發onTokenRefresh()

因此,您應該在您的初始活動上致電getToken()以生成令牌。

+0

感謝您的迴應,它卸載後的應用程序工作。 –

+0

@ArduinoAndroid不客氣。如果您認爲這完全回答了您的問題,您可以點擊帖子左側的複選標記將其標記爲已接受。乾杯! :) –

相關問題