首页 > 解决方案 > 如何构造 FCM 推送通知以在 Flutter(Android 和 iOS)的默认系统 Web 浏览器应用程序中打开指定的 URL

问题描述

我有一个 Flutter 应用程序(Android 和 iOS),它可以处理 Android Deep Links & App Links,以及 iOS Custom URL Schemes & Universal Links。

所以网址...

company://service/items/{item-id}
https://service.company.com/items/{item-id}

{item-id}...都按预期和期望打开“项目详细信息”页面。

此应用程序的后端服务器发送 FCM 推送通知,当{item-id}.

现在,单击推送通知只会启动应用程序的主页。

我想知道是否有可能以这样的方式构建 FCM 消息......它告诉设备在默认系统 Web 浏览器中打开 URL,这会触发我现有的深度链接功能?

我认为这很可能是可能的,因为我猜这将是营销材料的有用用例,或者需要在网站上而不是在应用程序内完成的操作?

但同时,我可以想象,除了 FCM 消息接收器之外,可能无法触发来自另一个应用程序的推送通知的处理?

我试图在服务器/FCM 广播阶段处理这个问题的理由是,如果可能的话,我想重用现有的功能性深度链接功能,在通用颤振层中尽可能少地更改,并尽可能避免使用本机代码可能的。

我正在为 Android 尝试什么:

{
  "notification": {
    "title": "Stackoverflow title", 
    "body": "Click on it to see what happens!",
    "click_action": "android.intent.action.VIEW",
    "data": "https://service.company.com/items/{item-id}"
  }, 
  "data": {
    "open_url": "https://service.company.com/items/{item-id}"
  },
  "android": {
    "notification": {
      "click_action": "android.intent.action.VIEW",
      "data": "https://service.company.com/items/{item-id}"
    }
  },
  "to": "..."
}

......但没有运气。

我错过了什么吗?还是叫错了树?

欢迎任何和所有建议和建议:-)

标签: flutterpush-notificationfirebase-cloud-messagingapple-push-notificationsandroid-notifications

解决方案


所以我找不到做我想做的事的方法。但是,我可以像这样直接在颤动中处理通知单击事件:

  _fcm.configure(
    onMessage: (Map<String, dynamic> message) async => _showMessageHandler,
    onLaunch: (Map<String, dynamic> message) async => _openMessageHandler,
    onResume: (Map<String, dynamic> message) async => _openMessageHandler,
  );

只要我以正确的方式发送通知 - 如下所示:

{
  "notification": {
    "title": "Title", 
    "body": "Body"
  },
  "priority": "high",
  "data": {
    "click_action": "FLUTTER_NOTIFICATION_CLICK",
    "open_url": "https://service.company.com/items/{item-id}"
  },
  "to": "..."
}

推荐阅读