前提:集成極光推送,測試appkey和正式appkey,正式appkey是同時開通了第三方通道小米華為推送SDK的 因為小米和華為手機,使用極光普通推送SDK,在應(yīng)用進(jìn)程殺死之后收不到推送。為了進(jìn)程殺死之后依舊可以收到消息,提高到達(dá)率,使用了集成第三方通道的極光SDK。因為小米華為推送同一個包名只能申請一個appkey,如果你的小米華為appkey只綁定了極光的正式appkey,那么這就要求在測試時,小米華為手機測推送,需要使用極光正式appkey,其他手機使用測試appkey即可。如果你的小米華為appkey同時綁定了極光正式和測試key。那么測試時就不需要單獨處理小米華為手機,正常打包即可。
測試:在極光后臺或者接口推送帶大圖的消息和通知進(jìn)行測試。極光支持大圖模式的通知。
自定義消息:接收消息的廣播中,自定義Notification,使用BigPictureStype顯示大圖
- 小米5收到消息,可展示大圖,殺死進(jìn)程可以收到消息(極光正式appkey)
- 紅米收到消息,可展示大圖,殺死進(jìn)程可以收到消息(極光正式appkey)
- 華為收到消息,可展示大圖,殺死進(jìn)程可以收到消息(極光正式appkey)
- vivo收到消息,可展示大圖,殺死進(jìn)程可以收到消息(極光測式appkey)
通知:在接收通知的廣播中,也自定義了Notification。但是排除了小米。即非小米手機彈自定義的通知欄,小米手機走小米推送默認(rèn)通知欄。
- 小米5可以收到通知不是每次都能收到,不展示大圖(默認(rèn)通知欄),殺死進(jìn)程可以收到通知(極光正式appkey)
- 紅米收到通知,不展示大圖(默認(rèn)通知欄),殺死進(jìn)程可以收到通知(極光正式appkey)
- 華為收到消息,可展示大圖(走自定義Notification),殺死進(jìn)程可以收到消息(極光正式appkey)
- vivo收到消息,可展示大圖(走自定義Notification),殺死進(jìn)程可以收到消息(極光測式appkey)
發(fā)送通知,小米不顯示大圖,我們客戶端做了判斷,小米不做特殊處理不走自定義通知欄,走默認(rèn)通知欄,那么不顯示大圖的原因,極光客服給出回復(fù)是,小米那邊沒有做大圖的支持,所以不顯示大圖。而加判斷不讓小米走自定義通知欄的原因是,如果小米走了自定義通知欄的代碼,在接收推送時,會同時彈出兩個通知欄,一個是默認(rèn)通知欄,一個自定義通知欄。
顯示大圖的兩種方式:使用BigPictureStype 和使用RemoteViews自定義布局顯示大圖。根據(jù)手機系統(tǒng)不同,有的可以直接展開大圖模式,有的需要下拉才能展開。
BiPictureStyle:自己適配圖片大小,下拉出現(xiàn)的位置是從通知頂部開始直到拉出完整圖片。極光支持此方式通知
RemoteViews:自定義布局,需要自己適配,不同手機展示大小不同。又分為兩種顯示方式 高版本api支持mBuilder.setCustomBigContentView(remoteviews);// 1、通知先展示默認(rèn)標(biāo)題文字。下拉之后展示自定義布局 低版本api,通過notification.bigContentView = remoteviews展示大圖,需要同時設(shè)置notification.contentView默認(rèn)視圖,未展開和展開標(biāo)題一致
自定義通知欄大圖模式demo
public void nofity(){ //大視圖圖片通知 NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); //設(shè)置顯示的時間
mBuilder.setWhen(System.currentTimeMillis());
mBuilder.setContentTitle("aaaaaaaaaa??");
mBuilder.setContentText("bbbbb??");
mBuilder.setTicker("ccccc");
mBuilder.setAutoCancel(true);
mBuilder.setSmallIcon(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? R.drawable.home_heart_red : R.drawable.icon_login_head);
mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.home_heart_red)); mBuilder.setColor(0xff888888);
mBuilder.setSound(Uri.parse("android.resource://" + getPackageName() + "/raw/sound_push.ogg"));
//通過BigPictureStyle顯示大圖,這種方式與自定義布局方式顯示大圖的區(qū)別是下滑動畫和位置的區(qū)別。還有這種方式小米手機不顯示setSummaryText設(shè)置的值
//NotificationCompat.BigPictureStyle pictureStyle = new NotificationCompat.BigPictureStyle();
// pictureStyle.bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.bg_color_filter_duocai));
// pictureStyle.setBigContentTitle("Custom notification"); // pictureStyle.setSummaryText("This is a BigPictureStyle layout");
// pictureStyle.bigLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.home_heart_red));
// //設(shè)置樣式
// mBuilder.setStyle(pictureStyle);
Intent intent = new Intent(this,ImageActivity.class); PendingIntent pIntent = PendingIntent.getActivity(this,1,intent,0);
//設(shè)置點擊大圖后跳轉(zhuǎn) mBuilder.setContentIntent(pIntent); mBuilder.setDefaults(NotificationCompat.DEFAULT_ALL);
// 通過自定義布局方式顯示大圖 RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.customer_notitfication_layout); contentView.setImageViewResource(R.id.icon, R.drawable.home_heart_red);
contentView.setTextViewText(R.id.title, "Custom notification ??");
contentView.setTextViewText(R.id.text, "This is a custom layout");
contentView.setImageViewBitmap(R.id.ivBigPic, BitmapFactory.decodeResource( getResources(), R.drawable.original_car));
mBuilder.setCustomBigContentView(contentView);
// 1、通知先展示默認(rèn)aaaa,bbb。下拉之后展示自定義布局 Notification notification = mBuilder.build();
// 2、通過自定義布局notification.bigContentView展示大圖
// if(android.os.Build.VERSION.SDK_INT >= 16) {
// notification.bigContentVie w = contentView;
// 展開視圖
// }
// notification.contentView = contentView;
// 默認(rèn)視圖,這樣賦值都是展示自定義布局,但是同樣要下拉出全部
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(2, notification);
自定制聲音步驟
1、在res目錄下創(chuàng)建raw目錄,將mp3等聲音文件放到該目錄下。
2、在代碼中使用
mBuilder.setSound(Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.sound_push));
使用了setSound方法就不能再用setDefault方法。否則不起作用。注意setSound中的寫法一定要寫對,否則也不起作用。
總結(jié)
集成極光push,如果不是使用默認(rèn)通知欄,最好使用自定義消息。這也是極光推送文檔中推薦的,而且自定義消息大部分機型都能收到。