我使用了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
方法。任何人都可以提出解决方案吗?
答案 0 :(得分:1)
这是预期行为。当您的应用处于后台时,通知将由Android自动处理。来自docs:
大多数邮件类型都提供了
onMessageReceived
,但以下情况除外:
- 当您的应用在后台时发送的通知。在这种情况下,通知将传递到设备的系统托盘。用户点按通知会默认打开应用启动器。
- 包含通知和数据有效负载的消息,包括后台和前台。在这种情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的附加内容中传递。
您的有效负载中可能同时包含notification
和data
。要仅让您的应用处理通知(在onMessageReceived()
中),您应该使用data
- 仅消息有效负载。有关详细信息,请参阅Message Types文档。