前提:集成极光推送,测试appkey和正式appkey,正式appkey是同时开通了第三方通道小米华为推送SDK的 因为小米和华为手机,使用极光普通推送SDK,在应用进程杀死之后收不到推送。为了进程杀死之后依旧可以收到消息,提高到达率,使用了集成第三方通道的极光SDK。因为小米华为推送同一个包名只能申请一个appkey,如果你的小米华为appkey只绑定了极光的正式appkey,那么这就要求在测试时,小米华为手机测推送,需要使用极光正式appkey,其他手机使用测试appkey即可。如果你的小米华为appkey同时绑定了极光正式和测试key。那么测试时就不需要单独处理小米华为手机,正常打包即可。
测试:在极光后台或者接口推送带大图的消息和通知进行测试。极光支持大图模式的通知。
自定义消息:接收消息的广播中,自定义Notification,使用BigPictureStype显示大图
- 小米5收到消息,可展示大图,杀死进程可以收到消息(极光正式appkey)
- 红米收到消息,可展示大图,杀死进程可以收到消息(极光正式appkey)
- 华为收到消息,可展示大图,杀死进程可以收到消息(极光正式appkey)
- vivo收到消息,可展示大图,杀死进程可以收到消息(极光测式appkey)
通知:在接收通知的广播中,也自定义了Notification。但是排除了小米。即非小米手机弹自定义的通知栏,小米手机走小米推送默认通知栏。
- 小米5可以收到通知不是每次都能收到,不展示大图(默认通知栏),杀死进程可以收到通知(极光正式appkey)
- 红米收到通知,不展示大图(默认通知栏),杀死进程可以收到通知(极光正式appkey)
- 华为收到消息,可展示大图(走自定义Notification),杀死进程可以收到消息(极光正式appkey)
- vivo收到消息,可展示大图(走自定义Notification),杀死进程可以收到消息(极光测式appkey)
发送通知,小米不显示大图,我们客户端做了判断,小米不做特殊处理不走自定义通知栏,走默认通知栏,那么不显示大图的原因,极光客服给出回复是,小米那边没有做大图的支持,所以不显示大图。而加判断不让小米走自定义通知栏的原因是,如果小米走了自定义通知栏的代码,在接收推送时,会同时弹出两个通知栏,一个是默认通知栏,一个自定义通知栏。
显示大图的两种方式:使用BigPictureStype 和使用RemoteViews自定义布局显示大图。根据手机系统不同,有的可以直接展开大图模式,有的需要下拉才能展开。
BiPictureStyle:自己适配图片大小,下拉出现的位置是从通知顶部开始直到拉出完整图片。极光支持此方式通知
RemoteViews:自定义布局,需要自己适配,不同手机展示大小不同。又分为两种显示方式 高版本api支持mBuilder.setCustomBigContentView(remoteviews);// 1、通知先展示默认标题文字。下拉之后展示自定义布局 低版本api,通过notification.bigContentView = remoteviews展示大图,需要同时设置notification.contentView默认视图,未展开和展开标题一致
自定义通知栏大图模式demo
public void nofity(){ //大视图图片通知 NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); //设置显示的时间
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显示大图,这种方式与自定义布局方式显示大图的区别是下滑动画和位置的区别。还有这种方式小米手机不显示setSummaryText设置的值
//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));
// //设置样式
// mBuilder.setStyle(pictureStyle);
Intent intent = new Intent(this,ImageActivity.class); PendingIntent pIntent = PendingIntent.getActivity(this,1,intent,0);
//设置点击大图后跳转 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、通知先展示默认aaaa,bbb。下拉之后展示自定义布局 Notification notification = mBuilder.build();
// 2、通过自定义布局notification.bigContentView展示大图
// if(android.os.Build.VERSION.SDK_INT >= 16) {
// notification.bigContentVie w = contentView;
// 展开视图
// }
// notification.contentView = contentView;
// 默认视图,这样赋值都是展示自定义布局,但是同样要下拉出全部
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(2, notification);
自定制声音步骤
1、在res目录下创建raw目录,将mp3等声音文件放到该目录下。
2、在代码中使用
mBuilder.setSound(Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.sound_push));
使用了setSound方法就不能再用setDefault方法。否则不起作用。注意setSound中的写法一定要写对,否则也不起作用。
总结
集成极光push,如果不是使用默认通知栏,最好使用自定义消息。这也是极光推送文档中推荐的,而且自定义消息大部分机型都能收到。