通知在前台无效

时间:2019-12-06 22:29:37

标签: android firebase push-notification firebase-cloud-messaging foregroundnotification

如果应用程序在后台运行,但在前台运行,我的通知有效

这是我的MyFirebaseMessagingService类:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    public static final String TAG = "MessagingService";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        String title = remoteMessage.getNotification().getTitle();
        String message =  remoteMessage.getNotification().getBody();

        String uid = remoteMessage.getData().get("uid");
        String click_action = remoteMessage.getNotification().getClickAction();

        Log.d(TAG, "onMessageReceived: "+title + message + uid+" "+click_action);


        Intent intent = new Intent(click_action);
        if (click_action.equals("com.example.android.ProfileFriends")){
            intent.putExtra("uid",uid);
        }else if (click_action.equals("com.example.android.ChatActivity")){

        }
      //  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
        notificationBuilder.setContentTitle(title);
        notificationBuilder.setContentText(message);
        notificationBuilder.setSmallIcon(R.mipmap.ic_launcher_event);
        notificationBuilder.setPriority(NotificationCompat.PRIORITY_HIGH);
        notificationBuilder.setCategory(NotificationCompat.CATEGORY_MESSAGE);
        notificationBuilder.setContentIntent(pendingIntent);
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0,notificationBuilder.build());



    }

}

请,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

FCM对于应用程序状态(前台和后台/已终止)具有不同的行为。 您应该根据用例,通过从服务器发送的有效负载来处理此问题。

从服务器发送的味精必须以“通知”或“数据”格式从仪表板或服务器端api发送。 注意:您只能从Firebase dashobard发送“通知”正文,而不能发送数据。在这种情况下,FCM将直接显示通知,而不会回调您的应用。

服务器端 以下是示例格式:

通知类型格式 注意:默认情况下,Android系统将在通知托盘中显示通知,而您无需显示它。

 { 
    "to": "your_token_id",
     "notification" : {
             "title" : "FCM Notification title!",
             "body" : "FCM Notification subtext!",
             "content_available" : true,
             "priority" : "high"
     }
}

数据格式(用于在前台和后台接收应用中的回调) 注意:您必须自行处理回调并显示notif。

{ 
    "to": "your_token_id",

    "data" : {
         "title" : "FCM Notification Title ",
         "subtext" : "FCM Notification Sub Title",
         "type" : "999",
         "priority" : "high"
    }
}

Android客户端 要处理您的Android接收器中收到的有效载荷,请查阅官方指南here

/* The class extends FirebaseMessagingService() */   
 override fun onMessageReceived(remoteMessage: RemoteMessage) {

        Log.d(TAG, "From: ${remoteMessage.from}")

        // Check if message contains a data payload.
        remoteMessage.data.isNotEmpty().let {
            Log.d(TAG, "Message data payload: " + remoteMessage.data)

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

    // Check if message contains a notification payload.
    remoteMessage.notification?.let {
        Log.d(TAG, "Message Notification Body: ${it.body}")
    }

    // 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.
}

查看文档here

enter image description here