我面临一个非常奇怪的问题,即当应用程序处于后台时,第二次没有收到有效负载数据。
对于前 - (当我还没有开始我的应用程序时)
当我的应用程序打开时,一切正常。即使我在手动打开它后将我的应用程序放在后台,然后所有通知也正常工作。
这是我的清单代码
<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发送包含自定义数据的通知。我也试过通过网络服务器发送,但仍然没有工作。
我调试了我的应用,发现当我通过第二次通知打开我的应用时,没有创建新实例。
答案 0 :(得分:2)
当您同时发送notification
和data payload
时,如果您的应用位于后台,则会在托盘中显示通知,但如果您的启动活动位于后台,则会点击通知,带到前台,你不会收到数据有效载荷。
一种解决方案是将特定actvitiy的launch mode
设置为 singleTask ,并在活动中实施onNewIntent
以接收data payload
。
通过这种方式,您的活动将被置于前台,并且将销毁位于此活动顶部的活动。
您可以找到有关启动模式here的更多信息。
答案 1 :(得分:1)
有两种不同类型的消息
付费通知消息
{
"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"
},
}
包含通知和数据有效负载的邮件
接收包含通知和数据有效负载的消息时的应用行为取决于应用是在后台还是在前台 - 实际上是否在接收时处于活动状态。
在后台时,应用会在通知托盘中收到通知有效内容,并仅在用户点击通知时处理数据有效内容。
在前台时,您的应用会收到一个消息对象,其中包含两个有效负载。
如果要将数据与通知一起传递以处理应用程序状态(活动和非活动),则必须使用数据消息。
的更多详细信息