在应用程序关闭时,是否可以通过点击 Firebase Cloud Messaging 发送到 Flutter 应用程序(Android 和 iOS)的通知来打开链接?我正在使用旧版 HTTP 请求。
这是可能的!您需要为后台服务编写侦听器,它实际上已经在 firebase_messaging 包中。然后,您需要为 FCM 通知中的启动 URL 编写函数。了解 FLUTTER_NOTIFICATION_CLICK
例如:
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
print('A new onMessageOpenedApp event was published!');
currentBottomIndex = 2;
goHome(context);
});
以下是当应用程序已从后台应用程序部分删除时从后台启动 url 的解决方法。 在这里,我使用 firebase_core、firebase_messaging 和 flutter_local_notifications 目录来处理从 Firebase 收到的通知。我正在使用 url_launcher 目录重定向到所需的 URL。
对于 firebase 通知处理程序,我们设置后台通知处理程序如下:
FirebaseMessaging.onBackgroundMessage(handleBackgroundMessage);
在任何类或函数之外定义handleBackgroundMessage函数,使其与@pragma标签独立且全局
Future<void> handleBackgroundMessage(RemoteMessage message) async {
final Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
final SharedPreferences prefs = await _prefs;
String video_url = message.data['video_url'].toString();
if(video_url.isNotEmpty && video_url!='null') {
var flag = await prefs.setString('KEY_LAUNCH_URL', video_url);
}
}
现在我们转到 main.dart 或您可能使用的任何启动屏幕页面。就我而言,我在 EntryPage.dart 文件中使用有状态小部件。在这里,我定义了一个自定义函数,如下所示:
void get_launch_url() async {
final SharedPreferences prefs = await _prefs;
String? video_url = prefs.getString('KEY_LAUNCH_URL');
if(video_url!=null && video_url.toString().isNotEmpty) {
launchUrl(Uri.parse(video_url.toString()));
await prefs.setString('KEY_LAUNCH_URL', "");
}
}
现在对于 EntryPage.dart 中类的 initState 重写方法,我调用上面的函数
get_launch_url();
注意:这是一个似乎对我有用的解决方法。您基本上将重定向网址存储为缓存。单击通知时,应用程序将打开并检查缓存是否存在。如果重定向缓存既不为 null 也不为空,它会尝试重定向到作为重定向值提供的任何 url。