首页 > 解决方案 > 为什么 onTokenRefresh 没有触发?

问题描述

我是 firebase 消息传递和颤振的新手。根据flutter firebase_messaging package docsonTokenRefresh在生成新的FCM令牌时触发。根据 Google 的 firebase文档,有两种情况会触发令牌生成:

  1. 在初始应用启动时生成新令牌时
  2. 每当更改现有令牌时

main这是我的应用程序功能的简化版本。每次执行后,我从模拟器中删除应用程序,显示的令牌确实发生了变化。尽管如此,onTokenRefresh它永远不会被解雇,如果我对文档的理解是正确的,它应该被解雇。

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Firebase.initializeApp();
  FirebaseMessaging.instance.onTokenRefresh.listen((String token) {
    print("New token: $token");
  });

  String token = await FirebaseMessaging.instance.getToken();
  print("Token: $token");
  //runApp(MyApp());
}

正如我所说,我是 Flutter、Dart 和 Firebase 消息传递的新手,有什么我从根本上误解的东西吗?谢谢。

标签: flutterdartfirebase-cloud-messaging

解决方案


所以我想我想通了。我注意到有时,onTokenRefresh确实会触发。而且我想知道它是否与如何在模拟器上启动颤振应用程序有关,因为在生成令牌和附加侦听器之间存在竞争条件。

为了让应用程序首次启动,我擦除了应用程序数据。不幸的是,这会导致颤振自动断开与应用程序的连接,这意味着我不会看到 print 语句的输出。因此,我没有尝试在生成令牌时进行打印,而是将onTokenRefresh侦听器中的值分配给变量。然后我用变量的值更新了一个文本小部件。如果onTokenRefresh应用程序数据先前已被擦除,则确实会在每次启动时触发。


推荐阅读