【问题标题】:FirebaseInstanceId.getInstance().getToken() deprecated how to save token in DBFirebaseInstanceId.getInstance().getToken() 弃用了如何在数据库中保存令牌
【发布时间】:2019-12-27 22:55:17
【问题描述】:

我不知道如何将新的 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”声明为全局,则不允许,因为它需要声明为 final。

谢谢!

【问题讨论】:

  • 令牌首次可用时在 OnSuccessListener 回调中执行数据库操作。
  • 看看这个https://stackoverflow.com/a/65088085/7436566

标签: android firebase firebase-cloud-messaging


【解决方案1】:

已弃用, 在 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();
            }
        });

【讨论】:

    【解决方案2】:

    您应该从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
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2019-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      相关资源
      最近更新 更多