之前项目使用的是信鸽推送,因为业务原因使用极光推送替换,大概两周的时间用来测试、调试。基本妥当之后,稍微整理一下使用中遇到的难点。
重要的话放在最前面:一定要跟service端沟通好。因为在我使用的极光的时候,好几次的bug都是跟service端没协调好造成的。
如何集成极光这里就不写了,基本就是照着官方的文档撸下来。
首先遇到第一个难点就是,关于5.0的极光推送app图标问题。因为google在5.0中使用了全新的设计风格 --- Material Design。当我在5.0以上的android手机中,用同一张图片推送的时候,图片会成白色,而产品的需求是5.0以上使用黑色的logo,5.0以下使用彩色的logo。最开始设想是采用极光本身自定义通知栏,自己写布局文件,通过API来判断版本,达到业务需求。
稍微解释一下这些代码的意义。CustomPushNotificationBuilder是极光自身的API,为我们提供高级自定义通知栏的功能。参数分别是:上下文,自己写的布局,图片以及标题。build.layoutIconDrawable为通知栏下来显示的大图标,build.statusBarDrawable是接到推送的小图标。
之后测试发现,完全没有效果,5.0以上的图标还是白色的。。之后又查找了一些资料,才发现这两个图片必须为同名的图片才会有效果。所以我给出的解决方案是:在res下创建了一个drawable-xhdpi-v21文件夹,放入5.0版本的图片,在drawable-xhdpi中放入5.0以下版本的图片,并且同名。之后就不需要判断版本了,系统会根据不同版本加载对应的图片。
解决了图片变白,接踵而来又有新的问题。就是我们自己定义的布局文件并不能匹配到不同手机不同的通知栏颜色。这里就是android本身不可避免的问题了。因为开源的原因,每个手机厂家都会对原声系统做修改,导致我布局里的文字设置成白色,白色通知栏看不清;设置成黑色,黑色通知栏看不清;设置成灰色,黑色白色通知栏都不好看。也想过折中的办法,就是设定一个背景色,在所有的手机通知栏都显示同样的背景色,就可以固定字体颜色了。我选择了白色的背景色,在黑色通知栏上看着还是挺好看的。但是,轮到小米测试机的时候又出现了不匹配。小米本身把通知栏改成了灰色,并且缩短了通知栏的大小,导致我们的布局不能填满通知栏,白色背景特别难看。
到这步我就感觉我僵住了。因为按照这种方式必然还是又一部分机型不匹配。这也是我之前所说的走歪路了。
又重新翻了极光的API文档,发现还有一种普通版本的自定义标题栏的方式,使用默认的推送样式,仅仅只是修改了图片,即可完美适配了。
要提的一点就是 JPushInterface.setDefaultPushNotificationBuilder(builder); 这个方法是使用默认的样式,在service端推送的时候,默认值是0。注意,是0,不是null,也不是别的任何数字。 之前我测试的时候,极光的后台推送可以完成需求,而用我们公司自己的后台推送就无法完成,还是白色的。我一度以为我自己的代码还是有问题,来回查找。最后在sercvie端发现,他们推送的时候传入了一个1。当然也可以使用 JPushInterface.setPushNotificationBuilder(1, builder);这个方法修改。这里如果是1,那么service端也需要传入1。
以上仅是个人整理,如有不对,欢迎指出。