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

如何在Android中的FireBase数据库中存储FireBase云消息传递令牌?

梁丘洲
2023-03-14

我正在构建一个聊天应用程序,并使用FCM服务。

 String token1;       FirebaseMessaging.getInstance().getToken()
                                    .addOnCompleteListener(new OnCompleteListener<String>() {
                                        @Override
                                        public void onComplete(@NonNull Task<String> task) {
                                            if (!task.isSuccessful()) {
                                                Log.w("TTTTTTTTTTTT", "Fetching FCM registration token failed", task.getException());
                                                return;
                                            }

                                            // Get new FCM registration token
                                            token1 = task.getResult();  //this is the token

                                            // Log 
                                            Log.d("TTTTTTTTTTTT", token1);

                                        }
                                    });
signUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final String em = email.getText().toString();
                String pass = password.getText().toString();
                final String na = name.getText().toString();
                final String ci = city.getText().toString();
                if (em.equals("") || pass.equals("") || na.equals("") || ci.equals("")) {
                    name.setError("Enter your name");
                    password.setError("Enter your password");
                    city.setError("Enter your city");
                    email.setError("Enter your email");
                    Toast.makeText(ActivitySignup.this, "Please fill all the Fields", Toast.LENGTH_SHORT).show();
                } else {
                    progressBar.setVisibility(View.VISIBLE);

                    FirebaseAuth.getInstance().createUserWithEmailAndPassword(em, pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                progressBar.setVisibility(View.GONE);




FirebaseDatabase.getInstance().getReference().child("USERS").
child(task.getResult().getUser().getUid()).
setValue(new UserModel(em, na, ci,token1 ));  //Creating a new user and storing name ,email, city and token in database


startActivity(new Intent(ActivitySignup.this, YearChooseActivity.class).putExtra("activity_name", "ActivitySignUp")
.putExtra("timesVisited", timesVisited));

                                Toast.makeText(ActivitySignup.this, "Successfully Register User \n" + em, Toast.LENGTH_SHORT).show();
                            } else {
                                progressBar.setVisibility(View.GONE);

                                Toast.makeText(ActivitySignup.this, Objects.requireNonNull(Objects.requireNonNull(task.getException()).getMessage()).toString(), Toast.LENGTH_LONG).show();
                            }
                        }
                    });
                }
            }

        });

firebaseDatabase.getInstance().getReference().child(“users”).child(task.getResult().getUser().getUser()).setValue(new UserModel(email,name,city,token1));//创建新用户并存储名称、电子邮件,

问题是令牌没有存储在Firebase中。当我传递一个随机字符串作为令牌参数时,让我们说我传递“Kobe will be remember”作为参数

firebaseDatabase.getInstance().getReference().child(“users”).child(task.getResult().getUser().getUser()).setValue(新的UserModel(电子邮件、姓名、城市、“Kobe will be remember”));//创建新用户并存储名称、电子邮件,

然后它会很好地存储在数据库中。

当我与一个测试用户注册时,假设name=a,email=a@gmail.com,city=a,那么在实时数据库中不保存令牌。这就是实时数据库的外观。

"aBnS2fuXo2gmvcxzqy3z3mgFpiv2" : {
      "city" : "a",
      "email" : "a@gmail.com",
      "name" : "a"
    }

但是,当我将令牌值硬编码为随机字符串时,让我们使用firebasedatabase.getinstance().getreference().child(“users”).child(task.getresult().getuser().getuid()).setvalue(new UserModel(email,name,city,“Arnold”));

然后数据库看起来像

"aBnS2fuXo2gmvcxzqy3z3mgFpiv2" : {
      "city" : "a",
      "email" : "a@gmail.com",
      "name" : "a"
      "userToken" : "Arnold",

    }

对于通知,我需要对方的令牌,因此我如何将所有用户的令牌连同他们的其他凭据一起存储在firebase中?

共有1个答案

骆文彬
2023-03-14

你肯定不会把它们存放在同一个位置,这不是很好的安全措施。此外,用户可能会退出或更换他们的手机,您不想将通知发送到旧设备。

将FCM令牌保存在用户信息或子集合下。然后,如果您想使用该令牌向他们发送消息,只需使用他们的UID获取令牌并向他们发送消息。您可以使用云函数安全地做到这一点。

 类似资料:
  • 我试图从C#中的服务器发送推送通知,我使用了正确的注册令牌和API密钥,但仍然得到以下响应。 我按照这个网址来实现这个解决方案通过C#使用FCM(Firebase云消息传递)发送推送到Android 目前,我正在尝试向单个设备发送通知,但也希望同时向多个设备发送通知,我使用了url中给出的,但它不起作用。如果我必须同时向多个设备发送通知,我该怎么办? 这是我的密码

  • 我也在尝试使用node。js和firebase管理员向iOS设备发送推送通知。然而,我遇到了这个错误: 错误发送消息:{错误:请求包含一个无效的参数。在Firebase MessagingError。错误(本机)在Firebase MessagingError。Firebase Error[作为构造函数](/user_code/node_modules/fire base-admin/lib/ut

  • 在我们的项目中,我们使用Firebase云消息传递来进行推送通知,我们遇到了消息重复的问题。我们过程如下所示: xamarin.firebase.ios.CloudMessaging 3.1.2 xamarin.firebase.ios.instanceID 3.2.1 xamarin.firebase.ios.core 5.1.3 订阅用户主题推荐 发送主题订阅者请求的通知 null 但是,当用

  • 我必须在SpringJava中为多层架构制作一个RESTAPI,其中需要为Firebase云消息传递(FCM)构建DAO、控制器和服务管理器,以向android应用程序发送推送通知消息,但我无法在Java中配置服务器以向设备发送通知。我怎么能?

  • 我正在使用Firebase消息向iPhone应用程序的用户发送通知。为了不在客户端公开应用程序的消息服务器密钥,我正在使用Firebase的云功能向特定主题发送通知。在此之前,我在应用程序的客户端执行此操作,并能够通过制作以下格式的JSON来设置消息的优先级: 现在在我的云函数中,我试图制作一个相同通用格式的有效载荷,但是一直遇到错误: 以下是我的有效负载格式化和发送: 有谁知道我该如何设定优先级

  • 我有客户端-服务器应用程序,我开发了Xamarin移动客户端,我使用FCM进行推送通知,当我登录时,我将令牌发送到服务器,在那里我将其绑定到数据库中的帐户,但当我注销移动应用程序时我该怎么办,服务器可能没有意识到这一点,并将继续发送通知,我必须更新客户端中的令牌,但这没有实现,也不正确,我能做什么? 这里描述了一个类似的问题。Firebase云消息刷新令牌