GCM设备变异问题

时间:2014-04-23 10:37:46

标签: android google-cloud-messaging

我成功实施了GCM机制。我收到了Google N5上的所有通知。但是当我在三星标签和其他设备(如micromax等)上尝试相同的应用程序时,即使他们收到了我的手机的成功回复和注册ID。我没有收到来自GCM服务器的消息。有人可以弄清楚可能是什么问题吗?

这是包含所有权限的清单文件:

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

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />


     <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

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

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.mypackage.DemoActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

         <meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version" />

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

                 <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <category android:name="com.mypackage" />
            </intent-filter>
        </receiver>
        <service android:name=".GcmIntentService"
                 android:enabled="true" />
    </application>

</manifest>

我需要在清单中做哪些更改?

2 个答案:

答案 0 :(得分:2)

希望此链接可以解决您的问题。  http://captechconsulting.com/blog/antoine-campbell/google-cloud-messaging-cloud-connection-server-tutorial

权限 请注意,GCM要求应用程序定义新的使用权限com.antoinecampbell.gcmdemo.permission.C2D_MESSAGE。此权限可防止其他应用程序收到您的应用程序的GCM消息。

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

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

组件 SEND权限确保只有GCM Framework才能向BroadcastReceiver发送消息。演示应用程序中的IntentService实际处理BroadcastReceiver传递的消息。

<receiver 
    android:name=".GcmBroadcastReceiver" 
    android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
            <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
            <category android:name="com.antoinecampbell.gcmdemo"/>
    </intent-filter>
</receiver>
<service android:name=".GcmIntentService"></service>

设备注册 在任何设备可以与GCM一起使用之前,必须先向GCM服务器注册。这可以使用Google Play服务库中的GoogleCloudMessaging课程完成。这是一个阻塞调用,因此应该使用AsyncTask在后台执行。将返回一个注册ID,用于唯一标识所用ProjectID的设备。注册应该在您的活动的onCreate()方法中进行,或者如果您希望让用户选择接收GCM消息,则使用对话框。这通常只做一次。该演示展示了如何取消注册,尽管它不是常见的操作。您可以选择取消注册设备的唯一时间是允许用户选择不在您的应用程序中接收GCM消息。

检索到注册ID后,应将其发送到您的服务器以保存在数据库中并本地存储在设备上。演示应用程序将注册ID存储在SharedPreferences中,并使用GCM消息将ID发送到CCS应用程序。建议通过HTTP完成此操作,以便您立即回答其成功或失败。 CCS应用程序通过存储用户名和设备注册ID来处理HTTP服务器所具有的相同功能。

答案 1 :(得分:0)

非常感谢大家的帮助。我错了,我之前没有认识到......我正在测试的Wifi是我公司组织的。所以它有5228,5229和5230端口被阻止了。因此,我无法接收到任何传入的流量。这不是设备的问题。这是连接问题。任何方式都要感谢大家的帮助..更多关于GCM的知识我以前知道..