Android c2dm Сообщение не получено

Я внедрил c2dm в свое приложение для телефона. Приложение c2dm действительно получает сообщение несколько дней назад, но после этого перестает получать какое-либо сообщение.

При нажатии на ссылку google c2dm я получил ответ «id = 0: 1325918022124320% 6c25a09400000031». с заголовком нормально, здесь что-то не так?

Я использую следующее для отправки сообщения

   public void SendMessage(string registrationId, string data, string sAuth)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://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.payload", data);
        string postData = ConstructQueryString(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=" + sAuth);

        Stream dataStream = request.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();

        WebResponse response = request.GetResponse();
        HttpStatusCode responseCode = ((HttpWebResponse)response).StatusCode;
        if (responseCode.Equals(HttpStatusCode.Unauthorized) || responseCode.Equals(HttpStatusCode.Forbidden))
        {
            Response.Write("Unauthorized - need new token");
        }
        else if (!responseCode.Equals(HttpStatusCode.OK))
        {
            Response.Write("Response from web service not OK :");
            Response.Write(((HttpWebResponse)response).StatusDescription);
        }

        StreamReader reader = new StreamReader(response.GetResponseStream());
        string responseLine = reader.ReadLine();
        reader.Close();
        Response.Write(responseLine); 

    }

person ericlee    schedule 07.01.2012    source источник


Ответы (1)


дважды проверьте свой регистрационный ключ Google. Я думаю, что это могло как-то измениться, поэтому ты не можешь получать никакого массажа. убедитесь, что ключи на обоих серверах и на клиенте одинаковы.

person Harsh Trivedi    schedule 07.01.2012
comment
спросите дальше, если у вас есть какие-либо вопросы - person Harsh Trivedi; 07.01.2012
comment
привет, я пытался вручную ввести ключ регистрации, но он все еще не работает. я даже перезагрузил свой телефон и перерегистрировал - person ericlee; 07.01.2012
comment
Зарегистрируйте устройство с новой новой учетной записью Gmail, а затем зарегистрируйтесь в c2dm. после этого вы получите идентификатор регистрации, передайте этот же идентификатор в код на стороне сервера для отправки сообщения. я думаю у тебя проблема с ключом - person Harsh Trivedi; 07.01.2012
comment
зарегистрировать устройство, как при отправке электронного письма на сервер и получении регистрационного идентификатора из трансляции? Спасибо - person ericlee; 07.01.2012
comment
Intent registrationIntent = новое намерение (com.google.android.c2dm.intent.REGISTER); registrationIntent.putExtra (приложение, PendingIntent.getBroadcast (это, 0, новое намерение (), 0)); registrationIntent.putExtra (отправитель, [email protected]); this.startService (registrationIntent); - person Harsh Trivedi; 07.01.2012
comment
вы должны написать приведенный выше код в своем приложении, чтобы получить регистрационный идентификатор от Google, который вы должны передать на сервер от отправки сообщения на устройство - person Harsh Trivedi; 07.01.2012
comment
да, я уже сделал, просто хочу подтвердить :). прием работал несколько дней назад, но внезапно перестал работать :(. Попробуй вашу рекомендацию по перерегистрации. - person ericlee; 07.01.2012
comment
Теперь вам нужно проверить свой код с нуля. убедитесь, что сеть устройства работает идеально, адрес электронной почты активен или нет, вам также необходимо проверить код на стороне сервера и убедиться, что оба ключа одинаковы, распечатать все ответы в logcat, чтобы вы могли получить некоторое представление - person Harsh Trivedi; 07.01.2012
comment
Пробовал, перерегистрация и снова не получается. хотя мой ответ (HttpWebResponse)) .StatusDescription дает мне ответ ОК. может быть это мое приложение для Android? он может получить идентификатор регистрации, просто не может получить сообщение - person ericlee; 07.01.2012
comment
да, я дал все разрешения. Я использовал то же приложение, и оно работало несколько дней назад :(, но оно внезапно прекратилось. Есть ли другие связанные проблемы? например, использование другой сим-карты? - person ericlee; 07.01.2012
comment
Я совершенно уверен, что мобильное приложение - это то же самое приложение, которое работало раньше. может это быть веб-приложение. Можете ли вы проверить, что я написал сверху, и проверить, нет ли проблем с отправкой сообщения на c2dm - person ericlee; 07.01.2012
comment
ха-ха, не знаю, почему это снова сработало. я перерегистрировал свой исходный адрес электронной почты, и это сработало :) - person ericlee; 07.01.2012