集成极光推送,分为测试appkey和正式appkey,正式appkey是同时开通了第三方通道小米华为推送SDK的。 因为小米和华为手机,使用极光普通推送未集成第三方通道的,在应用进程杀死之后收不到推送。为了进程杀死之后依旧可以收到消息,提高到达率,使用了集成第三方通道的key。因为小米华为推送同一个包名只能申请一个appkey,如果你的小米华为appkey只绑定了极光的正式appkey,那么这就要求在测试时,小米华为手机测推送,需要使用极光正式appkey,其他手机使用测试appkey即可。如果你的小米华为appkey同时绑定了极光正式和测试key。那么测试时就不需要单独处理小米华为手机,正常打包即可。
一、测试:
在极光后台或者接口推送带大图的消息和通知进行测试。极光支持大图模式的通知。
1.1、自定义消息:在接收消息的广播中,自定义Notification,使用BigPictureStype显示大图。测试结果如下:
小米5收到消息,可展示大图,杀死进程可以收到消息(极光正式appkey)
红米收到消息,可展示大图,杀死进程可以收到消息(极光正式appkey)
华为收到消息,可展示大图,杀死进程可以收到消息(极光正式appkey)
vivo收到消息,可展示大图,杀死进程可以收到消息(极光测式appkey)
上述自测结果表明,发送消息,自定义消息的通知栏,大图均可显示,杀死进程可以收到发送的消息。
1.2、通知:在接收通知的广播中,也自定义了Notification。但是排除了小米。即非小米手机弹自定义的通知栏,小米手机走小米推送默认通知栏。
小米5可以收到通知不是每次都能收到,不展示大图(默认通知栏),杀死进程可以收到通知(极光正式appkey)
红米收到通知,不展示大图(默认通知栏),杀死进程可以收到通知(极光正式appkey)
华为收到通知,可展示大图(走自定义Notification),杀死进程可以收到通知(极光正式appkey)
vivo收到通知,可展示大图(走自定义Notification),杀死进程可以收到通知(极光测式appkey)
上述测试中,已经在标题中说明,小米是不走我们自定义的通知栏,之所以排除小米,是因为测试中发现如果小米走了自定义通知栏的代码,在接收推送的时候,会同时弹出两个通知栏,一个是默认通知栏,一个是自定义通知栏。
而发送通知,小米走极光的默认通知栏却不显示大图,咨询了极光客服,极光客服给出回复是,小米那边没有做大图的支持,所以不显示大图。
二、自定义通知栏显示大图的两种方法:
使用BigPictureStype或者使用RemoteViews自定义布局显示大图。根据手机系统不同,有的可以直接展开大图模式,有的需要
手势下拉(一个手指或者两个手指同时下拉)
才能展开。
两种方式优缺点:
BigPictureStyle:自己适配图片大小,下拉出现的位置是从通知顶部开始直到拉出完整图片。极光支持此方式通知
RemoteViews:自定义布局,展示样式完全自己设定,但是需要自己适配,不同手机展示大小不同。又分为两种显示方式
高版本api支持
mBuilder.setCustomBigContentView(remoteviews);
通知先展示默认标题文字。下拉之后展示自定义布局
低版本api通过
notification.bigContentView=remoteviews展示大图.
需要同时设置notification.contentView默认视图,未展开和展开标题一致
三、自定义通知栏大图模式代码demo,3.1和3.2是两种展示大图的方式。
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));
// 设置smallIcon的背景色
mBuilder.setColor(0xff888888);
// 设置推送提示声音
mBuilder.setSound(Uri.parse("android.resource://" + getPackageName() + "/raw/sound_push.ogg"));
Notification notification = mBuilder.build();
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));
// 3.2.1、使用这个方法、通知先展示默认aaaa,bbb。下拉之后展示自定义布局
// mBuilder.setCustomBigContentView(contentView);
// 3.2.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(notifactionId, notification);
四、自定制push声音
1、在res目录下创建raw目录,将mp3等声音文件放到该目录下。
2、在代码中使用
mBuilder.setSound(Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.sound_push));
使用了setSound方法就不能再用setDefault方法。否则不起作用。注意setSound中的写法参数格式一定要写对,否则也不起作用。
集成极光push,如果不是使用默认通知栏,自定义通知栏时,最好使用自定义消息。这也是极光推送文档中推荐的,而且自定义消息大部分机型都能收到。
create by zhangxue
soho小分队
前优信新车团队
粉丝