firebaseMessaging 配置
firebaseMessaging configure
我知道 firebaseMessaging.configure 已被弃用,我正在尝试切换到新格式
因为 OnMessage、OnLaunch 和 OnResume 都在同一条线上,所以我一直在努力实现这一目标
我遇到了一些参考资料,但不确定如何像上一个那样将三者合二为一,不确定我是否应该这样做
前后对比图
void configureFirebase(FirebaseMessaging _firebaseMessaging) {
try {
_firebaseMessaging.configure(
onMessage: notificationOnMessage,
onLaunch: notificationOnLaunch,
onResume: notificationOnResume,
/* FirebaseMessaging.onMessage.listen((RemoteMessage message) {
RemoteNotification notification = message.notification;
AndroidNotification android = message.notification?.android;
});
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
print('A new onMessageOpenedApp event was published!');
Navigator.pushNamed(context, '/message',
arguments: MessageArguments(message, true));
});
*/
} catch (e) {
print(CustomTrace(StackTrace.current, message: e));
print(CustomTrace(StackTrace.current, message: 'Error Config Firebase'));
}
}
Future notificationOnResume(Map<String, dynamic> message) async {
print(CustomTrace(StackTrace.current, message: message['data']['id']));
try {
if (message['data']['id'] == "orders") {
settingRepo.navigatorKey.currentState
.pushReplacementNamed('/Pages', arguments: 2);
} else if (message['data']['id'] == "messages") {
settingRepo.navigatorKey.currentState
.pushReplacementNamed('/Pages', arguments: 3);
}
} catch (e) {
print(CustomTrace(StackTrace.current, message: e));
}
}
Future notificationOnLaunch(Map<String, dynamic> message) async {
String messageId = await settingRepo.getMessageId();
try {
if (messageId != message['google.message_id']) {
await settingRepo.saveMessageId(message['google.message_id']);
if (message['data']['id'] == "orders") {
settingRepo.navigatorKey.currentState
.pushReplacementNamed('/Pages', arguments: 2);
} else if (message['data']['id'] == "messages") {
settingRepo.navigatorKey.currentState
.pushReplacementNamed('/Pages', arguments: 3);
}
}
} catch (e) {
print(CustomTrace(StackTrace.current, message: e));
}
}
Future notificationOnMessage(Map<String, dynamic> message) async {
Fluttertoast.showToast(
msg: message['notification']['title'],
toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.TOP,
timeInSecForIosWeb: 6,
);
}
}
将 try 块中的代码更新为以下内容:
FirebaseMessaging.instance.getInitialMessage().then((message) {
if (message != null) {
return notificationOnLaunch(message.data);
}
});
FirebaseMessaging.onMessage
.listen((RemoteMessage message) => notificationOnMessage(message.data));
FirebaseMessaging.onMessageOpenedApp
.listen((RemoteMessage message) => notificationOnResume(message.data));
解释:
- FirebaseMessaging.instance.getInitialMessage() returns a RemoteMessage 对象,当应用程序通过 FCM 通知从终止状态打开时。这将替换
onLaunch
.
- FirebaseMessage.onMessage “returns
RemoteMessage
] 的 Stream,当 Flutter 实例在前台时接收到传入的 FCM 负载时调用。”这将替换 onMessage
.
- FirebaseMessage.onMessageOpenedApp "returns
RemoteMessage
] 的 Stream,当用户按下通过 FCM 显示的通知消息时调用。
如果应用程序从后台状态(未终止)打开,将发送 Stream 事件。”这将替换 onResume
.
我知道 firebaseMessaging.configure 已被弃用,我正在尝试切换到新格式 因为 OnMessage、OnLaunch 和 OnResume 都在同一条线上,所以我一直在努力实现这一目标 我遇到了一些参考资料,但不确定如何像上一个那样将三者合二为一,不确定我是否应该这样做
前后对比图
void configureFirebase(FirebaseMessaging _firebaseMessaging) {
try {
_firebaseMessaging.configure(
onMessage: notificationOnMessage,
onLaunch: notificationOnLaunch,
onResume: notificationOnResume,
/* FirebaseMessaging.onMessage.listen((RemoteMessage message) {
RemoteNotification notification = message.notification;
AndroidNotification android = message.notification?.android;
});
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
print('A new onMessageOpenedApp event was published!');
Navigator.pushNamed(context, '/message',
arguments: MessageArguments(message, true));
});
*/
} catch (e) {
print(CustomTrace(StackTrace.current, message: e));
print(CustomTrace(StackTrace.current, message: 'Error Config Firebase'));
}
}
Future notificationOnResume(Map<String, dynamic> message) async {
print(CustomTrace(StackTrace.current, message: message['data']['id']));
try {
if (message['data']['id'] == "orders") {
settingRepo.navigatorKey.currentState
.pushReplacementNamed('/Pages', arguments: 2);
} else if (message['data']['id'] == "messages") {
settingRepo.navigatorKey.currentState
.pushReplacementNamed('/Pages', arguments: 3);
}
} catch (e) {
print(CustomTrace(StackTrace.current, message: e));
}
}
Future notificationOnLaunch(Map<String, dynamic> message) async {
String messageId = await settingRepo.getMessageId();
try {
if (messageId != message['google.message_id']) {
await settingRepo.saveMessageId(message['google.message_id']);
if (message['data']['id'] == "orders") {
settingRepo.navigatorKey.currentState
.pushReplacementNamed('/Pages', arguments: 2);
} else if (message['data']['id'] == "messages") {
settingRepo.navigatorKey.currentState
.pushReplacementNamed('/Pages', arguments: 3);
}
}
} catch (e) {
print(CustomTrace(StackTrace.current, message: e));
}
}
Future notificationOnMessage(Map<String, dynamic> message) async {
Fluttertoast.showToast(
msg: message['notification']['title'],
toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.TOP,
timeInSecForIosWeb: 6,
);
}
}
将 try 块中的代码更新为以下内容:
FirebaseMessaging.instance.getInitialMessage().then((message) {
if (message != null) {
return notificationOnLaunch(message.data);
}
});
FirebaseMessaging.onMessage
.listen((RemoteMessage message) => notificationOnMessage(message.data));
FirebaseMessaging.onMessageOpenedApp
.listen((RemoteMessage message) => notificationOnResume(message.data));
解释:
- FirebaseMessaging.instance.getInitialMessage() returns a RemoteMessage 对象,当应用程序通过 FCM 通知从终止状态打开时。这将替换
onLaunch
. - FirebaseMessage.onMessage “returns
RemoteMessage
] 的 Stream,当 Flutter 实例在前台时接收到传入的 FCM 负载时调用。”这将替换onMessage
. - FirebaseMessage.onMessageOpenedApp "returns
RemoteMessage
] 的 Stream,当用户按下通过 FCM 显示的通知消息时调用。 如果应用程序从后台状态(未终止)打开,将发送 Stream 事件。”这将替换onResume
.