如何在不同机型手机上适配数字角标
前言
使用数字角标包含两个步骤:
客户端设置和清除角标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);