Android C2DM:在设备中接收消息的问题

时间:2011-10-19 15:58:22

标签: php android-manifest android-c2dm

当我尝试在我的设备中接收消息时,我遇到了一个问题,一切正常但是当我尝试重新安装它时没有任何结果,我得到了:

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 个答案:

答案 0 :(得分:1)

基于可能的响应代码列表:http://code.google.com/android/c2dm/#server,我相信您注册了服务器,使用google c2dm服务正确发送邮件,并且您已经使用了正确的服务器身份验证密钥和android的注册ID电话,所以google c2dm收到了消息并发回了响应代码200以及id = 0:1319039498507602%b50b7d2400000031作为http响应内容,其中0:1319039498507602%b50b7d2400000031是已发送消息的ID 。我不知道您是否找到了解决方案,但我会建议以下故障排除/调试机制,因为它可能会帮助其他人:

1)你的c2dm服务器的https请求中的消息/有效负载参数是什么,因为你需要这个参数才能在手机上进行调试

2)确保您已在手机eg.gmail上登录了Google帐户。您可以在手机设置&gt;下执行此操作。账户&amp;同步...

3)确保设备/电话已注册且服务器正在使用手机上当前的注册ID。您可以检查此信息,但记录您的注册响应。实际上,服务器应该能够通过c2dm到达手机,即使手机上的注册ID已经改变但只是三倍肯定,哈哈,两端使用相同的。同样在您使用注册Android设备的意图中,使用服务器用于注册c2dm的电子邮件作为发送者参数。

4)记录来自c2dm的传入消息。我看到你有一个C2DMMessageReceiver类。你可以在那里做。有了它,您可以从服务器中看到有效负载参数。您还可以在消息到达时以有效负载作为内容创建通知。您还可以在Android上使用Toast进行快速显示。

我希望所有这些都有所帮助。

答案 1 :(得分:0)

您是如何设置第三方服务器的(C2DM-sharp或基于PHP)?我会通过比较google chrome-to-phone等示例来验证客户端代码。还要确保您注册的C2DM电子邮件地址和密码正确无误。

答案 2 :(得分:0)

您是否检查过它是否是编码问题?你的id似乎是编码的(我的意思是这个%b50?)。

您从https://android.apis.google.com/c2dm/send获得的ID是消息ID。 在评论中,您发布了与注册ID相同的ID? 这不应该是一样的。