0,前言
这几天接了一下友盟,小米,华为三方的推送。
总的流程下来,小米的api是最友好的,华为的文档和demo有点脱节。这两个推送在特定的手机上都挺稳定的的。
友盟的就有点麻烦,过程中遇到几个问题
1,接入友盟之后,APK方法数超过64K了
对于这种超大的第三方库无爱 : (
是这样解决的。
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
MultiDex.install(getTargetContext());
https://developer.android.com/studio/build/multidex.html
2,第二个问题是要自定义点击通知栏要调整到特定页面,需要重写
@Override
public void dealWithNotificationMessage(Context context, UMessage msg){
if ( msg.extra == null) {
super.dealWithNotificationMessage(context, msg);
return;
}
Notification notification = new Notification.Builder(context)
.setContentTitle(msg.title)
.setContentText(msg.text)
.setSmallIcon(R.drawable.share_default_logo)
.build();
notification.flags |= FLAG_AUTO_CANCEL;
notification.defaults = DEFAULT_ALL;
notification.ledARGB = Color.BLUE;
notification.ledOnMS = 5000;
((NotificationManager) SeeYouApp.getInstance().getSystemService(NOTIFICATION_SERVICE)
).notify(0, notification);
}
3,要识别一下友盟的channel进程,允许它注册。
4,测试
测试起来很麻烦,因为杀应用,如果我们原有的进程没有被杀,那么友盟的推送就不会被杀,我们的进程被杀,友盟也被杀。这叫我怎么测…后来同事提醒,可以相互唤醒。
所以就是安装一个友盟的官方的App,然后设置允许相互唤醒(这个各个手机的设置都不同,在设置里面找相互唤醒类似的字眼)
后台那边就是判断一下原有通道是不是通的,如果不通就走第三方渠道。
之前一直在测弱网络,所以我以为会有一个心跳的误差。其实杀APP,后台立刻就能知道长连接断了,因为socket断了,系统会发eof(从抓包上看就是FIN)。
5,其他有的没的
华为只支持企业级应用,所以我是用公司账号注册两个app,去测试的。华为客户端这边的识别就直接是包名,要有手机卡,手机必须是华为手机才能推到。
小米接入小米推送之后,手动杀进程居然只杀了前台应用,得去应用里面强制关闭。没接入之前我记得手动杀进程是什么都不剩的,也许是官方推送保活福利吧。