3

I have tried some forum pages and searched through stackoverflow for the same thing, but I did not find the solution.

I have used the below code to generate registration ID for GCM notification. But I get an empty string as a registration ID:

GCMRegistrar.checkDevice(this); GCMRegistrar.checkManifest(this);

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);
}

Please help me with this, tell me if I got anything wrong.

Thank you in advance, Nirav.

4

5 回答 5

7

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

 @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);
    }
于 2012-07-12T09:05:35.697 回答
5

请注意

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

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

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

请注意,GCMIntentService应该在应用程序的根包中定义它才能正常工作。

于 2012-07-31T08:18:07.687 回答
1

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

于 2012-11-22T12:41:51.047 回答
0

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

我给你一个简单的例子。我的项目名称是 GCMExample,我有三个包 1. com.examle.GCMExample(Main Package) , 2. com.examle.GCMExample.activity(Second Package) , 3. com.example.GCMExample.adapter(Third Package)

当我的 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" />
于 2014-02-20T05:44:33.657 回答
0

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

于 2015-02-12T11:48:24.273 回答