最近使用了google的push,虽然很简单,但有些细节方面要注意:
首先导入gcm.jar包,
然后配置manifest
<!-- google推送SDK配置开始 -->
<receiverandroid: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.bbcare.qiwo.overseas" />
</intent-filter>
</receiver>
<!-- 这里要特别注意,GCMIntentService这个类必须放在一个和你本身app的包名相同的包下,如果放到其他包下,就算这里写上全路径也不会启动这个服务的 -->
<service android:name=".GCMIntentService" /><!-- google推送SDK配置结束 -->
然后是权限:
my_app_package是你app的包名;
<permission
android:name="my_app_package.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="my_app_package.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
注册:
GCMRegistrar.checkDevice(BaseApplication.getAppContext());
GCMRegistrar.checkManifest(BaseApplication.getAppContext());
String regId = GCMRegistrar.getRegistrationId(BaseApplication.getAppContext());
LogUtils.e("Google Push","检查是否有pushId:"+regId);
if (TextUtils.isEmpty(regId)) {
LogUtils.e("Google Push","注册google push服务");
GCMRegistrar.register(BaseApplication.getAppContext(), ConstantGloble.PUSH_GOOGLE_ID);
} else {
LogUtils.e("Google Push","检查设备是否已经注册:"+GCMRegistrar.isRegisteredOnServer(BaseApplication.getAppContext()));
if (GCMRegistrar.isRegisteredOnServer(BaseApplication.getAppContext())) {
LogUtils.e("Google Push", "设备已经在服务器注册");
} else {
LogUtils.e("Google Push","上传pushID到服务器");
SetChannelIdThread thread = new SetChannelIdThread(regId);
thread.upload();
}
}
然后就是继承GCMBaseIntentService编写GCMIntentService了,可以参考官方demo,根据需求自己改
最后当不再使用push时使用GCMRegistrar.unregister(BaseApplication.getAppContext());注销。