如何使用 firebase_messaging 包在 Flutter 中强制刷新 FCM 令牌

Pet*_*tro 5 firebase-security firebase-authentication flutter firebase-cloud-messaging

使用firebase_messaging: ^13.0.2我不确定如何强制刷新 FCM 令牌...而不注销用户。我注意到注销+重新登录时它会刷新。

根据谷歌文档,只有 3 种方法可以刷新令牌:

  • 该应用程序已在新设备上恢复
  • 用户卸载/重新安装应用程序
  • 用户清除应用程序数据。

https://firebase.google.com/docs/cloud-messaging/manage-tokens

我作为侦听器在启动时运行的内容:

FirebaseMessaging firebaseMessaging = FirebaseMessaging.instance;
tokenStream = firebaseMessaging.onTokenRefresh.listen((event) {
    if (currentUser != null) {
      print('token $event');
      currentUser!.fcmToken = event;
      FireStoreUtils.updateCurrentUserfcmToken(currentUser!);
    }
  });
Run Code Online (Sandbox Code Playgroud)

如何强制刷新此令牌?这不起作用并产生与运行删除之前相同的标记值...

  FirebaseMessaging.instance.deleteToken().then((value) =>
              FirebaseMessaging.instance.getToken().then((value) {
                currentUser!.fcmToken = value;
                FireStoreUtils.updateCurrentUserfcmToken(currentUser!);
              }));
Run Code Online (Sandbox Code Playgroud)

如果您想知道为什么我要刷新,请参阅我的其他帖子: IOS 通知停止工作,直到 FCM 令牌刷新

Kev*_*val 4

您是否尝试过使用此方法删除令牌

FirebaseMessaging.instance.deleteToken()
Run Code Online (Sandbox Code Playgroud)

如果这没有帮助,您可以尝试先删除令牌并请求新令牌,然后您将在 onTokenRefresh 中收到新令牌的新事件

FirebaseMessaging.instance.deleteToken().then((value) => FirebaseMessaging.instance.getToken());
Run Code Online (Sandbox Code Playgroud)

这肯定会生成我测试过的新令牌。