Android的GCM基本实现 [英] Android GCM basic implementation
问题描述
更新:我固定在code中的问题,下面所以这使得如何使用一个很好的基础工作示例 GCM
UPDATE: I fixed the problems in the code below so this makes a nice basic working example of how to use GCM
所以,我想要实现机器人 GCM
进入我的应用程序。以下是我已经添加到清单中的相关部分:
So, I'm trying to implement Android GCM
into my app. Here are the relevant parts I've added to the manifest:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="20" />
<permission
android:name=".permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name=".permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
...
<receiver
android:name="com.google.android.gcm.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.badbob.app.gmctestapp" />
</intent-filter>
</receiver>
<service android:name=".GCMIntentService" />
我添加以下code到我的主要活动的onCreate:
I've added the following code to the onCreate of my main activity:
GCMRegistrar.checkDevice( this );
GCMRegistrar.checkManifest( this );
final String regId = GCMRegistrar.getRegistrationId( this );
if( regId.equals( "" ) ) {
GCMRegistrar.register( this, GCM_SENDER_ID );
}
else {
Log.v( LOG_TAG, "Already registered" );
}
我还创建了 GCMIntenetService
类,像这样:
public class GCMIntentService extends GCMBaseIntentService {
private static final String LOG_TAG = "GetAClue::GCMIntentService";
public GCMIntentService() {
super( GCM_SENDER_ID );
// TODO Auto-generated constructor stub
Log.i( LOG_TAG, "GCMIntentService constructor called" );
}
@Override
protected void onError( Context arg0, String errorId ) {
// TODO Auto-generated method stub
Log.i( LOG_TAG, "GCMIntentService onError called: " + errorId );
}
@Override
protected void onMessage( Context arg0, Intent intent ) {
// TODO Auto-generated method stub
Log.i( LOG_TAG, "GCMIntentService onMessage called" );
Log.i( LOG_TAG, "Message is: " + intent.getStringExtra( "message" ) );
}
@Override
protected void onRegistered( Context arg0, String registrationId ) {
// TODO Auto-generated method stub
Log.i( LOG_TAG, "GCMIntentService onRegistered called" );
Log.i( LOG_TAG, "Registration id is: " + registrationId );
}
@Override
protected void onUnregistered( Context arg0, String registrationId ) {
// TODO Auto-generated method stub
Log.i( LOG_TAG, "GCMIntentService onUnregistered called" );
Log.i( LOG_TAG, "Registration id is: " + registrationId );
}
}
当我运行此我得到这个 LogCat中
When I run this I get this in LogCat:
07-11 11:28:46.340: V/GCMRegistrar(27435): Registering receiver
07-11 11:28:46.370: D/GCMRegistrar(27435): resetting backoff for com.badbob.app.getacluebeta
07-11 11:28:46.380: V/GCMRegistrar(27435): Registering app com.badbob.app.getacluebeta of senders 128205395388
这是我从其他职位已经收集到的,我应该得到的 LogCat中
注册ID,但是我米不。还有 onRegistered()
在 GCMIntentService
永远不会被调用。所以我在做什么错了?
From what I've gleaned from other posts I should get a registration ID in LogCat
but I"m not. Also onRegistered()
in GCMIntentService
never gets called. So what am I doing wrong?
推荐答案
这是不正确
protected GCMIntentService( String senderId ) {
super(senderId);}
由于它的文档中指出。您必须声明一个公共的,无参数的构造函数GCMIntentService。否则GCMIntentService不能正确由背景意图服务实例
As it states in the documentation. you must declare a PUBLIC, NO ARGUMENT constructor for GCMIntentService. Otherwise the GCMIntentService can't be instantiated properly by background intent services.
public GCMIntentService(){
super(senderID);}
在senderID可以是硬codeD字符串常量,因为它将不再与新的GCM改变。 这也是您使用正确的senderID非常重要的。 24小时足够长的时间为你的活跃,所以如果你使用的是不正确senderID我上面的解决方案是行不通的。其他的一切看起来不错。
the senderID can be a hard coded constant string because it will no longer change with the new GCM. It's also very important you use the correct senderID. 24 hours is long enough for yours to be active so if my above solution doesn't work you are using the incorrect senderID. Everything else looks great.
该senderID是,当你在浏览谷歌API访问页网页浏览器的URL。点击GCM和一个12位的数字将是present在浏览器的URL。这是正确的密钥。不是你的API密钥。是,用于在App服务器侧
The senderID is in the URL of your web browser when you are browsing the Google API access page. Click on GCM and a 12 digit number will be present in the browser URL. That is the correct key to use. NOT your API key. That is used on the App server side.
这篇关于Android的GCM基本实现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!