gpt4 book ai didi

java - 是否可以仅通过数据负载 FCM 通知来启动特定 Activity ?

转载 作者:行者123 更新时间:2023-11-29 18:57:48 24 4
gpt4 key购买 nike

使用 Firebase Cloud Function,当用户回复另一个时,我会自动发送通知。发送通知后,用户可以打开它并显示一个显示对话的 Activity 。如果我像下面这样只使用数据作为有效负载,则无法执行 click_action 并打开相应的 Activity 。像这样定义我的有效负载(并在 onMessageReceived 中获取数据)不起作用:

const payload = {
data : {
post : xxx,
comment : xxx,
from : xxx,
to : xxxx,
action_click : "open_activity_B"
}
};

有没有办法在不添加通知的情况下实现我想要的?

谢谢你的帮助

编辑:

一些更多的信息来解释你为什么我这样做。我想创建如下通知(在前台和后台):

enter image description here

我只通过使用我提供给您的方法实现了这一点,但没有使用 click_action。如果我使用通知负载,我无法显示大图标(通知末尾的头像)。此外,在前台,我的图标应用程序显示在通知中,但在后台,我有一个默认图标...

我的代码如下:

if (remoteMessage.getData().size() > 0) {
post_id = remoteMessage.getData().get("post");
comment_id = remoteMessage.getData().get("comment");
originatorUid = remoteMessage.getData().get("originatorUid");
image = remoteMessage.getData().get("image");

if (/* Check if data needs to be processed by long running
job */ true) {
// For long-running tasks (10 seconds or more) use
Firebase Job Dispatcher.
scheduleJob();
} else {
// Handle message within 10 seconds
handleNow();
}

}

// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
title = remoteMessage.getNotification().getTitle();
body = remoteMessage.getNotification().getBody();
clickaction = remoteMessage.getNotification().getClickAction();
icon = remoteMessage.getNotification().getIcon();
}

然后在onMessageReceived中:

Intent intent=new Intent(clickaction);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("post_id", post_id);
intent.putExtra("comment_id", comment_id);
intent.putExtra("originatorUid", originatorUid);
pendingIntent=PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);

String channelId = getString(R.string.app_name);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.mipmap.myicon)
.setLargeIcon(image)
.setContentTitle(title)
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);

NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

// Since android Oreo notification channel is needed.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(channelId,
"Channel human readable title",
NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(channel);
}

notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());

最佳答案

根据 official documentaion :

Messages with both notification and data payload, both background and foreground. In this case, the notification is delivered to the device’s system tray, and the data payload is delivered in the extras of the intent of your launcher Activity.

启动器 Activity 在 AndroidManifest.xml 文件中使用类别 LAUNCHER 指定,如下所示:

<activity
android:name="com.example.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

您可以更改默认行为覆盖并指定另一个 Activity 。在你的message notification data ,添加一个名为 click_action 的新属性,其值为操作字符串。然后在 AndroidManifest.xml 文件中给它一个与操作匹配的 Intent 过滤器,如下例所示:

{
"to": "tgFvOPQLccSe:EDE90N.........5Tg",
"notification": {
"title": "My Message",
"body": "Hello Kmel!",
"click_action": "com.example.MY_NEW_ACTIVITY"
},
"data": {
"score": "111"
}
}

像这样定义 Intent 过滤器:

<activity android:name=".MyFcmNotificationActivity">
<intent-filter>
<action android:name="com.example.MY_NEW_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

但请记住,数据负载不会在收到消息时传送到 Activity ,而是在用户单击通知时传送。

关于java - 是否可以仅通过数据负载 FCM 通知来启动特定 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49675292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com