如何构造 FCM 推送通知以在 Flutter(Android 和 iOS)的默认系统 Web 浏览器应用中打开指定的 URL

Posted

技术标签:

【中文标题】如何构造 FCM 推送通知以在 Flutter(Android 和 iOS)的默认系统 Web 浏览器应用中打开指定的 URL【英文标题】:How to construct FCM push notification to open specified URL in default system web browser app in Flutter (Android & iOS) 【发布时间】:2021-02-06 18:42:40 【问题描述】:

我有一个 Flutter 应用程序(androidios),它可以处理 Android 深层链接和应用程序链接,以及 iOS 自定义 URL 方案和通用链接。

所以网址...

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": "*** 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": "..."

...但没有运气。

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

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

【问题讨论】:

你是对的。但是我想到了一个解决方法,我们已经可以在 OnLaunch、OnResume、OnBackground 事件上定义路由。并根据提供的数据导航到该地点。 感谢您的信息。我已经尝试过了,但没有运气让这些回调在通知点击时起作用。将仔细检查所有内容,看看我是否无法让它们工作!谢谢 你试过了吗? 当我更改 FCM 消息的格式时,我能够触发 onResume 和 onLaunch。根据***.com/a/56648598/5096103 更改格式。感谢您的建议@KrishBhanushali! 欢迎您!好吧,这确实是一种解决方法,我希望我们能找到更好的解决方案,这样我们就可以通过通知进行深度链接。 【参考方案1】:

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

  _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": "..."

【讨论】:

以上是关于如何构造 FCM 推送通知以在 Flutter(Android 和 iOS)的默认系统 Web 浏览器应用中打开指定的 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 FCM 和 Flutter(一个到另一个设备)发送推送通知?

如何在接收基于 Flutter 构建的 FCM 推送通知时修复应用程序崩溃

如何获取 FCM-Django 推送通知的 registration_id (flutter app)

Flutter 按主题使用 FCM 推送通知

如何将 Bitmap 转换为 AndroidBitmap 以在 Flutter 中推送通知?

如何使用 FCM 在颤振中推送通知