Android C2DM Invalidregistration

我创建了一个Android应用程序,注册谷歌c2dm服务。 它成功地从c2dm服务获得了registration_id令牌。

我已经签署了Android Cloud to Device Messaging表单,我收到了来自c2dm服务的确认电子邮件。

客户端一切似乎都没问题,它在模拟器环境中得到了registration_id。 所以,没关系。

但是,在服务器端,它正在validation谷歌服务,它正在接收validation码然后它调用c2dm发送url与下面的代码。

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错误,但这是因为手机上没有使用与服务器身份validation的发件人相同的帐户。

希望能帮助别人。