C2DM错误= MissingRegistration我已经把registration_id来要求 [英] C2DM Error=MissingRegistration i already put registration_id to request

查看:160
本文介绍了C2DM错误= MissingRegistration我已经把registration_id来要求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作到发送推送消息,从我的asp.net项目到Android手机和
我已经把REGISTER_ID在我的code,但我处理错误丢失的注册,我不明白它的原因。

下面是我的code:

 公共无效的SendMessage(字符串registrationId,字符串数据,串sAuth)
{
    字符串collapseKey = Guid.NewGuid()的ToString(N)。    ServicePointManager.ServerCertificateValidationCallback + =新RemoteCertificateValidationCallback(ValidateRemoteCertificate);    字符串的URL =htt​​ps://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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆