C2DM错误= MissingRegistration我已经把registration_id来要求 [英] C2DM Error=MissingRegistration i already put registration_id to request
本文介绍了C2DM错误= MissingRegistration我已经把registration_id来要求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我工作到发送推送消息,从我的asp.net项目到Android手机和
我已经把REGISTER_ID在我的code,但我处理错误丢失的注册,我不明白它的原因。
下面是我的code:
公共无效的SendMessage(字符串registrationId,字符串数据,串sAuth)
{
字符串collapseKey = Guid.NewGuid()的ToString(N)。 ServicePointManager.ServerCertificateValidationCallback + =新RemoteCertificateValidationCallback(ValidateRemoteCertificate); 字符串的URL =https://android.apis.google.com/c2dm/send?
URL =网址+ HttpUtility.UrlEn code(registration_id =+ registrationId +&放大器; collapse_key的=+ collapseKey +&放大器; data.payload =+数据);
HttpWebRequest的要求=(HttpWebRequest的)HttpWebRequest.Create(URL);
request.Method =POST;
request.Headers.Add(授权,权威性的GoogleLogin =+ sAuth);
//request.ContentLength = 0; 字符串连接codeD = HttpUtility.UrlEn code(URL); ASCIIEncoding编码=新ASCIIEncoding();
字节[]缓冲= encoding.GetBytes(EN codeD); 方通流= request.GetRequestStream();
newStream.Write(缓冲液,0,buffer.Length);
newStream.Close(); //读回响应 尝试
{
HttpWebResponse响应=(HttpWebResponse)request.GetResponse();
如果(response.Status code ==的HTTPStatus code.OK)
{
流resStream = response.GetResponseStream();
StreamReader的SR =新的StreamReader(resStream);
字符串值= sr.ReadToEnd()的ToString()。
Label1.Text =价值;
//Response.Write(sr.ReadToEnd());
sr.Close();
resStream.Close();
}
}
赶上(异常前)
{
扔(除息);
}
}
解决方案
我的解决这样的问题;
HttpWebRequest的要求=(HttpWebRequest的)WebRequest.Create(https://android.clients.google.com/c2dm/send);
request.Method =POST;
request.KeepAlive = FALSE; NameValueCollection中postFieldNameValue =新的NameValueCollection();
postFieldNameValue.Add(registration_id,registrationId);
postFieldNameValue.Add(collapse_key的,1);
postFieldNameValue.Add(delay_while_idle,0);
postFieldNameValue.Add(data.message,邮件); 字符串POSTDATA = GetPostStringFrom(postFieldNameValue);
字节[]的字节数组= Encoding.UTF8.GetBytes(POSTDATA); request.ContentType =应用/的X WWW的形式urlen codeD;字符集= UTF-8;
request.ContentLength = byteArray.Length; request.Headers.Add(HTT prequestHeader.Authorization的GoogleLogin AUTH =+ authTokenString); 流数据流= request.GetRequestStream();
dataStream.Write(字节数组,0,byteArray.Length);
dataStream.Close();
//萨瓦斯
ServicePointManager.ServerCertificateValidationCallback + =委托(
目的
发件人,
System.Security.Cryptography.X509Certificates.X509Certificate
pCertificate,
System.Security.Cryptography.X509Certificates.X509Chain pChain,
System.Net.Security.SslPolicyErrors pSSLPolicyErrors)
{
返回true;
};
//// *********** WebResponse的响应= request.GetResponse();
的HTTPStatus code响应code =((HttpWebResponse)响应).STATUS code;
如果(响应code.Equals(的HTTPStatus code.Unauthorized)||响应code.Equals(的HTTPStatus code.Forbidden))
{
Console.WriteLine(未经授权 - 需要新的令牌);
}
否则,如果(!反应code.Equals(的HTTPStatus code.OK))
{
Console.WriteLine(从Web服务响应不正常:);
Console.WriteLine(((HttpWebResponse)响应).StatusDescription);
} StreamReader的读者=新的StreamReader(response.GetResponseStream());
字符串responseLine = reader.ReadLine();
reader.Close();
i am working to sent a push message to android phone from my asp.net project and i already put register_id in my code but i handle an error Missing registration, i didnt understand its reason.
Here is my code:
public void SendMessage(string registrationId, string data, string sAuth)
{
string collapseKey = Guid.NewGuid().ToString("n");
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);
string url = "https://android.apis.google.com/c2dm/send?";
url = url + HttpUtility.UrlEncode("registration_id=" + registrationId + "&collapse_key=" + collapseKey + "&data.payload=" + data);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.Headers.Add("Authorization", "GoogleLogin auth=" + sAuth);
//request.ContentLength = 0;
string encoded = HttpUtility.UrlEncode(url);
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] buffer = encoding.GetBytes(encoded);
Stream newStream = request.GetRequestStream();
newStream.Write(buffer, 0, buffer.Length);
newStream.Close();
//Reading return Response
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Stream resStream = response.GetResponseStream();
StreamReader sr = new StreamReader(resStream);
string value = sr.ReadToEnd().ToString();
Label1.Text = value;
//Response.Write(sr.ReadToEnd());
sr.Close();
resStream.Close();
}
}
catch (Exception ex)
{
throw (ex);
}
}
解决方案
İ solve the problem like this;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://android.clients.google.com/c2dm/send");
request.Method = "POST";
request.KeepAlive = false;
NameValueCollection postFieldNameValue = new NameValueCollection();
postFieldNameValue.Add("registration_id", registrationId);
postFieldNameValue.Add("collapse_key", "1");
postFieldNameValue.Add("delay_while_idle", "0");
postFieldNameValue.Add("data.message", message);
string postData = GetPostStringFrom(postFieldNameValue);
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
request.ContentLength = byteArray.Length;
request.Headers.Add(HttpRequestHeader.Authorization, "GoogleLogin auth=" + authTokenString);
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
//savas
ServicePointManager.ServerCertificateValidationCallback += delegate(
object
sender,
System.Security.Cryptography.X509Certificates.X509Certificate
pCertificate,
System.Security.Cryptography.X509Certificates.X509Chain pChain,
System.Net.Security.SslPolicyErrors pSSLPolicyErrors)
{
return true;
};
////***********
WebResponse response = request.GetResponse();
HttpStatusCode responseCode = ((HttpWebResponse)response).StatusCode;
if (responseCode.Equals(HttpStatusCode.Unauthorized) || responseCode.Equals(HttpStatusCode.Forbidden))
{
Console.WriteLine("Unauthorized - need new token");
}
else if (!responseCode.Equals(HttpStatusCode.OK))
{
Console.WriteLine("Response from web service not OK :");
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
}
StreamReader reader = new StreamReader(response.GetResponseStream());
string responseLine = reader.ReadLine();
reader.Close();
这篇关于C2DM错误= MissingRegistration我已经把registration_id来要求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文