0

我正在使用FCM來獲取用戶令牌。當他第一次登錄到應用程序時,我成功地將用戶令牌保存在Firebase數據庫中。 我只是想知道當令牌刷新時該怎麼做。 我嘗試了一些東西,但我不確定它是否是正確的方式。FCM - 更新令牌

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { 

@Override 
public void onTokenRefresh() { 
    super.onTokenRefresh(); 

    String token = FirebaseInstanceId.getInstance().getToken(); 
    SharedPreferences prefsToken = getSharedPreferences(Params.IDToken, MODE_PRIVATE); 
    SharedPreferences.Editor edit = prefsToken.edit(); 
    edit.putString("token",token); 
    edit.commit(); 

    sendRegistrationToServer(token); 
} 

private void sendRegistrationToServer(String token) { 
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference(Params.USERS).child(user.getUid()).child("token") 
      .setValue(token); 
    } 
    } 

在sharedPreferencess我通過令牌登錄活動,並將其保存在火力DATABSE。但是,恐怕它會激發「sendReistrationToServer」方法,因爲它會因爲用戶仍然需要註冊而崩潰。我不確定這是否是正確的方法。 我想可能是通過localBroadCast或Intent傳遞令牌。 或者有更好的方法來保存令牌刷新。

回答

1

可以將其保存在共享偏好,並在登錄時,你可以save a boolean as logedIn in the preferences的歡迎,並在sendRegistrationToServer可以檢查布爾值,如果是true那麼你可以save it in database

喜歡這個

private void sendRegistrationToServer(String token) { 
if(getSharedPreferences(Params.IDToken, MODE_PRIVATE).get("logedIn",false)){ 
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

DatabaseReference ref = FirebaseDatabase.getInstance().getReference(Params.USERS).child(user.getUid()).child("token") 
     .setValue(token); 
    } 
    } 
+0

是啊,只是保存記錄的IN-任何用戶令牌是一個地址到一個設備上的應用程序在設備上的應用程序安裝,而不是用戶的個人資料,讓你可以在同一個應用程序中爲多個用戶使用它(不是人們曾經這樣做) –

+0

在第一次執行此操作,即如果您在SharedPrefs中的令牌值不爲空,那麼它不是第一次(但ofc注意你不會無意中擦掉那個首字母) –