开发者社区> 问答> 正文

link">3. 自定义样式通知(V2.3.3及以上版本开始支持)

已解决

展开
收起
游客3xcwo35htolsm 2018-02-21 11:06:08 943 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考3. 自定义样式通知(V2.3.3及以上版本开始支持)">官方帮助文档

    Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分:

    3.1 客户端设置通知样式

    • 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotificationBasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件
    • 每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知
    • 样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式
    • 具体使用例子请参考Demo

    3.2 后端推送消息时添加自定义样式id

    • 用户利用OpenApi推送消息时设定特定样式的id
    • 服务端不能设置样式,只能指定需要展现的样式id
    • 指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知

    3.3 Example


    Example-BasicCustomPushNotification

    1. BasicCustomPushNotification notification = new BasicCustomPushNotification();
    2. notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);
    3. notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);
    4. boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification);

    Example-AdvancedCustomPushNotification

    1. AdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);
    2. notification.setServerOptionFirst(true);
    3. notification.setBuildWhenAppInForeground(false);
    4. boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification);

    Example-OpenApi

    客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID

    1. final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");
    2. final String date = dateFormat.format(new Date());
    3. PushRequest pushRequest = new PushRequest();
    4. // 推送目标
    5. pushRequest.setAppKey(appKey);
    6. pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部
    7. pushRequest.setTargetValue("deviceId");
    8. // 推送配置
    9. pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知
    10. pushRequest.setTitle(date); // 消息的标题
    11. pushRequest.setBody("PushRequest body"); // 消息的内容
    12. pushRequest.setSummary("PushRequest summary"); // 通知的摘要
    13. pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100
    14. // 推送配置: Android
    15. pushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 url
    16. pushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}");

    3.4 BasicCustomPushNotification API


    默认构造函数

    • BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。
    1. public BasicCustomPushNotification();

    构造函数

    参数

    • drawable 状态栏图标
    • flags NotificationFlags,支持系统Notification下的Flag参数
    • remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动
    1. public BasicCustomPushNotification(int drawable, int flags, int remindType);

    获取状态栏图标

    • 获取已设置的状态栏图标
    1. public int getStatusBarDrawable()

    设置状态栏图标

    • 更改状态栏图标设置

    参数

    • statusBarDrawable 状态栏图标资源id
    1. public void setStatusBarDrawable(int statusBarDrawable);

    获取提醒方式

    • 获取已经设置的提醒方式
    1. public int getRemindType();

    设置提醒方式

    • 更改自定义通知的提醒方式

    参数

    • remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动
    1. public void setRemindType(int remindType);

    获取Notification Flags参数

    • 获取已经设置的notification flag参数
    1. public int getNotificationFlags();

    设置Notification Flags参数

    • 更改自定义通知的flags参数

    参数

    • notificationFlags 支持系统自带的Notification Flag参数
    1. public void setNotificationFlags(int notificationFlags);

    获取是否服务端设置优先

    • 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false
    1. public boolean isServerOptionFirst();

    设置是否服务端优先

    • 更改自定义通知的serverOptionFirst参数

    参数

    • serverOptionFirst 是否服务器配置优先
    1. public void setServerOptionFirst(boolean serverOptionFirst);

    获取推送前台到达否创建通知参数

    • 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知
    1. public boolean isBuildWhenAppInForeground();

    设置推送前台到达否创建通知参数

    • 更改当推送到达时应用处在前台情况下是否创建通知的设置

    参数

    • buildWhenAppInForeground 是否创建通知
    1. public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground);

    3.5 AdvancedCustomPushNotification API

    • AdvancedCustomPushNotificationBasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。

    AdvancedCustomPushNotification构造函数

    • AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数

    参数

    • view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。
    • iconViewId 自定义布局文件中icon的viewId
    • titleViewId 自定义布局文件中title的viewId
    • contentViewId 自定义布局文件中显示通知正文的viewId
    1. public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId);

    设置通知图标

    • 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。

    参数

    • icon icon图标资源id
    1. public void setIcon(int icon);

    获取通知图标

    • 获取设置的通知图标
    1. public int getIcon();

    3.6 CustomNotificationBuilder API

    • CustomNotificationBuilder用于注册用户设定好的自定义样式通知

    获取CustomNotificationBuilder实例

    • CustomNotificationBuilder是单例类,必须通过指定接口来获取实例
    1. public static CustomNotificationBuilder getInstance();

    注册自定义样式通知

    • 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id

    参数

    • customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖
    • notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null

    返回

    • 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。
    1. public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

    2018-02-25 01:02:54
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载