Kri*_*gji 13 firebase flutter firebase-cloud-messaging
我在用:
flutter version 2.2
firebase_messaging: ^10.0.2
Run Code Online (Sandbox Code Playgroud)
我收到推送通知,然后单击它并打开应用程序。然后我没有看到 FirebaseMessaging.onMessageOpenedApp.listen
被调用(回调正在向我发送调试电子邮件,但我没有收到任何邮件)
我的问题是
(可选)如何使用 android studio debugur 模拟上面的情况来调试 android 应用程序,以便应用程序被杀死而不打开,然后通过通知打开
这里可能有什么问题?为什么该流没有被触发?我在 main.dart 中初始化它
PS:所有其他方法都可以正常工作,因此如果应用程序位于前台,则 onMessage.listen 效果很好。我需要处理 onMessageOpenedApp,以便我可以根据通知信息将用户重定向到正确的视图
Rus*_*inu 10
对于第一个问题:
要查看应用程序中的日志,您可以使用 Android Studio 或 IntelliJ 中的“Logcat”选项卡:
对于第二个问题:
如果您的应用程序被终止并且您希望收到通知点击回调,您应该使用:
FirebaseMessaging.instance.getInitialMessage().then((message) {
if (message != null) {
// DO YOUR THING HERE
}
});
Run Code Online (Sandbox Code Playgroud)
,因为根据Flutter团队对onMessageopenedApp函数的注释:
/// If your app is opened via a notification whilst the app is terminated,
/// see [getInitialMessage].
Run Code Online (Sandbox Code Playgroud)
我遇到这个问题已经有一段时间了,只是注意到firebase_messaging
插件提供了 3 种解决方法。
您可以在下面找到详细信息:
onMessage
将调用回调,这实际上是一个Stream<RemoteMessage>
,并且通知托盘中不会有任何通知。所以你可以像这样处理它FirebaseMessaging.onMessage.listen((message) {
// handle accordingly
});
Run Code Online (Sandbox Code Playgroud)
onMessageOpenedApp
回调将被调用,这也是一个,Stream<RemoteMessage>
因此您可以像这样处理它FirebaseMessaging.onMessageOpenedApp.listen((message) {
// handle accordingly
});
Run Code Online (Sandbox Code Playgroud)
Stream<RemoteMessage>
无法触发。因此,在这种情况下,firebase_messaging
为您提供的getInitialMessage
回调实际上是一个Future<RemoteMessage?>
. 你可以这样使用它:FirebaseMessaging.instance.getInitialMessage().then((message) {
if (message != null) {
// handle accordingly
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,getInitializeMessage
如果在文件中处理,则每次用户打开应用程序时都会触发回调main.dart
。所以可能message
是null,为了防止空指针异常我if(message != null)
在这里放置了条件
要在应用程序被杀死时查看日志,您是否尝试过flutter logs
命令,只需将设备插入 USB 调试并flutter logs
在终端中运行,所有print
消息都会显示在此处。
关于FirebaseMessaging.onMessageOpenedApp.listen
应用程序启动时被调用是因为您需要定义后台消息处理程序
/// Define a top-level named handler which background/terminated messages will
/// call.
///
/// To verify things are working, check out the native platform logs.
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
// If you're going to use other Firebase services in the background, such as Firestore,
// make sure you call `initializeApp` before using other Firebase services.
await Firebase.initializeApp();
print('Handling a background message ${message.messageId}');
}
Run Code Online (Sandbox Code Playgroud)
在此处查看完整的 firebase_messaging 示例main.dart
归档时间: |
|
查看次数: |
15495 次 |
最近记录: |