1

我创建了一个 android 应用程序,该应用程序注册到 google c2dm 服务。并且它成功地从 c2dm 服务获取了 registration_id 令牌。

我已经签署了 Android Cloud 到设备消息传递表单,并且我收到了来自 c2dm 服务的确认电子邮件。

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

但是,在服务器端,它正在验证 google 服务,它正在接收 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();
    }

它仍在接收Error=InvalidRegistration来自 c2dm 服务的响应。

我做错了什么?

4

2 回答 2

0

好的,它解决了。我删除了HttpUtility.UrlEncode(px);,一切都按我预期的那样工作。

于 2010-12-22T15:56:34.690 回答
0

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

application/x-www-form-urlencoded

您需要将其设置为两者

  • 认证阶段,以及,
  • 发送消息。

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

希望对其他人有所帮助。

于 2011-03-25T17:53:06.950 回答