如何使用HttpClient Async&等待发布FCM消息

时间:2017-02-04 07:04:55

标签: c# firebase http-headers httpclient firebase-cloud-messaging

我正在努力使用HttpClient发布FCM消息。我收到无效的标头格式异常。我可以使用WebRequest发布FCM消息。但我想通过使用HttpClient尝试Async和Await。

请建议我哪个是最好的HttpClient或WebRequest。

<div>
<br>String uri;
<br>uri = "https://fcm.googleapis.com/fcm/send";

<br>var postData = new
<br>{
    <br>to = DeviceID,
<br>data = new
{
    MessageID = enquiryid
},<br>

<br>notification = new
{
    body = enquirymessage,
    title = FromUser,
    icon = "myicon"
}<br>
};<br>

<br>var serializer = new JavaScriptSerializer();
<br>var json = serializer.Serialize(postData);<br>
<br>using (var client = new HttpClient())
<br>{
<p>client.DefaultRequestHeaders.Authorization = new    AuthenticationHeaderValue

("key", "=" + fcmDetails.SERVER_API_KEY);<br>
<p>client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue

("application/json"));
<p>client.DefaultRequestHeaders.Add("Sender: id ", "="+ fcmDetails.PROJECT_KEY);

<p>using (var r =  client.PostAsJsonAsync(new Uri(uri), json))
<br>{
    <br>string result = await r.Content.ReadAsStringAsync();
    <br>sResponseFromServer= result;

}<br>
}

1 个答案:

答案 0 :(得分:2)

替换代码中的行

client.DefaultRequestHeaders.Add("Sender: id ", "="+ fcmDetails.PROJECT_KEY);

client.DefaultRequestHeaders.Add("Sender", "id=" + fcmDetails.PROJECT_KEY);

Use the sample code
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://fcm.googleapis.com/fcm/");
client.DefaultRequestHeaders
                      .Accept
                      .Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("key", "=" + fcmDetails.SERVER_API_KEY);
                client.DefaultRequestHeaders.Add("Sender","id=" +  fcmDetails.PROJECT_KEY);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "relativeAddress");
                var data = new
                {
                    to = DeviceID,
                    notification = new
                    {
                        body = "This is the message",
                        title = "This is the title",
                        icon = "myicon"
                    }
                };

                var serializer = new JavaScriptSerializer();
                var json = serializer.Serialize(data);
                request.Content = new StringContent(json,
                                                    Encoding.UTF8,
                                                    "application/json");//CONTENT-TYPE header

                var data1 = client.PostAsync("send", request.Content);
                var d = data1.Result.Content.ReadAsStringAsync();