我已尝试过一些论坛页面,并通过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。
答案 0 :(得分:7)
你不应该在GCMRegistrar.register(this, "718437041388");
之后获得registrationId
事实上,你有一个正确的GCMIntentService.java
接收regId吗?
如果是,您可以从onRegistered
内的GCMIntentService.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);
}
答案 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文件