1

我正在开发一个推送通知应用程序,您是否有同样的问题:

我的应用程序生成一个 FCM 设备令牌并将其存储在云数据库中,因此我可以通过 FCM 向设备发送通知消息,我的数据库表如下所示:

用户名 | device_token

玛丽 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // token1,来自 Mary 的第一个设备

约翰 | yyyyyyyyyyyyyyyyyyyyyyyyyyy

玛丽 | zzzzzzzzzzzzzzzzzzzzzzzzzzzz // token2,来自 Mary 的第二个设备 Mary | kkkkkkkkkkkkkkkkkkkkkkkkkkkk // 令牌,来自玛丽的第一台设备.......

在 Mary 从她的第一台设备上重新安装此应用程序后,生成了一个新的设备令牌,并将其与 token3 一起存储。

如何删除过期的设备令牌token1,我得到的唯一信息可能只有一对设备令牌和一个帐户名。

那么在这种情况下如何管理您的设备呢?

4

2 回答 2

2

如果“玛丽”每次在您的应用程序中都使用相同的帐户登录,即使是新手机或重新安装的应用程序,为什么要在数据库中创建一个新的令牌字段?为什么不总是在同一个令牌字段中写入,以便您始终可以访问该字段。这也将仅向您的用户当前实际使用的手机发送通知。因此,每次用户启动应用程序检查令牌时,如果不相等,则将新令牌写入数据库中。并从服务器端获取这些令牌并发送通知。

我错过了什么吗?


为此,我建议您在应用程序的登录和注册过程中使用 FirebaseAuth。然后使用 generateuid作为实时数据库中用户的字段 ID。你可以uidFirebaseAuth.getInstance().getCurrentUser().getUid(). uid因此,无论她使用什么手机,您的用户 Mary 将始终拥有相同的手机。始终使用它在数据库中找到用户uid并覆盖现有的 Firebase 令牌。这也意味着您的“用户”将不是数据库中的单行字段,而是更复杂和更好的用户表示。您可以为此使用模型类,例如:

public class User {

    public long id = 0;
    public long account_id = 0;
    public String account_name = "";
    public String first_name = "";
    public String last_name = "";
    public String email_address = "";
    public String password = "";

    public User() {

    }

}

如何配置它取决于您。但是使用模型也可以帮助您发布和检索数据,如下所示:

创建新用户:

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(user);

从实时数据库中检索数据:

DatabaseReference database = FirebaseDatabase.getInstance().getReference();
DatabaseReference databaseUsers = database.child("users");
User myUser = null;
Query usersQuery = databaseUsers.orderByChild("username").equalTo(uid); //you can use any value to order as you want, or you don't have to, there is many options for this query
usersQuery.addListenerForSingleValueEvent(new ValueEventListener() {
     @Override
     public void onDataChanged(@NonNull DataSnapshot snapshot) {
         try {
             for (DataSnapshot user : snapshot.getChildren()) {
                 myUser = user.getValue(User.class);
             }
         } catch (Exception e) {
             e.printStackTrace();
      }
      @Override
      public void onCancelled(@NonNull DatabaseError error) {
      }
});
于 2021-02-03T08:19:11.203 回答
0

受此启发:Firebase Cloud Messaging - 管理注册令牌

生成令牌时:如果 Mary 登录:

  1. 将设备添加到“Mary”设备组。
  2. 存储设备组 ID 并将设备组 ID 连接到数据库中“Mary”的配置文件。

如果应用服务器需要向 Mary 发送通知,只需发送到 Device Group,好处是您无需检查设备令牌是否有效,Firebase Cloud Messaging 会丢弃无效的设备令牌。

如果没有人登录:什么都不做或只存储设备令牌。

于 2021-02-03T10:19:16.080 回答