flutter - 为什么 onTokenRefresh 没有触发?
问题描述
我是 firebase 消息传递和颤振的新手。根据flutter firebase_messaging package docs,onTokenRefresh
在生成新的FCM令牌时触发。根据 Google 的 firebase文档,有两种情况会触发令牌生成:
- 在初始应用启动时生成新令牌时
- 每当更改现有令牌时
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
确实会触发。而且我想知道它是否与如何在模拟器上启动颤振应用程序有关,因为在生成令牌和附加侦听器之间存在竞争条件。
为了让应用程序首次启动,我擦除了应用程序数据。不幸的是,这会导致颤振自动断开与应用程序的连接,这意味着我不会看到 print 语句的输出。因此,我没有尝试在生成令牌时进行打印,而是将onTokenRefresh
侦听器中的值分配给变量。然后我用变量的值更新了一个文本小部件。如果onTokenRefresh
应用程序数据先前已被擦除,则确实会在每次启动时触发。
推荐阅读
- python - 使用python的多命令
- javascript - vue 中最奇怪的行为 - 注释代码正在运行
- bash - 将文本文件中的 tcpdump 输出写入单行
- spring-boot - 将 OAuth2 登录附加到 Spring Boot 应用程序中的现有用户
- java - Java 正则表达式,替换某些字符,除了
- ios - 无法在 xib 中添加约束
- java - 为什么动作监听器没有触发?
- blazor - 客户端 blazor 从服务器获取数据的方法是什么?
- regex - 使用 GREP 在 Indesign 中将数字格式化为货币格式
- c# - 我在 Unity 中收到 2 条错误消息,无法弄清楚如何修复它