当应用程序位于后台时,Android第二推送通知有效负载数据未在附加中接收

当应用程序位于后台时,Android第二推送通知有效负载数据未在附加中接收,android,push-notification,notifications,android-notifications,firebase-notifications,Android,Push Notification,Notifications,Android Notifications,Firebase Notifications,我面临着一个非常奇怪的问题,当应用程序在后台时,不会再次接收有效负载数据 例如-(当我还没有启动我的应用程序时) 当我第一次收到通知时,它将打开我的应用程序并从通知中读取附加内容 当我收到第二次通知时,会将我的应用程序最大化,或将我的应用程序放在最前面,但不会阅读附加内容 当我的应用程序打开时,一切正常。即使我在手动打开应用程序后将其放在后台,所有通知也可以正常工作 这是我的舱单代码 <activity android:name=".PagerAct

我面临着一个非常奇怪的问题,当应用程序在后台时,不会再次接收有效负载数据

例如-(当我还没有启动我的应用程序时)

  • 当我第一次收到通知时,它将打开我的应用程序并从通知中读取附加内容
  • 当我收到第二次通知时,会将我的应用程序最大化,或将我的应用程序放在最前面,但不会阅读附加内容
当我的应用程序打开时,一切正常。即使我在手动打开应用程序后将其放在后台,所有通知也可以正常工作

这是我的舱单代码

      <activity
            android:name=".PagerActivity"
            android:launchMode="standard">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
我做了很多研究,但都没有用。如果您需要任何其他详细信息,请告诉我

我正在使用firebase发送带有自定义数据的通知。我也尝试过通过网络服务器发送,但仍然没有成功


我调试了我的应用程序,发现当我通过第二次通知打开应用程序时,没有创建新实例。

有两种不同类型的消息

  • 通知消息
  • 数据电文
  • 通知消息的有效负载

     {
        "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
        "notification" : {
          "body" : "great match!",
          "title" : "Portugal vs. Denmark",
          "icon" : "myicon"
        }
      }
    
    数据报文的有效载荷

    {
       "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
       "data" : {
         "Nick" : "Mario",
         "body" : "great match!",
         "Room" : "PortugalVSDenmark"
       },
     }
    
    同时具有通知和数据有效载荷的消息

    接收包含通知和数据有效载荷的消息时,应用程序的行为取决于应用程序是在后台还是前台,在接收时是否处于活动状态

    在后台时,应用程序在通知托盘中接收通知负载,并且仅在用户点击通知时处理数据负载

    在前台时,您的应用程序会收到一个消息对象,其中两个有效负载都可用

    如果您希望将数据与通知一起传递,以便在应用程序的两种状态(活动和非活动)上工作,则必须使用数据消息


    当您同时发送<代码>通知<代码>和<代码>数据有效负载<代码>时,可在官方文档中获得更多详细信息,如果您的应用程序位于后台,通知将显示在托盘中,但如果您的启动活动位于后台,则单击通知,它将被带到前台,您将不会收到数据负载

    一种解决方案是将该特定活动的
    启动模式设置为singleTask,并在活动中实施
    onNewIntent
    ,以接收
    数据有效负载

    这样,您的活动将被带到前台,位于堆栈中此活动顶部的活动将被销毁


    你可以找到更多关于启动模式的信息。

    你是否实现了
    onMessageReceived
    ?@mallaudin-onMessageReceived是为你的应用程序在前台时使用的。此处我的应用程序位于后台。
    onMessageReceived
    将被调用以获取
    数据消息
    ,即使该应用程序位于后台。我同时发送通知和数据。如果您的应用程序处于后台或已关闭,则通知中心会显示一条通知消息,并且该消息中的任何数据都会传递到用户点击通知后启动的intent。我传递了一条数据消息,但在我的通知中没有第二次收到它。我刚刚调试了我的应用程序,发现当我通过第二次通知打开我的应用程序时,没有创建新实例。我已经发布了问题中的部分代码。你还需要什么?为我工作。谢谢……)
    {
       "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
       "data" : {
         "Nick" : "Mario",
         "body" : "great match!",
         "Room" : "PortugalVSDenmark"
       },
     }