更新记录
1.1.0(2026-10-23)
兼容蒸汽模式
平台兼容性
uni-app(5.26)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | √ | × | × | √ | × | √ | √ | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(5.26)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | √ | √ | × | × |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | × | × | √ |
UTS 应用角标与未读数(通知联动、权限管理)
为 Android / iOS App 提供角标设置、清空和本地通知联动,适合消息、订单、待办等未读数提醒。可查询设备建议策略,附可直接沿用的演示页。
| 功能 | 说明 |
|---|---|
| 设置与清空 | 更新应用图标角标;支持 0~9999,0 表示清空 |
| 通知联动 | 自定义通知标题、正文、通知 ID 和 Android 通知渠道 |
| 权限与设置 | 申请通知权限,打开当前 App 的系统设置 |
| 设备诊断 | 返回厂商、建议策略、通知授权和渠道信息 |
HBuilderX 5.26+;版本 1.1.0;插件 ID:austin-badge-x。
| 项目 | Android | iOS | 演示页 |
|---|---|---|---|
| uni-app x · Vapor | 5.0+ | 以项目基座最低版本为准 | index.uvue |
| uni-app x · VDOM | 5.0+ | 以项目基座最低版本为准 | index.uvue |
| uni-app · Vue3 | 5.0+ | 12.0+ | index.vue |
Web、小程序、鸿蒙、Vue2 和 nvue 不在本版支持范围。Android 显示数字还是圆点,由系统桌面决定;通知提交成功不代表桌面一定出现角标。
第 1 步:导入插件
插件放在 你的项目/uni_modules/austin-badge-x/,uni_modules 与项目的 manifest.json、pages.json 同级,保留目录内全部文件。
在业务页面的 <script setup lang="uts"> 中这样导入:
import { getBadgeSupportInfo, setBadgeCount, clearBadge } from '@/uni_modules/austin-badge-x'
@/ 表示项目源码目录,上述路径对应 你的项目/uni_modules/austin-badge-x/。HBuilderX 会按 Android / iOS 自动选择原生实现。完整按钮示例见第 3 步。
第 2 步:通知权限与自定义基座
Android 插件自动合并以下权限;Android 13+ 还需调用权限申请 API。
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" />
<uses-permission android:name="com.hihonor.android.launcher.permission.CHANGE_BADGE" />
<uses-permission android:name="com.vivo.notification.permission.BADGE_ICON" />
iOS 首次使用前申请通知授权,并在系统设置中允许该 App 的“角标”。本插件只使用本地通知,不需要 P8、APNs、App Groups 或后台模式,也不需要新增隐私用途说明。
- HBuilderX 选中项目,进入 发行 → 原生 App 云打包,勾选 制作自定义调试基座。
- Android 填写应用包名和打包要求的签名信息;iOS 填写与 Bundle ID 匹配的 P12、证书密码及
.mobileprovision描述文件,真机调试使用包含该 iPhone UDID 的 Development 或 Ad Hoc 描述文件,证书类型需与其匹配。 - 打包完成后安装新基座,在运行菜单选择 自定义基座 再运行项目。进入演示页后点“申请通知权限”,按系统提示允许。
首次导入、更新原生代码或修改权限后重新制作基座;只改页面和调用参数时正常运行即可。完整基座操作见 DCloud 自定义基座说明。
尚无 iOS 签名材料时:按 Apple CSR 流程 申请开发证书,在生成 CSR 的 Mac 钥匙串中将证书连同私钥导出为 P12;注册 Bundle ID、添加测试设备 UDID,再按 Apple 开发描述文件流程 选择该 App ID、证书和设备,下载 .mobileprovision。
第 3 步:最小调用
下面的按钮先申请权限,再发送一条携带未读数的本地通知。返回手机桌面查看角标,通知中心查看通知。
<template>
<view class="page">
<button @click="showUnread">提醒 9 条未读消息</button>
<text>{{ message }}</text>
</view>
</template>
<script setup lang="uts">
import { ref } from 'vue'
import {
requestBadgePermissionIfNeeded,
syncBadgeWithNotification,
BadgePermissionResult,
BadgePermissionOptions,
BadgeNotificationOptions
} from '@/uni_modules/austin-badge-x'
const message = ref('')
function showUnread(): void {
const permissionOptions: BadgePermissionOptions = {
success: (_permission: BadgePermissionResult) => {
const notificationOptions: BadgeNotificationOptions = {
count: 9,
title: '未读消息',
content: '你有 9 条消息待查看'
}
const result = syncBadgeWithNotification(notificationOptions)
message.value = result.ok ? result.note : result.errMsg
},
fail: (result: BadgePermissionResult) => {
message.value = result.errMsg
}
}
requestBadgePermissionIfNeeded(permissionOptions)
}
</script>
<style>
.page { padding: 24px; }
</style>
count 是应用总未读数的绝对值,不会自动累加或维护业务消息数。普通 Vue3 将 lang="uts" 改为 lang="ts"。只更新角标时调用 setBadgeCount({ count: 9 });清空使用 clearBadge()。Android 纯设置主要适用于华为 / 荣耀、vivo,其他桌面优先使用通知联动。
第 4 步:运行演示或复制页面
在 pages.json 的 pages 数组追加:
{ "path": "uni_modules/austin-badge-x/index", "style": { "navigationBarTitleText": "应用角标与未读数", "disableScroll": true } }
打开演示:
uni.navigateTo({ url: '/uni_modules/austin-badge-x/index' })
- 点 申请通知权限,按系统提示允许。
- 用 1 / 9 / 99 / 清空 测试直接设置,再返回桌面查看。
- 选择通知预设或编辑标题、正文,点通知联动,再查看通知中心与桌面。
- 未显示时,展开设备诊断查看建议策略;到通知设置开启通知、角标及渠道开关。
沿用页面:将 uni_modules/austin-badge-x/index.uvue 复制为 pages/badge/index.uvue,在 pages.json 注册 pages/badge/index。普通 Vue3 复制 uni_modules/austin-badge-x/index.vue,目标为 pages/badge/index.vue。页面内的 @/uni_modules/austin-badge-x 导入保持原样,按业务修改按钮、预设和样式。
API
| 方法 | 返回 | 说明 |
|---|---|---|
getBadgeSupportInfo() |
BadgeSupportInfo |
查询设备支持与建议策略,不弹授权框 |
setBadgeCount(options) |
BadgeResult |
设置角标,可选择同时发送通知 |
clearBadge() |
BadgeResult |
清空角标和插件创建的通知 |
syncBadgeWithNotification(options) |
BadgeResult |
更新同 ID 的本地通知并携带角标数;0 时移除该通知 |
requestBadgePermissionIfNeeded(options) |
void |
通过 success / fail / complete 返回 BadgePermissionResult |
openNotificationSettings() |
BadgeResult |
请求打开当前 App 的通知设置;iOS 16 以下打开 App 设置 |
输入参数
BadgeCountOptions:
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
count |
number | 必填 | 未读数,向下取整并限制在 0~9999;负数、非有限数按 0 处理 |
title |
string | 未读消息提醒 |
联动通知标题,去首尾空白,空字符串使用默认值 |
content |
string | 你有新的未读消息 |
联动通知正文,同上 |
notificationId |
number | 9001 |
向下取整后须在 1~2147483647;同 ID 更新原通知,无效值使用默认值 |
autoCreateNotification |
boolean | false |
true 时同时尝试发送本地通知 |
BadgeNotificationOptions 包含 count、title、content、notificationId,规则同上,另有:
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
channelId |
string | austin_app_badge_channel |
Android 8+ 渠道 ID;去首尾空白,空值使用默认值;iOS 忽略 |
channelName |
string | 应用角标同步 |
新建渠道时的名称;空值使用默认值;iOS 忽略 |
以上两个计数 API 的 options 省略或传 null 时按 count=0 处理,建议显式传入计数。Android 的 setBadgeCount({ count: 0 }) 会调用 clearBadge(),结果 action 也为 clearBadge;iOS 只清角标,需要移除本插件全部通知时使用 clearBadge()。
BadgePermissionOptions 的 success、fail、complete 均为可选回调,参数为 BadgePermissionResult。已授权时直接回调,不重复弹窗;用户拒绝后可调用设置 API。每次请求先调用 success 或 fail,再调用 complete。
操作结果:BadgeResult
| 字段 | 类型 | 说明 |
|---|---|---|
ok |
boolean | 本次调用是否成功提交,不能据此判断 Android 桌面已显示角标 |
platform |
string | android / ios;不支持的平台为 other |
action |
string | setBadgeCount / clearBadge / syncBadgeWithNotification / openNotificationSettings |
appliedCount |
number | 本次处理的计数;清空、设置跳转或部分失败为 0,不是桌面实测值 |
strategy |
string | 实际采用的更新策略,见下表 |
errCode / errMsg |
number / string | 0 表示成功;失败见错误处理 |
note |
string | 本次行为与限制说明 |
debug |
UTSJSONObject? | Android 可选诊断数据,不参与成功判断 |
权限结果:BadgePermissionResult
| 字段 | 类型 | 说明 |
|---|---|---|
ok / granted |
boolean | 当前是否可以使用通知权限;Android 还检查系统通知总开关,iOS 还检查角标开关 |
platform |
string | android / ios / other |
permissionState |
string | granted / denied / disabled / busy / undeclared / activity-missing / request-failed / cancelled / unsupported;iOS 另有 notDetermined / unknown |
requiresNotificationPermission |
boolean | Android 13+、iOS 为 true;不等于当前已授权 |
notificationPermissionGranted |
boolean | Android 通知授权状态;iOS 同时要求通知已授权且角标开关开启 |
errCode / errMsg / note |
number / string / string | 错误码、错误信息、补充说明 |
设备诊断:BadgeSupportInfo
| 字段 | 类型 | 说明 |
|---|---|---|
supported |
boolean | 当前平台与上下文可使用插件,不代表桌面保证显示角标 |
platform |
string | android / ios / other |
brand / manufacturer / model |
string | 品牌、制造商、机型 |
sdkInt |
number | Android API Level;iOS 为 0 |
supportType |
string | 设备分类,见下表 |
badgeMode |
string | number / dot-or-number / apply-required / unknown / unsupported,为策略建议 |
requiresNotificationPermission |
boolean | 是否需要通知运行时授权 |
notificationPermissionGranted |
boolean | 当前授权结果,iOS 同时检查角标开关;Android 另需检查渠道 |
canSetBadgeDirectly |
boolean | 是否有直接设置策略;不代表每个系统桌面都生效 |
canSyncWithNotification |
boolean | 是否具备通知联动策略,实际调用仍需授权 |
recommendedStrategy |
string | 推荐下一步,见下表 |
note |
string | 设备说明 |
debug |
UTSJSONObject? | Android 可选桌面、渠道诊断数据 |
枚举与诊断字段
| 字段 | 取值 |
|---|---|
supportType |
ios-native-badge;Android:android-huawei-badge、android-vivo-badge、android-xiaomi-notification、android-oppo-apply-required、android-notification-badge、android-unavailable;其他平台:unsupported |
recommendedStrategy |
ios-native、request-permission、vendor-direct+notification、vendor-direct、sync-with-notification、open-notification-settings、official-apply-or-notification、official-apply-or-open-notification-settings、foreground-only、retry(iOS 查询超时)、unsupported |
strategy |
ios-native、ios-native+local-notification、vendor-huawei、vendor-vivo、notification、notification-clear,Android 多策略用 + 拼接;另有 request-permission、settings、none、best-effort、unsupported |
Android debug 按调用返回以下可选字段:launcherActivityClassName(应用入口)、homeLauncher.packageName/className(系统桌面)、defaultChannelId / channelId、defaultChannelSnapshot / channelSnapshot(渠道)、activeNotifications(通知快照)、vendorStrategy、recommendedStrategy、notified、isHuaweiFamily/isVivoFamily/isXiaomiFamily/isOppoFamily。
渠道快照包含 channelId、notificationsEnabled、notificationPermissionGranted、channelSupported,Android 8+ 另有 channelExists;存在时返回 channelName、channelImportance、channelCanShowBadge、channelDescription。通知快照包含 supported,支持时返回 count、ids、channels,读取失败时为 error。
错误处理
| 错误码 | 说明与处理 |
|---|---|
0 |
成功,按 note 判断本次提交了什么操作 |
38001 |
Android 页面不可用或平台不支持;在 App 前台调用 |
38002 |
通知未授权、通知总开关关闭、iOS 角标关闭或申请失败;在通知设置开启后重试 |
38003 |
系统设置跳转失败;可手动进入系统设置 |
38004 |
直接设置不支持、通知渠道关闭 / 提交失败,或 iOS 权限读取失败;查询诊断后重试或改用建议策略 |
38005 |
Android 已有权限申请进行中;等待完成后再操作 |
38006 |
基座未声明通知权限;保留完整插件,重新制作并安装自定义基座 |
平台限制
- Android:数字、圆点及计数方式由桌面决定。华为 / 荣耀、vivo 可尝试厂商方案;小米 / Redmi 和通用 Android 优先使用通知联动;OPPO / ColorOS 数字角标通常涉及厂商能力申请,本插件不会代申请或绕过限制。
- 通知渠道:用户可单独关闭通知、渠道或角标;修改渠道名称或重复调用不会覆盖用户选择。
openNotificationSettings().ok=true只表示提交跳转,回到 App 后重新查询。 - 清理范围:
clearBadge()清空应用角标,移除本插件记录的通知,保留宿主其他通知;syncBadgeWithNotification({ count: 0, notificationId: 9001 })只移除对应 ID 的插件通知并清空角标。 - iOS:角标由系统管理;本插件不替换宿主的通知 delegate,前台是否显示横幅沿用宿主配置。通知是本地即时提醒,不是远程推送。

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 642
赞赏 4
下载 12711293
赞赏 1957
赞赏
京公网安备:11010802035340号