我无法获取通知数据,然后app关闭了firebase

时间:2017-04-25 07:44:55

标签: android firebase push-notification

您好我使用简单的firebase通知控制台发送推送通知,但是当我的应用程序关闭时,我只能获得默认的通知方式。有人可以展示如何使应用程序中的自定义通知样式关闭。这是我的onMessageReceived

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {



    Log.d(this.getClass().getSimpleName(), "onMessageReceived");

    String message = remoteMessage.getData().get("image");


    Log.d(this.getClass().getSimpleName(), "From: " + remoteMessage.getFrom());

    //Check if the message contains data
    if(remoteMessage.getData().size()>0){
        Log.d(this.getClass().getSimpleName(), "Message data: " + remoteMessage.getData());
    }

    //Check if the message contains notification
    if(remoteMessage.getNotification() != null){
        Log.dthis.getClass().getSimpleName(), "Message body: "+remoteMessage.getNotification().getBody());
        sendNotification(remoteMessage.getNotification().getBody());
    }
}

这是我的发送通知

private void sendNotification(String body) {

    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingintent = PendingIntent.getActivity(this, 0/*Request code*/, intent, PendingIntent.FLAG_ONE_SHOT);
    //set sound of notification
    Uri notificationSoound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notifiBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("Firebase Cloud Messaging")
            .setContentText(body)
            .setAutoCancel(true)
            .setSound(notificationSoound)
            .setContentIntent(pendingintent);

    NotificationManager noticationmessanger = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    noticationmessanger.notify(0/*Id of notification*/,notifiBuilder.build());


}

4 个答案:

答案 0 :(得分:1)

使用FCM,您可以向客户端发送两种类型的消息:

通知消息,有时被视为"显示消息。" 数据消息,由客户端应用程序处理。

因此,如果您想自己处理消息,则需要仅从服务器发送数据属性作为通知的一部分。如果添加通知属性,firebase将自动处理它,您将无法自定义它。

答案 1 :(得分:0)

@Serg我最近实施了Firebase通知并遇到了同样的问题。当您的应用程序处于后台并通过firebase控制台发送通知时,您无法自定义通知。这是因为你的接收器的onMessageReceived方法不会被调用。要处理它,您需要通过PostMan(Firebase Rest客户端)发送通知。它允许您在后台或前台自定义通知。此外,您可以使用可以发送通知的内部API。

答案 2 :(得分:0)

这是我的firebase类

公共类MyFirebaseMessagingService扩展了FirebaseMessagingService {

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Map<String, String> data = remoteMessage.getData();
    String myCustomKey = data.get("my_custom_key");


    Log.d(Constants.TAG_FRAGMENT,"YESSSSSS" +myCustomKey);

    }
}

这是YESSSSSS我没有得到

这是我的原始

{
"to": "/topics/my_topic",
"data": {
    "my_custom_key" : "my_custom_value",
    "other_key" : true
 }

}

答案 3 :(得分:0)

  

在FirebaseMessagingService

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    if (remoteMessage == null)
        return;

    //create notification
    if (remoteMessage.getNotification() != null) {

        // Defualt notification genarate by system
    }

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {

        try {

            Map<String, String> data = remoteMessage.getData();
            handleDataMessage(data);
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.getMessage());
        }
    }
}


private void handleDataMessage(Map<String, String> data) {

        // code of your custom notification
}
  

海报(供测试)

    {

     "registration_ids" : ["fsdfsa54sdf4asd"], // Your perticular user token id
     "data" : {
         "title" : "Testing",
         "message" : "Hi ",
     }
    }

如果您使用主题,则替换

 "registration_ids" : ["fsdfsa54sdf4asd"], // Your perticular user token id

  "to": "/topics/my_topic"

如果您使用&#34;通知&#34;然后它由android defualt通知托盘处理。因此,每当你得到它时,都会使用数据消息手动处理通知。(对不起我的英文)

  

请参阅此link以获得更好的理解