FirebaseInstanceId.getInstance().getToken() 弃用了如何在数据库中保存令牌

FirebaseInstanceId.getInstance().getToken() deprecated how to save token in DB

我不知道如何将新的 FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener 实现到我自己的代码中,这样我就可以检索令牌并将其保存到数据库中以使用 FCM 并识别每个用户。

实际上我有以下代码:

if (task.isSuccessful()) {
final String deviceToken = FirebaseInstanceId.getInstance().getToken();

Map<String, Object> createUser = new HashMap<>();
                                createUser.put("name", name);
                                createUser.put("email", email);
                                createUser.put("device_token", deviceToken);

Ref.child("Users").child(task.getResult().getUser().getUid()).updateChildren(createUser);

根据实际的firebase说明,我应该修改如下:

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(MainActivity.this, new OnSuccessListener<InstanceIdResult>(){
    @Override
    public void onSuccess(InstanceIdResult instanceIdResult) {
    String deviceToken = instanceIdResult.getToken();
    Log.e("newToken", deviceToken);
    }
});

Map<String, Object> createUser = new HashMap<>();
                                createUser.put("name", name);
                                createUser.put("email", email);
                                createUser.put("device_token", deviceToken);

Ref.child("Users").child(task.getResult().getUser().getUid()).updateChildren(createUser);

但我不知道如何从该方法中获取 deviceToken 字符串,我应该将它保存到共享首选项然后从那里检索它吗?

因为如果我想将 "deviceToken" 声明为全局,则不允许,因为它需要声明为最终的。

谢谢!

您应该在 getInstanceId() 调用的 onSuccess 回调中保存令牌:

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(MainActivity.this, new OnSuccessListener<InstanceIdResult>(){
  @Override
  public void onSuccess(InstanceIdResult instanceIdResult) {
    String deviceToken = instanceIdResult.getToken();
    Log.e("newToken", deviceToken);

    ... save the token to your database here
  }
});

已弃用, 在 gradle 更新实施 'com.google.firebase:firebase-messaging:21.0.0' 使用以下代码:

FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener<String>() {
            @Override
            public void onComplete(@NonNull Task<String> task) {
                if (!task.isSuccessful()) {
                    return;
                }
                // Get new FCM registration token
                String token= task.getResult();
            }
        });