[英]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.