前沿
集成極光推送大概有七八回了吧,本以爲輕車熟路的,結果你永遠幹不過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好像可以改推送的內容,但是我們只可以設置推送的樣式。
極光鏈接:官方文檔