通过AWS SNS将JSON数据有效负载发送到FCM

时间:2017-03-20 12:40:52

标签: c# amazon-web-services firebase firebase-cloud-messaging amazon-sns

我正在尝试将具有data有效负载的json消息从AWS SNS发送到FCM。根据另一个线程,我从SNS发送的JSON消息应采用以下形式:

{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}

在我的Android应用中,我扩展了FirebaseMessagingService并覆盖了OnMessageReceived方法来处理传入的推送通知。

以下是我的代码:

    public override void OnMessageReceived(RemoteMessage message)
    {
        string messageBody = message.GetNotification().Body; //Fails here
        int custom1;
        string custom2 = string.Empty;

        try { custom1 = Convert.ToInt32(message.Data["custom1"]); }
        catch (KeyNotFoundException e) { custom1 = -1; }

        try { custom2 = message.Data["custom2"].ToString(); }
        catch (KeyNotFoundException e) { custom2 = "err"; }

        PublishNotification(messageBody, custom1, custom2);
    }

当我使用上面写的JSON消息通过SNS发送自定义通知时,会成功收到消息。但是,当我尝试处理JSON时,一旦达到message.GetNotification().Body,它就会失败。我收到的错误告诉我身体没有包含在JSON消息中。

我的问题是,从AWS SNS向FCM发送data个有效负载时,正确的JSON消息是什么。

我也尝试了以下替代方案,但无济于事:

{
"GCM": "{ \"data\": { \"text\": \"test message\" } }"
}

{
"GCM": "{ \"data\": { \"body\": \"test message\" } }"
}

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

根据此相关SO thread,SNS生成的消息将采用以下形式:

{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}

如果没有实现接收它们的服务,将忽略data个有效负载,而应发送notification个有效负载。为此,只需将JSON消息更改为:

{
"GCM": "{ \"notification\": { \"text\": \"test message\" } }"
}

有关详情,请查看指定链接中的answer

答案 1 :(得分:0)

我将string messageBody = message.GetNotification().Body;更改为messageBody = message.Data["message"].ToString();并成功设法检索邮件正文的内容。