Firebase onMessage回调函数未触发
这是我的密码:Firebase onMessage回调函数未触发,firebase,flutter,dart,push-notification,firebase-cloud-messaging,Firebase,Flutter,Dart,Push Notification,Firebase Cloud Messaging,这是我的密码: initializeApp() async { FirebaseMessaging firebaseMessaging = FirebaseMessaging(); firebaseMessaging.configure( onMessage: (Map<String, dynamic> message) async { print("----->onMessage: $message"); },
initializeApp() async {
FirebaseMessaging firebaseMessaging = FirebaseMessaging();
firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("----->onMessage: $message");
},
onLaunch: (Map<String, dynamic> message) async {
print("----->onLaunch: $message");
},
onResume: (Map<String, dynamic> message) async {
print("----->onResume: $message");
},
);
firebaseMessaging.requestNotificationPermissions(const IosNotificationSettings(sound: true, badge: true, alert: true));
}
这里也有问题,但没有回答。将此代码添加到您的AndroidManifest.xml中
<intent-filter>
<action android:name="FLUTTER_NOTIFICATION_CLICK"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
所以这就是斯克雷纳里奥:
我有2个应用程序:在这两个应用程序上,我都测试过有状态小部件处于活动屏幕:
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
class FCMTestPage extends StatefulWidget {
static String name = '/test-fcm';
@override
_FCMTestPageState createState() => _FCMTestPageState();
}
class _FCMTestPageState extends State<FCMTestPage> {
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
final List<Message> messages = [];
String token;
@override
void initState() {
super.initState();
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
final notification = message['notification'];
setState(() {
messages.add(Message(
title: notification['title'], body: notification['body']));
});
},
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
final notification = message['data'];
setState(() {
messages.add(Message(
title: '${notification['title']}',
body: '${notification['body']}',
));
});
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true));
}
@override
Widget build(BuildContext context) {
// getToken();
return Scaffold(
body: ListView(
children: messages.map(buildMessage).toList(),
),
);
}
Widget buildMessage(Message message) => ListTile(
title: Text(message.title),
subtitle: Text(message.body),
);
getToken() async {
token = await _firebaseMessaging.getToken();
print('********************************************');
print(token);
print('********************************************');
}
}
@immutable
class Message {
final String title;
final String body;
const Message({
@required this.title,
@required this.body,
});
}
*删除了一些不相关的行
有趣的是,相同的代码适用于一个应用程序,而不适用于另一个应用程序。在同一个应用程序中,相同的代码在有状态小部件中工作,而在顶级函数中不工作(我尝试在类中封装,使函数为静态,但没有帮助)
我是如何解决的:
然后,我需要快速解决问题,并决定将我的一个屏幕转换为有状态,并将逻辑迁移到此屏幕。
可能与垃圾收集有关。不过我有这个
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
class FCMTestPage extends StatefulWidget {
static String name = '/test-fcm';
@override
_FCMTestPageState createState() => _FCMTestPageState();
}
class _FCMTestPageState extends State<FCMTestPage> {
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
final List<Message> messages = [];
String token;
@override
void initState() {
super.initState();
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
final notification = message['notification'];
setState(() {
messages.add(Message(
title: notification['title'], body: notification['body']));
});
},
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
final notification = message['data'];
setState(() {
messages.add(Message(
title: '${notification['title']}',
body: '${notification['body']}',
));
});
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true));
}
@override
Widget build(BuildContext context) {
// getToken();
return Scaffold(
body: ListView(
children: messages.map(buildMessage).toList(),
),
);
}
Widget buildMessage(Message message) => ListTile(
title: Text(message.title),
subtitle: Text(message.body),
);
getToken() async {
token = await _firebaseMessaging.getToken();
print('********************************************');
print(token);
print('********************************************');
}
}
@immutable
class Message {
final String title;
final String body;
const Message({
@required this.title,
@required this.body,
});
}
initializeApp() async {
FirebaseMessaging firebaseMessaging = FirebaseMessaging();
firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
},
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
},
);
firebaseMessaging.requestNotificationPermissions(const IosNotificationSettings(sound: true, badge: true, alert: true));
}