Firebase服务在后台运行时无法创建新通知

时间:2017-02-28 23:50:17

标签: android firebase firebase-cloud-messaging

我使用了Firebase通知,并创建了一个扩展FirebaseMessagingService的类。我在这个类中创建了一个获取消息体的方法,然后根据有效负载显示通知。

我的问题是,此通知仅在我的应用程序正在运行时才有效,但是当它关​​闭时,我会收到Firebase的默认通知,而不是我创建的自定义通知。

我的服务类是:

public class FirebaseNotifications extends FirebaseMessagingService {

String lastChange = "";
String currentChange = "";

@Override
public void onCreate() {
    super.onCreate();
    Log.i("firebase", "it started");
    SharedPreferences settings = getSharedPreferences(PREFS, 0);
    lastChange = settings.getString("lastFbInput", "");
    Log.i("lastChange", lastChange);
}

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);

    currentChange = remoteMessage.getNotification().getBody();
    Log.i("from: ", remoteMessage.getFrom() + "");
    if(remoteMessage.getData().size()>0)
        Log.i("payload: ", remoteMessage.getData().toString());

    if(remoteMessage.getNotification() != null)
        Log.i("message body: ",  remoteMessage.getNotification().getBody());

    if(!lastChange.equals("")) {
        Log.i("equals", "1");
        if (!lastChange.equals(currentChange)) {
            showNotification(remoteMessage.getNotification().getBody());
            Log.i("equals", "2");
        }
    }
    else
    {
        showNotification(remoteMessage.getNotification().getBody());
        Log.i("equals", "3");
    }

}

我的问题是该服务甚至没有运行showNotification方法。任何人都可以提出解决方案吗?

1 个答案:

答案 0 :(得分:1)

这是预期行为。当您的应用处于后台时,通知将由Android自动处理。来自docs

  大多数邮件类型都提供了

onMessageReceived,但以下情况除外:

     
      
  • 当您的应用在后台时发送的通知。在这种情况下,通知将传递到设备的系统托盘。用户点按通知会默认打开应用启动器。
  •   
  • 包含通知和数据有效负载的消息,包括后台和前台。在这种情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的附加内容中传递。
  •   

您的有效负载中可能同时包含notificationdata。要仅让您的应用处理通知(在onMessageReceived()中),您应该使用data - 消息有效负载。有关详细信息,请参阅Message Types文档。