当应用在后台时,Firebase Android NotificationCompat.PRIORITY_HIGH无效

时间:2016-09-30 13:05:49

标签: android firebase android-notifications firebase-cloud-messaging

我已成功实施了firebase。我唯一无法实现的是NotificationCompat.PRIORITY_HIGH。它在应用程序处于前台时工作。在我的PHP代码中,我已将优先级及其值添加到高位。虽然它似乎对Android没用。在我的ios应用程序中,优先级很高。我无法弄清楚如何做到这一点。仅供参考:我了解有效载荷数据和通知。 :)谢谢。

public class MyFirebaseMessagingService extends FirebaseMessagingService {

private static final String TAG = "MyFirebaseMsgService";
Bitmap bitmap;

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    //Displaying data in log
    //It is optional
    Log.d(TAG, "From: " + remoteMessage.getFrom());
    Log.d(TAG, "Notification Message Title: " + remoteMessage.getNotification().getTitle());
    Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
    String imageUrl = remoteMessage.getData().get("image");
    bitmap = getBitmapfromUrl(imageUrl);
    //Calling method to generate notification
    sendNotification(remoteMessage.getNotification().getBody(), remoteMessage.getNotification().getTitle());
}


private void sendNotification(String messageBody, String title) {
    Intent intent = new Intent(this, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
            PendingIntent.FLAG_ONE_SHOT);
    Log.e("inside notification", "method");
    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_stat_bicycle)
            .setColor(getResources().getColor(R.color.ColorPrimary))
            .setContentTitle(title)
            .setContentText(messageBody)
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);
    if (Build.VERSION.SDK_INT >= 19) {
        notificationBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(messageBody));
         notificationBuilder.setStyle(new NotificationCompat.BigPictureStyle()
                    .bigPicture(img))
    }
    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    Random rn = new Random();
    int result = rn.nextInt(100 + 1);
    notificationManager.notify(result, notificationBuilder.build());
}

1 个答案:

答案 0 :(得分:1)

以下是another similar post的答案。 问题属于onMessageReceived()方法,而不仅仅是优先级

根据您的问题,我可以看到您正在从服务器发送通知有效负载,这是此问题的根本原因

onMessageReceived()方法如果应用程序处于后台或已杀死,并且发送的消息包含DATA,则将不会被调用和NOTIFICATION有效载荷。

当应用未运行时,您仍会收到通知。但是如果你想通过onMessageReceived()拦截数据,那么你将不得不创建一个自定义应用服务器,它将仅发送DATA有效载荷到fcm端点。

类似的东西:

 {
   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
   "data" : {
     "Title" : "Title for Notification",
     "body" : "Notification body can go here",
     "Room" : "Something extra"
   },
 }

希望这能解决您的问题。 (您可以参考fcm documentation here说明)

  

当您的应用位于后台时,Android会指示通知   消息到系统托盘。用户点击通知即可打开   应用启动器默认

     

这包括同时包含通知和数据有效负载的消息   (以及从Notifications控制台发送的所有消息)。在这些   例如,通知被传送到设备的系统托盘,和   数据有效负载是在您的意图的附加内容中提供的   启动器活动。

因此,永远不会调用onMessageReceived()!如果您想在onMessageReceived中手动处理内容,请按照此答案中的说明进行操作。