通过SDK

时间:2017-04-04 14:08:07

标签: android firebase firebase-cloud-messaging

我有一个Android应用程序,它调用Web服务向我们发送消息以获得支持。

我们开发了一个可以回复邮件的网站,我们使用Firebase。到目前为止,我们只是发送了一个标题和一条消息:

var applicationID = "snip";
var senderId = "snip";
WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
tRequest.Method = "post";
tRequest.ContentType = "application/json";

var data = new
{
    to = model.RequestFirebaseID,
    notification = new
    {
        body = model.ResponseMessage,
        title = model.ResponseTitle
    }
};

在Android应用中,我可以使用以下Java代码

提取消息标题
String notificationTitle = remoteMessage.getNotification().getTitle();
String notificationBody = remoteMessage.getNotification().getBody();

但是现在我正在尝试发回一个名为id的自定义字段,因此我将代码修改为

var data = new
{
    to = model.RequestFirebaseID,
    notification = new
    {
        body = model.ResponseMessage,
        title = model.ResponseTitle,
        requestid = model.id
    }
};

所以现在当我使用Firebase向设备发送消息时,我有这个代码尝试读取id字段。

String messageID = remoteMessage.getData().get("requestid");

然而,这导致最终为空。

所以我尝试通过Firebase控制台测试发送,我将requestid添加到自定义数据部分并给它一个值,上面的代码能够读取它。

似乎当我通过Web应用程序发送时,它无法看到requestid字段。

1 个答案:

答案 0 :(得分:2)

您必须在有效负载内包含data消息。像这样:

var payload = new
{
    to = model.RequestFirebaseID,
    notification = new
    {
        body = model.ResponseMessage,
        title = model.ResponseTitle
    },
    data = new
    {
        requestid = model.id
    }
};

我将根变量名称更改为payload以区分它。

如果您在使用Firebase Notifications控制台发送消息时添加自定义数据,则会将其包含在data消息参数中,而不是notification消息中。有关两者的区别,请参阅Message Types文档。