FCM - 更新令牌

问题描述:

我正在使用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传递令牌。 或者有更好的方法来保存令牌刷新。

可以将其保存在共享偏好,并在登录时,你可以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注意你不会无意中擦掉那个首字母) –