我正在尝试通过C#.net将消息发送到GCM服务器
我找到了一个很好的例子,我正在尝试使用
http://www.codewithasp.net/2015/11/send-message-gcm-c-sharp-single-multiple.html
问题是我收到“远程服务器返回错误:(400)错误的请求。” 每当我尝试从此行获取响应时发生错误
WebResponse wResponse = wRequest.GetResponse();
我试图找到问题所在,将API代码从服务器更改为Android,再更改为浏览器,结果为(400)错误的请求或(401)未经授权。
不确定我在这里做错了什么,在示例中看起来非常简单明了。
非常感谢帮助
这是代码
NotificationManager nm = new NotificationManager();
List<string> ls = new List<string>(new string[] { "ABCDEFGHIJKLMNOPQRSTUVWXYZ" });
nm.SendNotification(ls, " Hi.. This is a test","Hi.. Title",1);
这是课程
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Serialization;
using System.Net;
using System.Text;
using System.IO;
namespace WebApplication1
{
public class NotificationManager
{
private class NotificationMessage
{
public string Title;
public string Message;
public long ItemId;
}
public NotificationManager()
{
//
// TODO: Add constructor logic here
//
}
public string SendNotification(List<string> deviceRegIds, string message, string title, long id)
{
try
{
string regIds = string.Join("\",\"", deviceRegIds);
string AppId = "AIzaSyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var SenderId = "1234567890";
NotificationMessage nm = new NotificationMessage();
nm.Title = title;
nm.Message = message;
nm.ItemId = id;
var value = new JavaScriptSerializer().Serialize(nm);
WebRequest wRequest;
wRequest = WebRequest.Create("https://android.googleapis.com/gcm/send");
wRequest.Method = "post";
wRequest.ContentType = " application/json;charset=UTF-8";
wRequest.Headers.Add(string.Format("Authorization: key={0}", AppId));
wRequest.Headers.Add(string.Format("Sender: id={0}", SenderId));
string postData = "{\"collapse_key\":\"score_update\",\"time_to_live\":108,\"delay_while_idle\":true,\"data\": { \"message\" : " + "\"" + value + "\",\"time\": " + "\"" + System.DateTime.Now.ToString() + "\"},\"registration_ids\":[\"" + regIds + "\"]}";
Byte[] bytes = Encoding.UTF8.GetBytes(postData);
wRequest.ContentLength = bytes.Length;
Stream stream = wRequest.GetRequestStream();
stream.Write(bytes, 0, bytes.Length);
stream.Close();
WebResponse wResponse = wRequest.GetResponse();
stream = wResponse.GetResponseStream();
StreamReader reader = new StreamReader(stream);
String response = reader.ReadToEnd();
HttpWebResponse httpResponse = (HttpWebResponse)wResponse;
string status = httpResponse.StatusCode.ToString();
reader.Close();
stream.Close();
wResponse.Close();
if (status == "")
{
return response;
}
else
{
return "";
}
}
catch( Exception ex)
{
return ex.ToString();
}
}
}
}
这是我获取API ID和发件人ID的方法
我是您引用的本网站的作者。感谢您指出错误,实际上问题出在postData字符串中。我们将值用双引号括起来(“ like this”),但这是一个json字符串,因此我们不需要这样做。只需删除postData字符串中值的双引号,它将为您工作。
所以只要改变这个
string postData = "{\"collapse_key\":\"score_update\",\"time_to_live\":108,\"delay_while_idle\":true,\"data\": { \"message\" : " + "\"" + value + "\",\"time\": " + "\"" + System.DateTime.Now.ToString() + "\"},\"registration_ids\":[\"" + regIds + "\"]}";
对此
string postData = "{\"collapse_key\":\"score_update\",\"time_to_live\":108,\"delay_while_idle\":true,\"data\": { \"message\" : " + value + ",\"time\": " + "\"" + System.DateTime.Now.ToString() + "\"},\"registration_ids\":[\"" + regIds + "\"]}";
到此为止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句