添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
机灵的鸵鸟  ·  Amazon.com·  11 月前    · 
调皮的石榴  ·  依云's Blog·  2 年前    · 
帅气的甘蔗  ·  2019款荣威Ei5上市 ...·  2 年前    · 

集成极光推送,分为测试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(); 
    ###### 3.1、通过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); 
    ###### 3.2、通过自定义布局方式显示大图
    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;
    ###### 在使用RemoteViews显示大图时“3.2.1和3.2.2”二选其一使用即可
     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小分队 前优信新车团队
    粉丝