在FCM中单击通知时打开特定活动 [英] Open specific Activity when notification clicked in FCM

查看:428
本文介绍了在FCM中单击通知时打开特定活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发需要显示通知的App. 为了进行通知,我正在使用FireBase Cloud Messaging (FCM). 当应用程序处于后台时,我能够收到通知.

I am working on App in which I am required to show notification. For notification, i am using FireBase Cloud Messaging (FCM). I am able to get Notification when app is in background.

但是当我单击通知时,它会重定向到 home.java 页面.我希望它重定向到 Notification.java 页面.

But when I click on notification, it redirect to home.java page. I want it to redirect to Notification.java page.

所以,请告诉我如何在通知的点击"中指定活动". 我正在使用两项服务:

So,please tell me how to specify Activity in on Click of notification. I am using two services:

1.) MyFirebaseMessagingService

2.) MyFirebaseInstanceIDService

这是我的MyFirebaseMessagingService类中的 onMessageReceived()方法的代码示例.

This is my code sample for onMessageReceived() method in MyFirebaseMessagingService class.

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;

    }
}

推荐答案

使用FCM,您可以发送两个

With FCM, you can send two types of messages to clients:

1.通知消息:有时被称为显示消息".

1. Notification messages: sometimes thought of as "display messages."

FCM代表客户端应用程序自动将消息显示给最终用户设备.通知消息具有一组预定义的用户可见键.

FCM automatically displays the message to end-user devices on behalf of the client app. Notification messages have a predefined set of user-visible keys.

2.数据消息:,由客户端应用处理.

2. Data messages: which are handled by the client app.

客户端应用负责处理数据消息.数据消息仅具有自定义键值对.

Client app is responsible for processing data messages. Data messages have only custom key-value pairs.

根据FCM文档在Android应用中接收消息

According to FCM document Receive Messages in an Android App

  • 您的应用在后台运行时发送的通知.在这种情况下,通知将发送到设备的系统托盘. 用户点击通知会默认打开应用启动器.
  • 同时具有通知和数据有效载荷(背景和前景)的消息.在这种情况下,通知将传递到
    设备的系统托盘,数据有效载荷在附件中提供 启动器活动的意图.
  • Notifications delivered when your app is in the background. In this case, the notification is delivered to the device’s system tray. A user tap on a notification opens the app launcher by default.
  • 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.

在通知有效负载中设置click_action:

Set click_action in the notification payload:

因此,如果要处理在后台收到的消息,则必须发送带有消息的click_action.

So, if you want to process the messages arrived in the background, you have to send click_action with message.

click_action参数的通知有效载荷

如果要打开应用程序并执行特定操作,请在通知有效负载中设置click_action并将其映射到要启动的活动"中的意图过滤器.

If you want to open your app and perform a specific action, set click_action in the notification payload and map it to an intent filter in the Activity you want to launch.

例如,将click_action设置为OPEN_ACTIVITY_1以触发如下所示的意图过滤器:

For example, set click_action to OPEN_ACTIVITY_1 to trigger an intent filter like the following:

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

FCM有效负载如下所示:

FCM payload looks like below:

{
  "to":"some_device_token",
  "content_available": true,
  "notification": {
      "title": "hello",
      "body": "test message",
      "click_action": "OPEN_ACTIVITY_1"
  },
  "data": {
      "extra":"juice"
  }
}

这篇关于在FCM中单击通知时打开特定活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆