我正在开发一个需要显示通知的应用程序。对于通知,我使用firebase云消息传递(fcm)。我可以得到通知时,应用程序是在后台。
但当我单击notification时,它会重定向到home.java页面。我希望它重定向到notification.java页面。
所以,请告诉我如何在点击通知中指定活动。我使用两种服务:
1.)myfirebasemessagingservice
2.)MyFireBaseInstancedService
这是myfirebasemessagingservice类中onmessagereceived()方法的代码示例。
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "FirebaseMessageService";
Bitmap bitmap;
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated. See sendNotification method below.
}
/**
* Create and show a simple notification containing the received FCM message.
*/
private void sendNotification(String messageBody, Bitmap image, String TrueOrFalse) {
Intent intent = new Intent(this, Notification.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("Notification", TrueOrFalse);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setLargeIcon(image)/*Notification icon image*/
.setContentTitle(messageBody)
.setStyle(new NotificationCompat.BigPictureStyle()
.bigPicture(image))/*Notification with Image*/
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
/*
* To get a Bitmap image from the URL received
* */
public Bitmap getBitmapfromUrl(String imageUrl) {
try {
URL url = new URL(imageUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(input);
return bitmap;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
5条答案
按热度按时间kqhtkvqz1#
下面是理解这一点的最简单方法。
当您发送数据负载时,通知负载为
通知clickaction将是用于将数据传递到活动的筛选器,什么数据?服务器发送的数据
data: { }
附加到有效负载的对象。因此,clickaction将触发清单中的意图过滤器,因此首先我们需要创建它
现在,我们使用与clickaction相同的名称设置意图过滤器,这样做会触发每当我们按下通知选项卡上的通知时,该意图过滤器将启动,依此类推与该意图过滤器关联的活动。
然后,使用
intent.getStringExtra("ORDER_ID")
在main活动中,在数据有效负载中发送额外的字符串。在这种情况下,请确保订单号是我们从
data { }
对象,并且需要在客户端中相同才能获取此数据。4xrmg8kj2#
打开myfirebasemessagingservice.java文件
在该文件中有一个sendnotification()方法,您必须在该方法中指定需要在intent中导航到的活动,如下所示
如果您正在发送多个通知,并且希望在单击某个特定通知时导航到不同的活动,您可以使用任何条件语句来实现它,我的建议是使用如下所示的switch case
使用此逻辑,您可以在fcm中单击通知时打开特定活动。这对我很有效。谢谢
wydwbb8l3#
androidmanifest.xml文件
您的firebasemessagingservice.java文件onmessagereceived方法:
用于通知的云函数/服务器代码必须如下所示:
s71maibg4#
当应用程序在后台时,必须在启动程序活动中传递意图。所以它打开了你的启动活动。现在检查启动程序活动的intent中是否有数据,然后启动所需的活动。
在你的发射器活动里面
6qqygrtg5#
使用fcm,您可以向客户端发送两种类型的消息:
1.通知消息:有时被认为是“显示消息”
fcm代表客户端应用程序自动向最终用户设备显示消息。通知消息具有一组预定义的用户可见键。
2.数据消息:由客户端应用程序处理。
客户端应用程序负责处理数据消息。数据消息只有自定义的键值对。
根据fcm文档,在android应用程序中接收消息
应用程序处于后台时发送的通知。在这种情况下,通知被传递到设备的系统托盘。默认情况下,用户点击通知会打开应用程序启动程序。
具有通知和数据负载的消息,包括后台和前台。在这种情况下,通知被传递到
设备的系统托盘,并且数据有效负载在您的启动器活动的目的的额外部分中交付。
套
click_action
在通知负载中:因此,如果您想处理在后台收到的消息,您必须发送
click_action
带着信息。click_action
是通知负载的参数如果要打开应用程序并执行特定操作,请设置
click_action
并将其Map到要启动的活动中的意图过滤器。例如,设置
click_action
至OPEN_ACTIVITY_1
触发如下意图过滤器:fcm有效载荷如下所示: