Android 应用程序关闭时FirebaseMessagingService拦截通知

Android 应用程序关闭时FirebaseMessagingService拦截通知,android,notifications,firebase-cloud-messaging,intercept,Android,Notifications,Firebase Cloud Messaging,Intercept,当我的应用程序关闭时,我可以拦截通知吗? 我需要这个图书馆的徽章 谢谢。你是认真的吗 public class AppFcmMessagingsService extends FirebaseMessagingService { private static final String TAG = "FirebaseMessageService"; @Override public void onCreate() { super.onCreate(); } @Override pub

当我的应用程序关闭时,我可以拦截通知吗?
我需要这个图书馆的徽章

谢谢。

你是认真的吗

public class AppFcmMessagingsService extends FirebaseMessagingService {

private static final String TAG = "FirebaseMessageService";

@Override
public void onCreate() {
    super.onCreate();
}

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    try {
        if(remoteMessage.getData().size() > 0) {

            final JSONObject jsonObject = new JSONObject(remoteMessage.getData().toString());
            Log.d(TAG,"remoteMessage = " + jsonObject.toString());
            int badgeCount = 1;
            ShortcutBadger.applyCount(getApplicationContext(), badgeCount); 
        }
    } catch (Exception e) {
        Log.e(TAG, "onMessageReceived: ", e);
    }
    if(remoteMessage.getNotification() != null) {
            int badgeCount = 1;
            ShortcutBadger.applyCount(getApplicationContext(), badgeCount); 
             Log.d(TAG, "notification body : " + remoteMessage.getNotification().getBody());
    }
}
}

有3种类型的通知:

通知:可以从web控制台或任何后端发送,它具有预定义的值。如果应用程序处于打开状态,则可在onMessageRecieve上自定义该行为。如果应用程序处于关闭状态,则会触发默认通知。 数据:一个键值对,只有字符串。可以从任何后端发送。行为总是在onMessageReceived方法中定义的。 通知和数据:以前的组合将具有通知的行为,在默认启动程序活动中单击通知后,数据将作为附加信息提供。可以从web控制台或任何后端发送

推送是一个名为Payload的json,它包含以下对象:

有效载荷:{ 数据:{…} }

是的,您可以向自己发送数据类型通知,它将始终执行您在MessagingService内的onMessageReceived方法中编写的操作

这个医生应该对你有帮助

如果您没有服务器,请使用功能

由于默认通知不会显示,您可能希望显示自己的通知。 如果还希望显示通知,则必须从onMessageReceived内部调用NotificationCompat类。视觉通知与推送消息无关,事实上,按下按钮可以触发视觉通知

要创建可视通知,最好的方法是让Android Studio为您完成。第二次单击activities.java所在的包,单击new,然后单击selecet ui组件,就会看到通知。它将创建通知的基本模板。然后在OnMessageReceived中使用这些方法来传递必须显示给用户的信息

关于这门课的文档

你可能会发现这个错误

如果您从未解决过这个问题,那么问题不在于您如何在应用程序中实现它,而在于如何发送JSON数据负载。请参阅和相应的答案,以了解为什么您在后台未收到这些消息


非常简短的总结是,如果您收到
通知
有效负载,它将永远不会在后台触发。如果您收到
数据
有效负载而未收到
通知
,则可以在应用程序处于后台时解析并执行操作

是的,但是如果我不发送有效负载,通知栏中不会显示该通知。我知道,如果我只发送MessageReceived上的数据,它将被调用,但我还需要它显示为通知。@alexma01我已经用您需要的内容更新了答案,因此我应该确保更改发送通知的后端部分。我希望我不必碰那部分。是否无法在FirebaseMessagingService类中拦截通知?没有我可以扩展的方法吗?我无法以任何方式截获意图?我不知道您的服务器正在发送什么类型的通知。我只能猜测。如果您的服务器正在发送通知或带有数据的通知,则这就是问题所在。当应用程序关闭时,这些应用程序的定义行为是触发默认通知。如果您想要完全自定义行为,那么服务器必须只发送数据推送消息。您正试图用代码解决一些问题,这些问题应该通过实现正确的用例来解决。即使应用程序关闭,它也会被调用吗?显然,我想发送通知中的有效负载和数据。是的。您可以从服务器发送json或键值映射谢谢您的回复。我尝试过,但在应用关闭时不会调用onMessageReceived,除非我发送有效负载。是的,您必须发送有效负载,否则如果我发送{“通知”:{“标题”:“bbbbbbbb”,“正文”:“aaaaaa”,},“数据”:“gggggg”},则不会调用onMessageReceivedonMessageReceived未在应用程序被关闭时调用我们总是很乐意帮助和支持新的编码人员,但您需要首先帮助自己。之后,如果您有问题,请发布您尝试过的内容,并清楚解释哪些内容不起作用,然后提供。读这本书。此外,请务必阅读“如果我没有正确提问,我道歉”。我会听从他的建议,谢谢你。