FCM,未接收数据

时间:2018-07-27 08:42:20

标签: android firebase firebase-cloud-messaging

我收到通知,标题和正文都显示,但没有收到数据。

{
  "notification":{
    "body":"This is message body",
    "title":"This is Title",
    "click_action":"clickAction",
     "data":{
        "post_id":"post id",
        "update":"no"
        }
    },
 "to":"token"
}

这是FCM的json,其他一切工作正常,我收到通知,通知打开一个特定页面,但是我无法从通知中获取数据。

这是MyFirebaseMessaging.java

中的函数
  private void showNotification(RemoteMessage.Notification notification, 
  Map<String, String> data) {

    String clickAction = notification.getClickAction();

    Intent intent = new Intent(clickAction);
    if (data.size() > 0){
        String post_id = data.get("post_id");
        Bundle bundle = new Bundle();
        bundle.putString("blog_post_id",post_id);
        intent.putExtras(bundle);
    } else {
        String post_id = "post id";
        Bundle bundle = new Bundle();
        bundle.putString("blog_post_id",post_id);
        intent.putExtras(bundle);
    }
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingIntent = PendingIntent.getActivities(this, 0, new Intent[]{intent}, PendingIntent.FLAG_ONE_SHOT);

我也试过没有捆绑,但结果相同。 在clickAction活动中,我收到空值。 这是我在ClickAction类中用于接收Intent的代码

blog_post_id = getIntent().getStringExtra("blog_post_id");
Log.e(TAG,"blog_post_id "+blog_post_id);

编辑1:问题已解决,由于某些原因,clickAction活动正在从其他活动接收getIntent()并生成null。所以我又创建了一个getIntent()并添加了

String id = null;
    try {
        id = getIntent().getStringExtra("id");
        blog_post_id = getIntent().getStringExtra("blog_post_id");
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        if (id.length() > 0) {
            blog_post_id = id;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

这解决了我的问题。

1 个答案:

答案 0 :(得分:0)

问题已解决,由于某些原因,clickAction活动正在从其他活动接收getIntent()并生成空值。因此我又创建了一个getIntent()并添加了。 所以我只是将它们合并,就解决了问题。

主要问题是-

Activity1将数据发送到blog_post_id

Activity2也希望将数据发送到blog_post_id

但是,由于blog_post_id定期需要来自Activity1的数据,如果它没有收到来自null pointer exception的数据,则会生成Activity1, 所以我只是将Activity2的数据放入String id并将它们合并。

String id = null;
try {
    id = getIntent().getStringExtra("id");
    blog_post_id = getIntent().getStringExtra("blog_post_id");
} catch (Exception e) {
    e.printStackTrace();
}

try {
    if (id.length() > 0) {
        blog_post_id = id;
    }
} catch (Exception e) {
    e.printStackTrace();
}