Android C2DM: проблемы с получением сообщения на устройстве - PullRequest
0 голосов
/ 19 октября 2011

Я сталкиваюсь с проблемой, когда пытаюсь получить сообщение на своем устройстве, все работает нормально, но когда я пытаюсь получить его, ничего не получается, я получаю:

id = 0: 1319039498507602% b50b7d2400000031

от https://android.apis.google.com/c2dm/send

это значит, что сообщение отправлено, не так ли?

но я не могу получить его в устройстве.

кто-нибудь может мне помочь?

спасибо заранее.

Редактировать: Мой manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="clouders.com" android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <permission
        android:name="clouders.com.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission
        android:name="clouders.com.permission.C2D_MESSAGE" />

    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".C2DMClientActivity" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".C2DMRegistrationReceiver"
            android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.REGISTRATION"></action>
                <category android:name="clouders.com" />
            </intent-filter>
        </receiver>

        <receiver android:name=".C2DMMessageReceiver"
            android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE"></action>
                <category android:name="clouders.com" />
            </intent-filter>
        </receiver>

        <activity android:name="RegistrationResultActivity"></activity>
        <activity android:name="MessageReceivedActivity"></activity>

    </application>
</manifest>

Ответы [ 3 ]

1 голос
/ 17 ноября 2011

на основе списков возможных кодов ответов: http://code.google.com/android/c2dm/#server, Я полагаю, что вы зарегистрировали сервер, отправляющий сообщение соответствующим образом, с помощью службы Google C2DM, и вы использовали правильный ключ аутентификации для сервера и идентификатор регистрации для Androidтелефон, так что google c2dm получил сообщение и отправил вам ответный код 200 вместе с id = 0: 1319039498507602% b50b7d2400000031 в качестве содержимого ответа http, где 0: 1319039498507602% b50b7d2400000031 является идентификатором отправленного сообщения .Я не знаю, нашли ли вы решение еще, но я бы предложил следующий механизм устранения неполадок / отладки по порядку, поскольку он может помочь кому-то еще:

1) Что такое параметр message / payload в вашем запросе https длясервер c2dm, потому что он понадобится вам для отладки на телефоне

2) Убедитесь, что у вас есть аккаунт Google, зарегистрированный на телефоне eggmail.Это можно сделать в разделе «Настройки телефона»> «Аккаунты и синхронизация» ...

3) Убедитесь, что устройство / телефон зарегистрировано и сервер использует идентификатор регистрации, который в данный момент находится на телефоне.Вы можете проверить это, но регистрируя ответ от вашей регистрации.На самом деле, сервер должен быть в состоянии связаться с телефоном через c2dm, даже если идентификатор регистрации на телефоне изменился, но просто для уверенности, lol, используйте то же самое на обоих концах.Также в намерении, которое вы используете для регистрации устройства Android, используйте адрес электронной почты, который сервер использовал для регистрации, с помощью c2dm в качестве параметра отправителя.

4) Записывайте входящие сообщения от c2dm.Я вижу, у вас есть класс C2DMMessageReceiver.Вы можете сделать это там.При этом вы можете увидеть параметр полезной нагрузки с сервера.Вы также можете создать уведомление, когда сообщение приходит с полезной нагрузкой в ​​качестве содержимого.Вы также можете использовать тост на Android для быстрого отображения.

Я надеюсь, что все это поможет.

0 голосов
/ 20 октября 2011

Вы проверили, может ли быть проблема с кодировкой? Ваши идентификаторы закодированы (я имею в виду% b50?).

Идентификатор, который вы получаете от https://android.apis.google.com/c2dm/send, - это идентификатор сообщения. В комментариях вы разместили тот же идентификатор, что и ваш регистрационный идентификатор? Это не должно быть одинаковым.

0 голосов
/ 19 октября 2011

Как вы настроили свой сторонний сервер (C2DM-sharp или PHP)? Я бы проверил код клиента, сравнив его с одним из примеров, таких как Google Chrome-to-Phone. Также убедитесь, что ваш зарегистрированный адрес электронной почты C2DM и пароль верны.

...