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

Posted

技术标签:

【中文标题】当应用程序处于后台时,Android 2nd 推送通知有效负载数据未在附加中接收【英文标题】:Android 2nd Push Notification Payload Data Not Receiving In Extras When App is In Background 【发布时间】:2016-11-17 09:13:28 【问题描述】:

当应用程序处于后台时,我遇到了一个非常奇怪的问题,即第二次没有接收到有效负载数据。

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

当我第一次收到通知时,它会打开我的应用程序并阅读通知中的附加内容。 当我收到第二条通知时,它会最大化我的应用或将我的应用置于最前面,但不会阅读额外内容。

当我的应用程序打开时,一切正常。即使我在手动打开应用程序后将其置于后台,所有通知也可以正常工作。

这是我的清单代码

      <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>

这是我的活动代码

 @Override
    public void onNewIntent(Intent newIntent) 
        this.setIntent(newIntent);

        // Now getIntent() returns the updated Intent
        if(getIntent().hasExtra("sno"))
            Log.d("New Intent DATA", "Yes it has the data sno is: " + getIntent().getExtras().getString("sno"));
        


    

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        if(getIntent().hasExtra("sno"))
            Log.d("DATA", "Yes it has the data");
        
    

我尝试了很多研究但无济于事。如果您需要任何其他详细信息,请告诉我。

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

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

【问题讨论】:

Open app on firebase notification received (FCM)的可能重复 你实现onMessageReceived了吗? @mallaudin OnMessageReceived 我猜是当您的应用程序处于前台时。这里我的应用在后台。 onMessageReceived 将被调用 data messages 即使应用程序在后台。 我同时发送通知和数据。如果您的应用处于后台或关闭状态,则通知中心会显示一条通知消息,并且该消息中的任何数据都会传递给由于用户点击通知而启动的意图。 【参考方案1】:

当您同时发送notificationdata payload 时,如果您的应用程序在后台,通知将显示在托盘中,但如果您的启动活动在后台单击通知,它将被带到前台并您将不会收到数据负载。

一种解决方案是将特定活动的launch mode 设置为singleTask 并在活动中实现onNewIntent 以接收data payload

通过这种方式,您的活动将被带到前台,并且驻留在堆栈中此活动顶部的活动将被销毁。

你可以找到更多关于启动模式here。

【讨论】:

为我工作。谢谢.. :)【参考方案2】:

有两种不同类型的消息

    通知消息 数据消息

通知消息的负载

 
    "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"
   ,
 

同时包含通知和数据负载的消息

接收同时包含通知和数据负载的消息时的应用行为取决于应用是在后台还是前台 - 本质上是在接收时它是否处于活动状态。

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

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

如果您想将数据与通知一起传递以处理应用程序的两种状态(活动和非活动),您必须使用数据消息。

更多详情请参见官方文档About FCM Messages(Message Types)

【讨论】:

我传递了一条数据消息,但在我的通知中我没有第二次收到它。 我刚刚调试了我的应用程序,发现当我通过第二个通知打开我的应用程序时,没有创建新实例。 我已经在问题中发布了部分代码。你还需要什么

以上是关于当应用程序处于后台时,Android 2nd 推送通知有效负载数据未在附加中接收的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序打开或应用程序处于后台时,Phonegap Firebase 推送通知不会触发事件侦听器

当应用程序处于后台时,从推送通知中插入 coredata 记录

当应用程序处于后台时接收 Apple 推送通知

当应用程序处于后台状态时,FCM 多个推送通知无法正常工作

当app在前台时发送推送通知

当应用程序处于后台或终止状态时如何增加推送通知批处理计数