由于Android暂时没办法使用系统级的推送服务,再加上千奇百怪的第三方rom,所以我们不得不选择一款成
熟的第三方平台做我们的推送服务。现在市场上的推送平台很多,比如信鸽、极光、小米、友盟、阿里推送等,由于自己的项目中使用的是信鸽推送,所以我就简单说说使用信鸽推送的流程。
1.首先第一步,在信鸽官网 (http://xg.qq.com)注册账号并登录,然后点击“介入推送应用”
2.输入应用名称、包名并选择所属分类,点击“接入应用”
3.提示成功之后在应用列表界面就可以看到创建的应用了
4.创建好了应用,接下来就是在项目中的使用了,首先下载信鸽的sdk
5.解压sdk
6.先看看注意事项,毕竟都写了“必读”是吧(一定要看哈!)
7.集成到项目中也很简单,打开官方文档
http://developer.xg.qq.com/wiki/xg/Android%E6%8E%A5%E5%85%A5/Android%20SDK%E5%BF%AB%E9%80%9F%E6%8E%A5%E5%85%A5/Android%20SDK%E5%BF%AB%E9%80%9F%E6%8E%A5%E5%85%A5.html
按照流程一步一步来,文档是已eclipse为例,那现在很多开发者都使用的是Android Studio,那我们就以AS为例:
(1).将信鸽 SDK目录下的libs目录所有文件拷贝到工程的libs目录下并导入项目
(2).添加.so文件
(3).打开Androidmanifest.xml,添加以下配置(建议参考下载的sdk里面demo的配置文件)
注意上面的注释,自己看,需要修改的地方已经写的很清楚了。
(4).启动并注册APP,打开工程的主Activity,在其onCreate(Bundle savedInstanceState)重载方法内,添加以下代码,完成信鸽服务的启动与APP注册过程(当然不是非要写在oncreate方法里面,根据自己的项目需要,自己可以修改位置)。
/**
* 账号注册信鸽推送
*/
private void getXGPushReceiver() {
Context context = getApplicationContext();
final PreferenceStorage ps = new PreferenceStorage(context);
// 开启logcat输出,方便debug,发布时请关闭
XGPushConfig.enableDebug(this, true);
// 获取信鸽token
XGPushManager.registerPush(context, ps.getUsername(), new XGIOperateCallback() { @Override
public void onSuccess(Object data, int flag)
{
String mToken = (String) data;
LogUtils.d("TPush", "获取token:" + mToken);
}
@Override
public void onFail(Object data, int errCode, String msg)
{
Log.d(TAG, "获取token失败:");
}
});
//(2.36之前的版本)已知MIUI V6上会禁用所有静态广播,若出现有类似的情况,请添加以下代码兼容该系统。
Intent service = new Intent(context, XGPushService.class); context.startService(service);}
我这里选择的是使用账号进行注册,当然也可以选择使用APP进行注册(只需要修改注册的方法XGPushManager.registerPush(context)),不传用户名就可以啦,那么两种不同的注册方式有什么区别呢,我是这么理解的,如果使用账号进行注册,则只有这个账号登录后才可以收到推送,如果使用APP注册,则不管是哪个账号登录的,都可以收到推送。
(5).代码嵌入完成后,启动APP,如果在logcat中的TPush标签看到以下类似的输出,说明已经注册成功,并返回token。注意:Android Token长度为40位
(6).去管理台推送验证
前往信鸽前台,选择“创建通知”,输入“标题”和“内容”,点击“确认推送”。稍等几秒后,如果顺利的话,终端设备应该能够收到这条通知。此时,APP已经具备接收通知推送的能力。
(7) .可能碰到的问题解决方法
1.设备是否正常联网?
2.检查AndroidManifest.xml是否配置正确?(建议直接参考demo的例子改)
- accessId、accessKey设置是否与前台注册的一致?
- 相关权限是否齐全?
- receiver、service和activity相关组件是否配置好?
3.设备是否注册成功?
4.当前APP包名是否与前台注册的一致,如果不一致请在前台选中“使用多包名”选项?
5.前台下发通知时,“时段控制”选项里的时间段是否符合终端设备当前时间?
6.2.30及以上版本请检查xml配置文件是否添加com.tencent.android.tpush.XGPushActivity相关的内容
7.停留在后台的APP点击通知不能打开APP:被打开的activity(特别是LAUNCHER)启动模式为SingleTop,SingleTask或SingleInstance,请在该activity重载onNewIntent方法:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);// 必须要调用这句
}
8.对于使用AndriodStudio的同学,若AndroidManifest.xml编译不通过,XGPushActivity配置改为:
9.请检查AndroidManifest.xml是否已正确配置XGRemoteService,且intent-filter中是否正确设置:
应用包名为当前APP包名,如com.tencent.xgdemo
10.是否已设置APP默认的icon?由于系统原因,若没有icon,通知将不能展示。
11.(2.36之前的版本)已知MIUI V6上会禁用所有静态广播,若出现有类似的情况,请添加以下代码兼容该系统。
// 在XGPushManager.registerPush(context)或其它版本的注册接口之后调用以下代码
// 使用ApplicationContext
Context context = getApplicationContext();
Intent service = new Intent(context, XGPushService.class);
context.startService(service);
12.点击通知,出现不能打开activity的情况,请在AndroidManifest.xml中将XGPushActivity的exported属性设置为true。
13.点击通知,出现重复打开APP的情况,请将被打开的Activity启动模式改为SingleTop,SingleTask或SingleInstance。
差不多就是这么多了,如果还需要更多的高级功能, 可以再仔细看看 《SDK开发指南》,其实文档已经写得很详细了,只要我们仔细阅读文档,实现我们想要的功能还是不难的。