【问题标题】:FireStore when adding FCM token to User doc, deletes and doesn't store UserId将 FCM 令牌添加到用户文档时,FireStore 删除并且不存储 UserId
【发布时间】:2022-11-17 07:54:42
【问题描述】:

这是我第一次使用 Firestore Cloud Messaging,我想为每个特定设备获取 FCM 令牌。为了快速开发,我添加了 firebase_auth_ui 包,它基本上外包了 firebase 身份验证登录和注册流程。为了捕获用户的 ID 并将其存储在他们的文档中,我使用了一个运行良好的简单函数:并完成了工作:

Future<void> addUserDataToFireStore() async {
  CollectionReference users = FirebaseFirestore.instance.collection('users');
  String uid = FirebaseAuth.instance.currentUser!.uid;

  users.doc(uid).set({
    'userId': uid,
    // 'displayName': currentUser!.displayName!,
  });
}

现在,出于某种原因,当我尝试访问注册令牌时,我的 userId 被删除了。当我尝试将令牌添加到同一个用户文档时,userId 被删除并且 fcm 令牌保留。我按如下方式生成令牌:

generateDeviceToken() async {
String? fcmToken = await FirebaseMessaging.instance.getToken();
final userId = FirebaseAuth.instance.currentUser!.uid;
await FirebaseFirestore.instance
     .collection('users')
      .doc(userId)
       .set({'fcmToken': fcmToken});
 }

问题是当我尝试同时调用它们时。我不能得到两个。该文档将填充 UserId 或 FCM,但现在两者都有。这就是当我尝试同时调用两者时发生的情况,

也许我应该制作一个更新 fcm 令牌而不是每次都设置它的方法?

【问题讨论】:

    标签: flutter firebase-cloud-messaging


    【解决方案1】:

    当您使用“set”时,整个文档只保存一个值。使用“更新”更新文档并添加您的令牌而不删除其他内容。

    generateDeviceToken() async {
    String? fcmToken = await FirebaseMessaging.instance.getToken();
    final userId = FirebaseAuth.instance.currentUser!.uid;
    await FirebaseFirestore.instance
         .collection('users')
          .doc(userId)
           .update({'fcmToken': fcmToken});
     }
    
    Future<void> addUserDataToFireStore() async {
      CollectionReference users = FirebaseFirestore.instance.collection('users');
      String uid = FirebaseAuth.instance.currentUser!.uid;
    
      users.doc(uid).update({
        'userId': uid,
        // 'displayName': currentUser!.displayName!,
      });
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2023-02-06
      相关资源
      最近更新 更多