C# Android C2DM无效注册
我已经创建了一个android应用程序,可以注册到谷歌c2dm服务。它成功地从c2dm服务中获得了注册id令牌 我已经签署了Android云到设备的消息表单,并且收到了来自c2dm服务的确认电子邮件 客户端似乎一切正常,它正在模拟器环境中获得注册id。所以,没关系 但是,在服务器端,它正在验证google服务,它正在接收身份验证代码,然后调用c2dm发送url,代码如下C# Android C2DM无效注册,c#,asp.net,android,push-notification,android-c2dm,C#,Asp.net,Android,Push Notification,Android C2dm,我已经创建了一个android应用程序,可以注册到谷歌c2dm服务。它成功地从c2dm服务中获得了注册id令牌 我已经签署了Android云到设备的消息表单,并且收到了来自c2dm服务的确认电子邮件 客户端似乎一切正常,它正在模拟器环境中获得注册id。所以,没关系 但是,在服务器端,它正在验证google服务,它正在接收身份验证代码,然后调用c2dm发送url,代码如下 public void SendMessage(string registrationId, string data)
public void SendMessage(string registrationId, string data)
{
ServicePointManager.ServerCertificateValidationCallback += delegate(
object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
return true;
};
string collapseKey = Guid.NewGuid().ToString("n");
string url = "https://android.apis.google.com/c2dm/send";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.Headers.Add("Authorization", "GoogleLogin auth=DQAAAKYAAACE_0NqG8Sj5lBf4YSPXs_ltQbTzPsAL5u1Q1KGF...");
string px = "registration_id=" + registrationId + "&collapse_key=" + collapseKey + "&data.payload=" + data;
string encoded = HttpUtility.UrlEncode(px);
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] buffer = encoding.GetBytes(encoded);
Stream newStream = request.GetRequestStream();
newStream.Write(buffer, 0, buffer.Length);
newStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if(response.StatusCode == HttpStatusCode.OK)
{
Stream resStream = response.GetResponseStream();
StreamReader sr = new StreamReader(resStream);
Console.Write(sr.ReadToEnd());
sr.Close();
resStream.Close();
}
Console.WriteLine();
Console.ReadLine();
}
它仍在接收来自c2dm服务的Error=InvalidRegistration
响应
我做错了什么 好的,问题解决了。
我删除了
HttpUtility.UrlEncode(px)代码>一切都按我预期的那样工作。我有这个问题很久了,直到我将ContentType设置为-
application/x-www-form-urlencoded
您需要将两者都设置为该值
- 认证阶段和
- 发送消息
然后我得到了NotRegistered
错误,但这是由于没有在手机上使用与发送方相同的帐户进行服务器身份验证
希望这能帮助别人 很高兴看到你解决了这个问题。仅供参考:您应该只编码querystring值,而不是querystring本身。您可以上传您的项目源代码吗?您可以共享服务器端和客户端的源代码吗?谢谢