2010-12-22 76 views
1

我已经创建了一个Android应用程序,注册到谷歌c2dm服务。它从c2dm服务成功获取registration_id令牌。Android C2DM Invalidregistration

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

在客户端一切看起来都不错,它在仿真器环境中获得了registration_id。所以,没关系。

但是,在服务器端,它正在验证谷歌服务,它接收Auth代码,然后它调用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

我在做什么错了?

+0

你能上传你的项目源代码吗? – 2011-01-10 18:48:52

+0

你能分享你的服务器端和客户端的源代码吗?谢谢 – 2011-02-05 08:27:08

回答

0

好的,它解决了。 我删除了HttpUtility.UrlEncode(px);,一切正常,如我所料。

0

我有这个问题很长一段时间,直到我设置的ContentType TO-

application/x-www-form-urlencoded 

你需要将其设置为两个

  • 认证阶段,
  • 的发信息。

然后我得到NotRegistered错误,但这是由于在手机上没有使用与服务器身份验证的发件人相同的帐户。

希望能帮助别人。