[英]Firebase Flutter upgrade problem for firebase messaging
我已将 firebase 从^7.0.0
升级到^8.0.0-dev.15
,现在出现错误,我不确定如何修复。
这是我的遗留工作代码:
void initFirebase() {
_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, provisional: true));
_firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {});
_firebaseMessaging.getToken().then((String token) {
assert(token != null);
setState(() {
_notificationToken = token;
});
});
}
我收到以下错误:
lib/files/signin.dart:52:7: Error: No named parameter with the name 'onLaunch'.
onLaunch: (Map<String, dynamic> message) async {
^^^^^^^^
lib/files/signin.dart:62:24: Error: The getter 'onIosSettingsRegistered' isn't defined for the class 'FirebaseMessaging'.
- 'FirebaseMessaging' is from 'package:firebase_messaging/firebase_messaging.dart' ('/C:/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_messaging-8.0.0-dev.15/lib/firebase_messaging.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'onIosSettingsRegistered'.
_firebaseMessaging.onIosSettingsRegistered
^^^^^^^^^^^^^^^^^^^^^^^
现在,我开始按照官方文档修复代码,但无法完全正确,感谢您的帮助:
void initFirebase() {
FirebaseMessaging.onMessage.listen(
(RemoteMessage message) {
print("onMessage: $message");
});
FirebaseMessaging.onMessageOpenedApp.listen(
(RemoteMessage message) {
print("onMessageOpenedApp: $message");
});
NotificationSettings settings = messaging.requestPermission (
sound: true, badge: true, alert: true, provisional: true,
);
_firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {});
_firebaseMessaging.getToken().then((String token) {
assert(token != null);
setState(() {
_notificationToken = token;
});
});
}
对不起,我之前回答了另一个问题。 此外,我使用 flutter 和 firebase 的另一个主要版本。
所以我删除了我的答案并在这里打开了一个新帖子: Flutter 2.0 with Firebase Cloud Messaging: onMessage not called on Android
- 编辑
这个错误与您的问题有关吗? https://github.com/FirebaseExtended/flutterfire/issues/4054
问候,
乌韦
此旧版升级有一些重大更改。 我重现了你的问题。 onresume、onlaunch 等概念已被重新分类为前台消息和后台消息。
为了处理后台消息,在顶级 class 像你一样 main.dart 文件,实例化 firebase 消息。
Future<void>main() async{
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
runApp(MyApp());
}
在这种情况下创建一个方法 (_firebaseMessagingBackgroundHandler)。 (如果您要在后台使用其他 Firebase 服务,例如 Firestore,请不要忘记在使用其他 Firebase 服务之前调用initializeApp
。)。
背景
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
print("Handling a background message: ${message.messageId}");
print(message.data);
}
前台通知略有不同。 默认情况下,它们不会在屏幕上弹出。 您可以使用以下方法访问前台通知
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
print("Handling a foreground message ${message.notification.body}");
RemoteNotification notification = message.notification;
AndroidNotification android = message.notification?.android;
if (notification != null && android != null) {
flutterLocalNotificationsPlugin.show(
notification.hashCode,
notification.title,
notification.body,
NotificationDetails(
android: AndroidNotificationDetails(
channel.id,
channel.name,
channel.description,
icon: android?.smallIcon,
// other properties...
),
));
}
});
您可以使用 JSON 格式来访问消息。
onLaunch: 和 onResume:
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
print("app launched or resumed!!");
});
上面的两个代码将分别显示通知。 后台处理程序还涵盖终止应用程序的场景。
FirebaseMessaging.onMessageOpenedApp 返回一个 [Stream],当用户按下通过 FCM 显示的通知时会调用它。
PS:在使用像 PostMan 这样的非 Google 服务器时,另一个重大变化是需要 Oauth-2 Bearer 令牌(短暂的,可以从https://developers.google.com/oauthplayground获得服务帐户.
关于您的问题-->错误:没有名为“onLaunch”的命名参数。 onLaunch: (Map<String, dynamic> message) async { ^^^^^^^^. 您需要做的是在 _firebaseMessaging.configure(); 处替换您的代码; 此代码的一部分:
FirebaseMessaging.onMessage.listen(
(RemoteMessage message) async {
print('onMessage: $message');
_setMessage(message.data);
},
);
FirebaseMessaging.onMessage.listen(
(RemoteMessage message) async {
print('onLaunch: $message');
_setMessage(message.data);
},
);
FirebaseMessaging.onMessage.listen(
(RemoteMessage message) async {
print('onResume: $message');
_setMessage(message.data);
},
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.