我已经创建了一个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
。
我在做什么错了?
你能上传你的项目源代码吗? – 2011-01-10 18:48:52
你能分享你的服务器端和客户端的源代码吗?谢谢 – 2011-02-05 08:27:08