为什么 onTokenRefresh 没有触发?

Why is onTokenRefresh not firing?

我是 firebase 消息传递和 flutter 的新手。根据flutter firebase_messaging package docs, onTokenRefresh is fired when a new FCM token is generated. And according to Google's firebase docs 有两种场景会触发token生成:

  1. When a new token is generated on initial app startup
  2. Whenever an existing token is changed

这是我的应用程序 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 消息传递的新手,我有什么根本上的误解吗?谢谢。

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

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