如何从 Flutter 应用程序的 FCM 通知(Android 和 iOS)打开外部 URL?

问题描述 投票:0回答:2

在应用程序关闭时,是否可以通过点击 Firebase Cloud Messaging 发送到 Flutter 应用程序(Android 和 iOS)的通知来打开链接?我正在使用旧版 HTTP 请求。

flutter firebase firebase-cloud-messaging apple-push-notifications android-notifications
2个回答
0
投票

这是可能的!您需要为后台服务编写侦听器,它实际上已经在 firebase_messaging 包中。然后,您需要为 FCM 通知中的启动 URL 编写函数。了解 FLUTTER_NOTIFICATION_CLICK

例如:

FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
      print('A new onMessageOpenedApp event was published!');
      currentBottomIndex = 2;
      goHome(context);
    });

0
投票

以下是当应用程序已从后台应用程序部分删除时从后台启动 url 的解决方法。 在这里,我使用 firebase_corefirebase_messagingflutter_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。

© www.soinside.com 2019 - 2024. All rights reserved.