0

私はFCMを使用してユーザートークンを取得しています。彼が最初にアプリケーションにログインすると、ユーザートークンはfirebaseデータベースに正常に保存されます。 トークンが更新されたときに何をすべきか不思議です。 私は何かを試しましたが、それが正しい方法であるかどうかはわかりません。私は、ログインアクティビティにトークンを渡し、firebase databseに保存しsharedPreferencessで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); 
    } 
    } 

。しかし、私はそれが "sendReistrationToServer"メソッドを起動するのではないかと恐れています。ユーザーがまだ登録しなければならないのでクラッシュするからです。私はそれが正しい方法であるかどうかはわかりません。 localBroadCastまたはIntentでトークンを渡した可能性があります。 か、トークンをリフレッシュするときにトークンを保存する方が良いでしょう。

答えて

1

共有設定で、ログインに保存することができますすることができますsave a boolean as logedIn in the preferencesだけでなく、そして中sendRegistrationToServerそれは、あなたがsave it in databaseをすることができますtrueある場合は、そのブール値を確認することができます。同様

この

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内のトークンの値がnullでない場合、これは最初のときに行います(ただし、ofcあなたが誤ってその飾りを拭かないように注意してください) –