如何实现数字角标

如何在不同机型手机上适配数字角标

前言

厂商支持说明

使用数字角标包含两个步骤:

第一步客户端配置

第二步服务端配置

客户端设置和清除角标api:

设置和清除角标

重要

移动推送SDK V3.9.1及以上版本支持数字角标功能

厂商支持说明

手机类型

自有通道

厂商通道

是否需要配置

华为

支持

支持

荣耀

支持

支持

小米

支持

支持

vivo

支持

不支持

oppo

不支持

不支持

魅族

不支持

不支持

第一步客户端配置

<!--华为/荣耀Badge需要权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.hihonor.android.launcher.permission.CHANGE_BADGE " />
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" />
<!--VIVO 角标需要权限-->
<uses-permission android:name="com.vivo.notification.permission.BADGE_ICON" />
说明

对华为/荣耀机型的角标支持,移动推送SDK只负责展示角标,角标的消除需要用户手动调用api完成

小米机型展示数字角标需要在设置中打开角标权限

小米机型桌面应用角标数值是累加应用在通知栏显示的除媒体、进度条和常驻通知外的所有通知的messageCount值,厂商通道没有设置messageCount, 默认为1

第二步服务端配置

服务端在发送通知时增加字段

关键字

类型

选项

含义

说明

AndroidBadgeAddNum

int

可选

设置角标累加值,在原角标的基础上进行累加

仅华为/荣耀厂商通道推送时有效

AndroidBadgeAddNum与AndroidBadgeSetNum同时存在,以AndroidBadgeSetNum为准

AndroidBadgeSetNum

int

可选

设置角标数字固定值

仅华为,荣耀,阿里云通道推送时生效

在小米机型上自有通道推送时为当前通知的messageCount的值

AndroidBadgeClass

String

可选

应用入口Activity的全类名

仅华为/荣耀厂商通道推送时有效

说明

更详细字段说明请参考以下链接内容

请求参数

下发角标数据结构

{
  "AppKey": "******",
  "PushType": "NOTICE",
  "DeviceType": "ANDROID",
  "Target": "ACCOUNT",
  "TargetValue": "86",
  "StoreOffline": true,
  "Title": "通知标题",
  "Body": "通知正文",
  "AndroidOpenType": "APPLICATION",
  "AndroidPopupActivity": "******",
  "AndroidPopupTitle": "******",
  "AndroidPopupBody": "******",
  "AndroidNotificationChannel": "******",
  "AndroidTargetUserType": 1,
  "AndroidBadgeAddNum": 7,
  "AndroidBadgeClass": "******",
  "AndroidBadgeSetNum": 11
}

设置和清除角标

设置设备上的应用角标

说明

当前接口仅支持华为,荣耀,vivo机型

华为机型在EMUI4.1 及以上支持角标功能

荣耀机型从Magic UI 6.0版本开始支持数字角标。‌

当前接口从移动推送SDK V3.9.1版本开始支持

setBadgeNum

接口定义

void setBadgeNum(Context context, int num)

所属类

CloudPushService

参数说明

参数

类型

是否必填

说明

context

Context

当前环境上下文

num

int

角标数量

如果传0,则清除角标

代码示例

//设置角标
PushServiceFactory.getCloudPushService().setBadgeNum(context, 1);
//清除角标
PushServiceFactory.getCloudPushService().setBadgeNum(context, 0);