当前位置: 首页 > 知识库问答 >
问题:

FirebaseInstanceId。getInstance()。getToken()不赞成在DB中保存令牌

锺离浩慨
2023-03-14

我不想知道如何实现新的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”声明为全局,它将不被允许,因为它需要被声明为最终版本。

谢谢

共有2个答案

龚跃
2023-03-14

您应该在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
  }
});
裴曜灿
2023-03-14

在gradle update的com上,它已经被弃用了。谷歌。firebase:firebase消息: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();
            }
        });
 类似资料:
  • 我可以问一个关于FirebaseInstanceId的问题吗?我试图注册一个账户页面,但什么都没有发生或显示,我收到了一条错误消息:

  • 原始关闭原因未解决 既然getToken()已弃用,我想知道获得Firebase令牌以发送消息推送的正确方法是什么。

  • Android Studio SDK 30 Gradle 7 我可以收到通知。 但无法获取设备令牌:( Android不让我使用它 我有我的androidManifest 内置。gradle我有 在模块级 在创建的类中 我有 但这一点从未触发,日志猫从未显示“newToken”:( 有人知道如何解决这个问题吗?

  • 问题内容: 为什么在JavaScript中不推荐使用该属性? 它是在JavaScript中添加然后弃用的,但ECMAScript完全省略了它。某些浏览器(Mozilla,IE)一直都支持该浏览器,并且在地图上没有删除支持的计划。其他浏览器(Safari,Opera)已对此提供支持,但较旧的浏览器支持不可靠。 是否有充分的理由将这种有价值的功能置于边缘? (或者,是否有更好的方法来抓住调用函数的句柄

  • 我有一个Android应用程序,用户必须登录才能使用它,当一个请求(在PHP中)需要一个令牌时,问题是,我需要将令牌保存在Android的共享首选项中,我知道有办法加密它,但是如果有人会打开应用程序,看到源代码,他们会知道它是如何加密的。 如何安全保存令牌? 提前感谢。

  • 当单击我的时,我试图弹出一个对话框。问题是,当我试图用实例化我的对象时,下面会出现令人毛骨悚然的红色下划线。 盘旋在它上面,它说