从 android 中的 FCM 获取自定义有效负载

Posted

技术标签:

【中文标题】从 android 中的 FCM 获取自定义有效负载【英文标题】:Get custom payload from FCM in android 【发布时间】:2016-11-14 06:47:24 【问题描述】:

我必须从 FCM 推送通知中阅读下面提到的键。

     
      "from_id": "",
      "data":   
        "sender_id": "15", 
        "receiver_id": "42", 
        "sender_name": "Addy", 
        "alert": "Addy sent you a message.",
        "notification_type": "message",
        "message": "testing" 
              
     

我正在使用

      public void onMessageReceived(RemoteMessage remoteMessage) 

      String title=remoteMessage.getData().get("sender_name");

      sendNotification(title, "");

      

问题是 title=remoteMessage.getData.get("sender_name"); returns null ,当我在浏览器中查看时,它显示数据存在于 sender_name 中。

【问题讨论】:

虽然我无法解决它,因为我开始使用 firebase,但我可以告诉你在哪里可以找到解决方案,因为它对我帮助很大。这里androidhive.info/2012/10/… @SameerKhan1406 我正在尝试这个 JSONObject json = new JSONObject(remoteMessage.getData().toString());字符串标题 = json.getString("sender_name");但我收到 JSONException。 “ sender_name 没有值”。但在 logcat 中,我可以看到针对 Data PayLoad: 标记的值。 获取 json 对象作为响应,而不是获取单个数据,然后使用 json.getString("sender_name");分享你的代码,我明天全程帮你好吗? 【参考方案1】:
public void onMessageReceived(RemoteMessage remoteMessage) 
        Log.e(TAG, "From: " + remoteMessage.getFrom());

        if (remoteMessage == null)
            return;

        // Check if message contains a notification payload.
        if (remoteMessage.getNotification() != null) 
            Log.e(TAG, "Notification Body: " + remoteMessage.getNotification().getBody());
            handleNotification(remoteMessage.getNotification().getBody());
        

        // Check if message contains a data payload.
        if (remoteMessage.getData().size() > 0) 
            Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());

            try 
                JSONObject json = new JSONObject(remoteMessage.getData().toString());
                handleDataMessage(json);
             catch (Exception e) 
                Log.e(TAG, "Exception: " + e.getMessage());
            
        
    

【讨论】:

【参考方案2】:

你可以试试这个

   if (remoteMessage.getNotification() != null) 
                Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
            

【讨论】:

以上是关于从 android 中的 FCM 获取自定义有效负载的主要内容,如果未能解决你的问题,请参考以下文章

Flutter iOS 和 Android 中的 FCM 自定义声音

无法从android中的自定义列表视图中获取所选项目

在 Android 自定义操作系统中未收到 FCM 推送通知

Android推送通知的自定义声音不起作用(FCM)

react native fcm在android上有效,但在ios上无效

使用 FCM 在 Android 中自定义点对点通信