发表于: 2018-12-05 22:54:03

0 977


一、今天完成的事情

友盟推送自定义通知

自定义通知样式

在PushSDK里,UmengMessageHandler类负责处理消息,包括通知和自定义消息。其中,成员函数getNotification负责定义通知栏样式。若SDK默认的消息展示样式不符合需求,可通过覆盖该方法来自定义通知栏展示样式。

UmengMessageHandler messageHandler = new UmengMessageHandler() 
    /*
   通知的回调方法,通知到达时会回调
    */
   @Override
   public void dealWithNotificationMessage(Context context, UMessage msg) {
                    //调用super会展示通知,不调用super不会展示通知
     super.dealWithNotificationMessage(context, msg);
   
     /*
   自定义通知栏样式
   */
   @Override
   public Notification getNotification(Context context, UMessage msg) {
                      switch (msg.builder_id) {
           

                      case 1:

                           //推送时,将自定义样式设为1,即可使用此样式,

                                          return MyNotificationManager.getDefaultNotification(context, msg.title, msg.text);
                     default:
                                            //默认为0,若builder_id不存在,使用默认
           return super.getNotification(context, msg);

       }
   }
};
mPushAgent.setMessageHandler(messageHandler);


自定义通知打开动作

自定义行为的数据放在UMessage.custom字段。 在【友盟+】后台或通过API发送消息时,在“后续动作”中的“自定义行为”中输入相应的值或代码即可实现。若开发者需要处理自定义行为,则可以重写方法dealWithCustomAction()。其中自定义行为的内容,存放在UMessage.custom中。

需要注意,自定义通知需要考虑适配Android 8.0,8.0的Notification需要设置Channel,另外,自定义通知的布局不能使用ConstraintLayout,否则会报错。

/**
* 自定义行为的回调处理,参考文档:高级功能-通知的展示及提醒-自定义通知打开动作
* UmengNotificationClickHandler是在BroadcastReceiver中被调用,故如果需启动Activity,需添加Intent.FLAG_ACTIVITY_NEW_TASK
* */
UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {

......

   @Override

   public void dealWithCustomAction(Context context, UMessage msg) {


               //根据msg.cutom来执行下一步动作

       } catch(JSONException e) {
           e.printStackTrace();
       }
   }
};
//使用自定义的NotificationHandler
mPushAgent.setNotificationClickHandler(notificationClickHandler)
;


其他的一些设置

//设置显示最多通知条数,超出设定将旧通知隐藏
mPushAgent.setDisplayNotificationNumber(3);
//设置消息免打扰时间,23000700
mPushAgent.setNoDisturbMode(23, 0, 7, 0);
//关闭消息免打扰
//mPushAgent.setNoDisturbMode(0, 0, 0, 0);
//设置30秒内同一应用接收到多条通知时不重复提醒
mPushAgent.setMuteDurationSeconds(30);


控件Switch

使用方式还是比较简单

在布局中添加

<Switch
   android:id="@+id/switch_news_push"
   android:layout_width="0dp"
   android:layout_height="22dp"
   android:layout_marginTop="8dp"
   android:layout_marginEnd="16dp"
   android:text="@string/news_push"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintStart_toStartOf="@+id/tv_push_setting"
   app:layout_constraintTop_toBottomOf="@+id/line_1" />

在代码中引用并设置监听

Switch pushNewsSW = (Switch) findViewById(R.id.switch_news_push);

//setListener
pushNewsSW.setOnCheckedChangeListener(this);

@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
       switch (compoundButton.getId()) {
               case R.id.switch_news_push:
            ......
                    break;
     default:
                    break;
   }



二、明天的计划

统计


三、遇到的问题    

自定义Notification使用ConstraintLayout布局会报错


四、收获

友盟推送自定义通知

控件Switch



返回列表 返回列表
评论

    分享到