应用注册ID未在GCM Android中生成

时间:2012-07-12 08:48:53

标签: android notifications registration google-cloud-messaging

我已尝试过一些论坛页面,并通过stackoverflow搜索相同的内容,但我没有找到解决方案。

我已使用以下代码为GCM通知生成注册ID 。但我得到一个空字符串作为注册ID:

  

GCMRegistrar.checkDevice(本);       GCMRegistrar.checkManifest(本);

     

if(GCMRegistrar.isRegistered(this)){       Log.d(“info”,GCMRegistrar.getRegistrationId(this));       }

regId = GCMRegistrar.getRegistrationId(this);

Log.v("log", " register id oslo : " + regId);

if (regId.equals("")) {
    // replace this with the project ID
    GCMRegistrar.register(this, "718437041388");
    Log.d("info", GCMRegistrar.getRegistrationId(this));
} else {
    Log.d("info", "already registered as" + regId);
}

请帮帮我,告诉我,如果我有什么不对。

提前谢谢你, Nirav。

5 个答案:

答案 0 :(得分:7)

你不应该在GCMRegistrar.register(this, "718437041388");之后获得registrationId 事实上,你有一个正确的GCMIntentService.java接收regId吗? 如果是,您可以从onRegistered内的GCMIntentService.java

获取regId
 @Override
    protected void onRegistered(Context context, String registrationId) {
        Log.i(TAG, "Device registered: regId = " + registrationId);
        Log.d("GCMIntentService", "in GCMIntentService");
        displayMessage(context, getString(R.string.gcm_registered));
        ServerUtilities.register(context, registrationId);
    }

答案 1 :(得分:5)

请注意

    GCMRegistrar.register(this, "...");

是异步的。因此,在此之后立即调用GCMRegistrar.getRegistrationId(this)是不可靠的,因此您应该避免使用它。

作为注册程序的一部分,id将通过广播回调到达您的GCMIntentService。从那里你可以将gcm密钥存储在任何你喜欢的地方,并在应用程序的其他部分使用它(通常在服务器上)。

请注意,应在应用的根目录包中定义GCMIntentService才能使其正常工作。

答案 2 :(得分:1)

尝试将模拟器与Google API一起使用,并与Google帐户同步。

答案 3 :(得分:0)

经过一天的努力,我遇到了同样的问题,我找到了解决办法。 首先,我将我的GCM相关代码放入我的主程序包,并根据androidManifest.xml中的My Package进行更改

我举一个简单的例子。我的项目名称是GCMExample,我有三个包 1. com.examle.GCMExample(主程序包), 2. com.examle.GCMExample.activity(Second Package), 3. com.example.GCMExample.adapter(第三包)

当我的GCM相关课程文件进入我的第二个包时,我没有获得注册ID

我的GCM相关类,如1. GCMIntentService,2。ServerUtilities,3。CommonUtilities 4. WakeLocker放入我的主包com.example.GCMExample

也是我的androidManifest.xml

         <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="android.permission.VIBRATE" />

         <permission android:name="com.example.GCMExample.permission.C2D_MESSAGE"
            android:protectionLevel="signature" />

         <uses-permission android:name="com.example.GCMExample.C2D_MESSAGE" />

       <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
   <receiver
            android:name="com.google.android.gcm.GCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <!-- Receives the registration id. -->
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="com.example.GCMExample" />
          </intent-filter>
  </receiver>  

 <service android:name="com.example.GCMExample.GCMIntentService" />

答案 4 :(得分:0)

在项目的lib文件夹中添加GCM jar文件