点击FCM通知时打开浏览器而不是启动器活动

12
我想通过 FCM 向 Android 应用发送 URL。点击 FCM 通知时,能否打开浏览器而不是启动应用程序?我知道可以通过覆盖 onMessageReceived() 方法实现,但我不想这样做。我检查了负载中的 click_action 参数,但如 Firebase 所说:

如果指定,则在用户单击通知时启动具有匹配意图过滤器的活动。

我试图像这样在 firebase cloudMessaging 面板的 CustomData 中添加 click_action

enter image description here

但它没有起作用,仍然打开了应用程序。

我使用 Postman 发送通知并将 click_action 添加到 notification 对象中,像这样:

enter image description here

通知已发送到我的设备,但是单击时什么也没发生!

重要提示:我的 APK 已经发布在 Google Play 上,我不能更改应用程序的源代码。

请问有人可以帮忙吗?


1
你尝试过通知挂起意图吗? - Lenoarod
@Lenoarod 不行。在Google Play上发布了Apk,我无法更改源代码。 - Masoud Mokhtari
我认为代码必须先进行支持,否则不能发送某些内容并期望它能打开浏览器。需要设置Pending Intent的Intent过滤器。 - vikas kumar
@FrankvanPuffelen,你能帮我吗? - Masoud Mokhtari
2个回答

0

当您的应用程序在后台运行时,通知将传递到设备的系统托盘。用户点击通知默认会打开应用启动器。

如果消息包含数据,则通知将传递到设备的系统托盘,并且数据负载将在启动器活动的意图的附加项中传递。

因此,您可以根据不同的数据来处理条件。

  1. 在通知负载中设置 click_action
{
  ...
  "notification": {
      "click_action": "activity action"
  },
 ....
}

2. 在清单文件中,您必须配置内部过滤器。

<intent-filter>
  <action android:name="some action" />
  <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

然后当您单击它时,它将打开该操作活动。

如果指定了,则在用户单击通知时启动具有匹配意图过滤器的活动。

所以我认为您可以尝试将click_action操作设置为与浏览器选择器操作或"Intent.ACTION_VIEW"匹配,并设置数据为" http://"之类的内容。

希望这能给您一些帮助。


谢谢Lenoarod,但我尝试过在click_action参数中使用URL,但它不起作用。 - Masoud Mokhtari
将click_action设置为"ACTION_VIEW",并且data是URL时无法工作? - Lenoarod
我不想改变当前的源代码。就像我说的,APK已经发布在Google Play上了。 - Masoud Mokhtari
我的意思是你在通知载荷中设置它。 - Lenoarod
1
@Lenoarod,你在哪里指定URL? 你说尝试使用 "click_action": "Intent.ACTION_VIEW",但是要在哪里设置实际的URL呢? 因为如果应用程序在后台运行,并且通知具有NotificationData,FCM将自动进行通知而不调用 onMessageReceived()。 这就是我想要的,因为这样FCM会为我检索image(如果您自己尝试获取图像,则某些设备将不允许由于节电机制而防止后台网络)。 - c0dehunter

0

在 PendingIntent 中传递 setData 的 Intent。

Intent notificationIntent = new Intent(Intent.ACTION_VIEW);
notificationIntent.setData(Uri.parse(link));

PendingIntent pending = PendingIntent.getActivity(this, 0, notificationIntent, 
Intent.FLAG_ACTIVITY_NEW_TASK);
myNotification.setContentIntent(pending);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接