前沿
集成极光推送大概有七八回了吧,本以为轻车熟路的,结果你永远干不过PM的脑洞。
我们项目是要做国际化的,也就是多语言适配,但是测试推送的时候发现一个问题就是如果你转账的手机是什么语言,那你收款手机收到推送的语言就是什么,产品不干了说:收到推送应该和当前APP内部语言保持一致。可是后台发的推送就这个语言呀,结果开始互相甩锅了。。。。。
解决方案
本地负责的态度决定自己本地做处理吧,自己的思路是首先我自己写本地的notification本地写好推送文案:
//自定义通知栏
private void receivingNotification(Context context, Bundle bundle) {
NotificationManager manager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
// 使用notification
// 使用广播或者通知进行内容的显示
NotificationCompat.Builder builder = new NotificationCompat.Builder(
context);
builder.setContentText("xxxxx").setSmallIcon(R.mipmap.icon).setContentTitle("xxxxx");
builder.setDefaults(Notification.DEFAULT_SOUND);
manager.notify(1,builder.build());
}
然后放入自己重写的onReceive里面
自己试着用极光后台发送一下广播发现:可以是可以但是收到两个,一个是极光发的一个是我本地发的,这样肯定不行。并且我debug发现只要走onReceive就一定收到极光的推送,挖槽这样感觉没法处理了啊!但是我没有放弃在极光官网上看到:
是的可以换个思路,就是禁止掉极光的推送,在官网也看到了只要让后台设置alert为空把内容放在extra里面给我们这样就不会收到推送,但onreceive是执行的,接收到extra里面的值后,我们本地广播去处理逻辑,把语言翻译成我手机对应的语言这样完美解决。
其实我挺无语的我感觉这种不应该是我们个tag或者是alias,或者根据地址围栏让后台去处理嘛。
还有就是Android和iOS的推送机制是不一样的iOS好像可以改推送的内容,但是我们只可以设置推送的样式。
极光链接:官方文档