我在将后台数据传递到屏幕时遇到困难。在后台,应用正在正确调用屏幕,但未拾取此屏幕所需的通知中"数据"(来自数据对象的 ID(中的数据。 在前景中,我正确获得了"数据"。
通知 JSON
{
"to" : "akshih890uhnkjh389jfkn3...",
"priority" : "normal",
"time_to_live" : 0,
"data" : {
"type" : "my_type",
"id" : "my_id"
},
"notification" : {
"body" : "Test body",
"title" : "Test title",
"click_action" : ".MyActivity"
}
}
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
String title = remoteMessage.getNotification().getTitle();
String body = remoteMessage.getNotification().getBody();
String clickAction = remoteMessage.getNotification().getClickAction();
Map<String, String> data = remoteMessage.getData();
Gson gson = new Gson();
MyObject myObject = new MyObject(data.get("id"), data.get("type"), remoteMessage.getNotification().getTitle(),
remoteMessage.getNotification().getBody());
Intent intent = new Intent(myObject.getClickAction());
intent.putExtra("id", myObject.getId());
PendingIntent contentIntent = PendingIntent.getActivity(
this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
sendFCMNotification(title, body, contentIntent);
}
我的活动
if(getIntent() != null) {
Bundle extras = getIntent().getExtras();
code = extras.getString("id");
}
int id = Integer.valueOf(remoteMessage.getData().get("id"));
由于您使用remoteMessage.getData()
,因此您将获得整个data
对象,而不是内部data
json 的对象,因此您可以获得字段的实际data
json。
String data = remoteMessage.getData();
Gson gson = new Gson();
MyObject myObject = gson.fromJson(data, MyObject.class);
如果您的应用在后台运行,Firebase 将不会触发 onMessageReceived((。为什么。。。。。?我不知道。在这种情况下,我认为实施FirebaseMessagingService没有任何意义。
根据文档,如果要处理后台消息到达,则必须将"click_action"与消息一起发送。但是,如果您只能通过 Firebase API 从 Firebase 控制台发送消息,则无法执行此操作。这意味着您必须构建自己的"控制台",以使营销人员能够使用它。所以,这使得火力基地控制台也相当无用!
这个新工具背后确实有很好的、有前途的想法,但执行得很糟糕。
我想我们将不得不等待新版本和改进/修复!
在后台,如果您想调用特定活动,您可以从 Intent extras 获取数据,然后在数据属性click_action指定它
指:
火碱服务器参考
火力基地推送
我发现了问题,当服务器在后台向我发送通知对象时,我看不到日期。但是,当服务器仅发送我获得 id 的日期时,我将如何构建没有标题和正文数据的通知?