我正在使用Firebase,并测试在应用程序处于后台时从服务器向应用程序发送通知。通知发送成功,它甚至出现在设备的通知中心上,但是当通知出现或者即使我单击它,我的FCMessagingService中的onMessageReceived方法也从未被调用。
当我在应用程序处于前台时进行测试时,调用了onMessageReceived方法,所有工作都很好。该问题发生在应用程序在后台运行时。
这是有意为之的行为,还是有办法让我解决这个问题?
以下是我的FBMessagingService:
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
public class FBMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.i("PVL", "MESSAGE RECEIVED!!");
if (remoteMessage.getNotification().getBody() != null) {
Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getNotification().getBody());
} else {
Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getData().get("message"));
}
}
}
从服务器请求中完全删除通知
字段。仅发送数据
并在OnMessageReceived()
中处理它,否则,当应用程序处于后台或被杀死时,您的OnMessageReceived()
将不会被触发。
不要忘记在通知请求中包含“优先级”:“高”
字段。根据文件:数据电文是以正常的优先顺序发送的,因此不会立即到达;这也可能是问题所在。
这是我从服务器发送的内容
{
"data":{
"id": 1,
"missedRequests": 5
"addAnyDataHere": 123
},
"to": "fhiT7evmZk8:APA91bFJq7Tkly4BtLRXdYvqHno2vHCRkzpJT8QZy0TlIGs......",
"priority": "high"
}
因此您可以像这样在onMessageReceived(RemoteMessage message)
中接收数据...假设我必须获取id
Object obj = message.getData().get("id");
if (obj != null) {
int id = Integer.valueOf(obj.toString());
}
这是按照预期工作的,只有当应用程序处于前台时,通知消息才会传递给onMessageReceived回调。如果您的应用程序处于后台或已关闭,则通知中心将显示一条通知消息,来自该消息的任何数据将传递给用户点击通知后启动的意图。
您可以指定click_action来指示当用户点击通知时应该启动的意图。如果未指定click_action,则使用主activity。
启动意图时,可以使用
getIntent().getExtras();
若要检索将包括随通知消息一起发送的任何数据的集,请执行以下操作。
有关通知消息的更多信息,请参阅文档。
我试图完成的是解析来自Remotemessage的传入数据,并根据自定义标记对其进行不同的处理。例如,如果数据映射包含一个名为“my_custom_tag”的字段,我希望完全覆盖弹出的标准firebase消息并编写一个自定义消息。 问题是,当应用程序在后台运行时,我放入onMessageReceived的任何代码都不会被触发。当应用程序在前台运行时,它工作得很好,但如果应用程序在后台,它将不会检测
问题内容: 我有一个View Controller,其中我的值为0(标签),而当我从另一个视图控制器中打开该View Controller时,我已设置为将label的值设置为20。它可以正常工作,但是当我关闭我的应用程序并再次打开我的应用程序时,该值不会更改,因为,并且没有任何调用。打开我的应用程序时该怎么打电话。我需要做些什么吗? 问题答案: 我对事件的确切顺序感到好奇,所以我对应用程序进行了如
我清楚地阅读了很多关于firebase推送通知行为的文档。当我的应用程序位于后台时,我可以在系统托盘上看到通知,但当应用程序位于前台时,不会触发“收到消息时”的回调。我可以看到我的应用程序上收到消息的日志。我试着用数据负载和没有数据负载的应用服务器进行通话。我的应用服务器正在使用php脚本来触发fcm API。下面是我正在使用的php脚本 以下是我在我的Android应用程序中使用的服务
onMessageReceived(RemoteMessage RemoteMessage)在应用程序处于后台时未调用或仅显示{“body”:“test”,“title”:“test notification}之类的json字符串
我可能已经阅读了所有其他与此相关的SO线程,但我找不到答案,而且在Android监视器中也没有日志跟踪。有人对此有提示吗?