更新记录
1.0.1(2026-07-21)
安卓端补充角标权限
1.0.0(2026-07-20)
初始版本
平台兼容性
uni-app(5.13)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | - | - | - | - | 5.0 | 12 | 12 |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.13)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | 5.0 | 12 | 12 | - |
xwq-jpush
xwq-jpush 是面向 uni-app x 的极光推送 UTS 插件,封装 Android、iOS、HarmonyOS 的基础推送能力。
支持平台
| 平台 | 状态 | 说明 |
|---|---|---|
| app-android | 已实现 | 基于极光 Android SDK cn.jiguang.sdk:jpush:5.8.0,支持基础推送、通知回调、别名、标签、手机号、角标等能力。 |
| app-ios | 已实现 | 基于本地 jpush-ios-5.6.0.xcframework 和 jcore-ios-5.0.1.xcframework,支持 APNs 通知注册、通知回调、别名、标签、手机号、角标等能力。 |
| app-harmony | 已实现 | 基于极光 HarmonyOS SDK @jg/push。 |
重要说明
- 本插件依赖原生 SDK 和原生配置,运行到标准基座时原生配置或三方 SDK 可能不生效;Android/iOS 真机调试请使用自定义基座或正式云打包。
initializeJpush()应在用户同意隐私政策后调用,避免违反极光 SDK 合规要求。- Android 当前只配置了极光基础通道;如需稳定离线推送,还需要继续接入华为、小米、OPPO、VIVO、荣耀、魅族、FCM 等厂商通道。
- iOS 推送依赖 APNs 能力,必须完成 Apple 证书、Capabilities、deviceToken 转发等配置,否则只能初始化 SDK,不能完整收到远程通知。
目录说明
| 文件 | 说明 |
|---|---|
utssdk/interface.uts |
插件公共 API、参数和回调类型定义。 |
utssdk/unierror.uts |
插件 UniError 错误主题、错误码和错误对象定义。 |
utssdk/app-android/index.uts |
Android 平台 UTS 入口,负责状态缓存、事件分发和 API 导出。 |
utssdk/app-android/JPushAndroidBridge.kt |
Android Kotlin 桥接层,负责调用极光 Android SDK。 |
utssdk/app-android/JPushAndroidReceiver.kt |
Android JPushMessageReceiver,负责接收通知、注册 ID、标签、别名等回调。 |
utssdk/app-android/JPushAndroidService.kt |
Android JCommonService,自定义推送核心服务。 |
utssdk/app-android/AndroidManifest.xml |
Android 插件内置清单,声明 JPush 权限、Receiver、Service 和 AppKey/Channel meta-data。 |
utssdk/app-android/config.json |
Android Gradle 依赖配置。 |
utssdk/app-ios/index.uts |
iOS 平台 UTS 入口,负责状态缓存、事件分发和 API 导出。 |
utssdk/app-ios/JPushIOSBridge.swift |
iOS Swift 桥接层,负责调用极光 iOS SDK 和通知代理回调。 |
utssdk/app-ios/info.plist |
iOS 插件配置,包含 JPushAppKey 和 JPushChannel。 |
utssdk/app-ios/Frameworks/ |
iOS 本地极光 SDK 依赖。 |
utssdk/app-harmony/index.uts |
HarmonyOS 平台 UTS 入口。 |
utssdk/app-harmony/JPushHarmonyBridge.ets |
HarmonyOS ETS 桥接层。 |
utssdk/app-harmony/resources/base/element/string.json |
HarmonyOS AppKey 和渠道资源配置。 |
Android 配置
1. AppKey 和渠道
插件的 AndroidManifest 使用了 ${JPUSH_APPKEY} 和 ${JPUSH_CHANNEL} 占位符。uni-app x 项目需要在项目根目录创建:
nativeResources/android/manifestPlaceholders.json
示例:
{
"JPUSH_APPKEY": "你的极光 Android AppKey",
"JPUSH_CHANNEL": "developer-default"
}
当前项目已配置该文件。注意:JPUSH_APPKEY 必须与极光控制台中 Android 应用的包名一致。
2. 基础通道和厂商通道
当前 Android 侧已实现极光基础通道,可以完成在线推送、通知回调、Registration ID、别名、标签和手机号等基础能力。
如果需要 App 被杀死、长期后台或厂商系统限制后台进程时仍稳定收到离线通知,需要继续配置厂商通道。厂商通道通常涉及:
- 对应厂商 SDK 依赖。
- AndroidManifest 中对应 Service、Receiver、Activity、meta-data。
- 厂商后台申请的 AppId、AppKey、AppSecret 等参数。
- 极光后台开启并配置对应厂商 channel。
不要在没有厂商参数时直接全量开启厂商通道,否则可能出现无效依赖、Manifest 冲突或运行时注册失败。
3. 通知权限
Android 13 及以上需要用户授予 POST_NOTIFICATIONS 权限,否则通知可能无法展示。插件 Manifest 已声明权限,业务侧仍需按产品流程引导用户授权。
iOS 配置
1. 本地依赖
iOS 侧依赖已配置为本地依赖,目录为:
uni_modules/xwq-jpush/utssdk/app-ios/Frameworks/
包含:
jpush-ios-5.6.0.xcframeworkjcore-ios-5.0.1.xcframeworkjpush-extension-ios-2.0.6.xcframework
如 iOS 编译时提示 Swift 找不到 JPUSHService、JPUSHRegisterDelegate 等符号,通常需要检查 xcframework 是否包含可被 Swift 导入的 module map,或补充桥接头配置。
2. AppKey 和渠道
修改:
uni_modules/xwq-jpush/utssdk/app-ios/info.plist
示例:
<key>JPushAppKey</key>
<string>你的极光 iOS AppKey</string>
<key>JPushChannel</key>
<string>App Store</string>
说明:
JPushAppKey必填,必须使用极光控制台 iOS 应用的 AppKey。JPushChannel可选,默认可使用App Store。- Swift 桥接层会优先读取
JPushAppKey,其次读取JPUSH_APPKEY。
3. APNs 能力
iOS 远程推送必须在 Apple 开发者后台和 Xcode 能力中完成以下配置:
- 开启
Push NotificationsCapability。 - 按需开启
Background Modes中的Remote notifications。 - 使用包含推送能力的 Provisioning Profile。
- 极光后台 iOS 应用已配置正确的 APNs 证书或 Auth Key。
apsForProduction要与证书环境一致。当前 UTS 入口默认使用开发环境false,生产包需改为true或扩展为可配置参数。
4. AppDelegate 转发
JPush iOS SDK 需要接收 APNs device token 和远程通知 payload。当前插件已提供 Swift 方法,但项目侧仍需要在 AppDelegate 生命周期中转发:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
JPushIOSBridge.registerDeviceToken(deviceToken)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
JPushIOSBridge.handleRemoteNotification(userInfo)
completionHandler(.newData)
}
不转发 deviceToken 时,iOS 远程通知链路无法完整建立;不转发 userInfo 时,极光统计和插件通知到达回调可能不完整。
HarmonyOS 配置
1. 极光 AppKey 和渠道
修改:
uni_modules/xwq-jpush/utssdk/app-harmony/resources/base/element/string.json
{
"string": [
{
"name": "jpush_appkey",
"value": "你的极光 HarmonyOS AppKey"
},
{
"name": "jpush_channel",
"value": "huawei store"
}
]
}
2. HarmonyOS client_id
修改或创建:
harmony-configs/entry/src/main/module.json5
关键配置:
{
"module": {
"metadata": [
{
"name": "client_id",
"value": "你的 HarmonyOS 应用 client_id"
}
],
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
}
}
client_id 必须属于当前 app-harmony.distribute.bundleName 对应的 HarmonyOS 应用。
3. 后台和签名要求
HarmonyOS 推送成功依赖以下外部配置:
- AGC/HarmonyOS 平台已给当前应用开通 Push Kit 推送服务。
- AGC/HarmonyOS 应用已配置当前签名证书的 SHA256 指纹。
- 当前运行包的
bundleName与 AGC/HarmonyOS、极光后台配置一致。 - 极光后台已开启 Harmony channel,并配置同一个包名、AppKey 和厂商通道信息。
- 修改
harmony-configs或资源文件后,建议清理旧的unpackage/dist/dev/app-harmony后重新运行。
引入方式
import {
addTags,
checkTagBindState,
cleanTags,
deleteAlias,
deleteTags,
getAlias,
getAllTags,
getRegistrationID,
goToAppNotificationSettings,
initializeJpush,
isNotificationEnabled,
MessageListener,
offListenerJpushMessage,
onListenerJpushMessage,
setAlias,
setChannel,
setLatestNotificationNumber,
setMobileNumber,
setPowerSaveMode,
setPushState,
setTags
} from '@/uni_modules/xwq-jpush'
推荐调用顺序
- 页面加载后先调用
onListenerJpushMessage(listener)注册监听。 - 再调用
initializeJpush()初始化极光 SDK。 - 在
onRegister(id)回调拿到非空 Registration ID 后,再执行别名、标签、手机号等绑定操作。 - 页面隐藏或卸载时调用
offListenerJpushMessage(),避免页面对象释放后仍收到回调。
API 说明
initializeJpush(): void
初始化极光推送。
平台差异:
- Android:读取 Manifest meta-data 中的
JPUSH_APPKEY和JPUSH_CHANNEL。 - iOS:读取
info.plist中的JPushAppKey,默认渠道为App Store。 - HarmonyOS:读取
resources/base/element/string.json中的jpush_appkey和jpush_channel。
onListenerJpushMessage(listener: MessageListener): void
注册推送监听器。
| 字段 | 类型 | 说明 |
|---|---|---|
onRegister |
(id: string) => void |
极光注册成功回调,id 为 Registration ID。 |
onServerConnect |
(state: boolean) => void |
极光连接或初始化状态。iOS 无 Android 同等长连接回调,初始化成功时会派发 true。 |
multiActionClicked |
(msg: string) => void |
多动作、扩展消息或 VoIP 消息回调,msg 为 JSON 字符串。 |
messageListener |
(msg: string) => void |
自定义消息回调,msg 为 JSON 字符串。 |
notityMessageOpened |
(msg: string) => void |
通知点击打开回调,msg 为 JSON 字符串。字段名保持当前插件 API 拼写。 |
notifyMessageDismiss |
(msg: string) => void |
通知清除或前台不展示回调,msg 为 JSON 字符串。 |
notifyMessageArrived |
(msg: string) => void |
通知到达回调,msg 为 JSON 字符串。 |
commandResult |
(msg: string) => void |
命令结果回调,包含权限、推送开关、标签、别名、手机号等结果。 |
offListenerJpushMessage(): void
移除当前监听器。建议在页面 onHide 或 onUnload 中调用。
getRegistrationID(): string
获取缓存的 Registration ID。初始化完成前可能返回空字符串;初始化后会顺带刷新最新 Registration ID,并通过 onRegister 回调返回。
isNotificationEnabled(): boolean
获取缓存的系统通知权限状态。Android/iOS 的权限查询都可能异步刷新,因此当前调用返回的是最近缓存值。
goToAppNotificationSettings(): void
跳转系统应用通知设置页。
setPushState(checked: boolean): void
开启或关闭极光推送。
| 参数 | 类型 | 说明 |
|---|---|---|
checked |
boolean |
true 开启推送,false 关闭推送。 |
setAlias(sequence, alias, callback): void
设置别名,覆盖原有别名。
| 参数 | 类型 | 说明 |
|---|---|---|
sequence |
number |
操作序号,用于匹配回调。建议短时间内唯一。 |
alias |
string |
要设置的别名。 |
callback |
(msg: string) => void \| null |
操作结果回调,msg 为 JSON 字符串。 |
deleteAlias(sequence, callback): void
删除当前别名。
getAlias(sequence, callback): void
查询当前别名。
setTags(sequence, tags, callback): void
覆盖设置标签集合。
addTags(sequence, tags, callback): void
追加标签集合。
deleteTags(sequence, tags, callback): void
删除指定标签集合。
cleanTags(sequence, callback): void
清空全部标签。
getAllTags(sequence, callback): void
查询全部标签。
checkTagBindState(sequence, tag, callback): void
查询指定标签是否绑定。
setMobileNumber(sequence, phone, callback): void
设置手机号。空字符串按极光 SDK 规则处理。
setChannel(channel: string): void
设置渠道名。建议在 initializeJpush() 前调用。
setLatestNotificationNumber(num: number): void
设置角标或最近通知数量。
- Android:调用
setLatestNotificationNumber。 - iOS:设置
applicationIconBadgeNumber并调用JPUSHService.setBadge。 - HarmonyOS:映射到
setBadgeNumber。
setPowerSaveMode(enable: boolean): void
设置省电模式。
- Android:转发给极光 Android SDK。
- iOS:极光 iOS SDK 无对应 API,仅返回提示事件。
- HarmonyOS:当前极光 HarmonyOS SDK 无对应 API,仅输出提示。
回调数据说明
所有原生事件最终都会转换为统一结构:
{
"type": "register",
"sequence": 0,
"code": 0,
"message": "registration id",
"value": "registration id 或 JSON 字符串"
}
UTS 入口会把不同 type 分发到对应 MessageListener 字段。value 始终按字符串处理;如果是复杂对象,则是 JSON 字符串,业务侧可自行 JSON.parse。
常见 type:
| type | 说明 |
|---|---|
register |
Registration ID 回调。 |
connected |
连接或初始化状态。 |
customMessage |
自定义消息。 |
notificationArrived |
通知到达。 |
notificationOpened |
通知点击打开。 |
notificationDismiss |
通知清除或未展示。 |
tagOperatorResult |
标签操作结果。 |
aliasOperatorResult |
别名操作结果。 |
mobileNumberOperatorResult |
手机号操作结果。 |
commandResult |
其他命令结果。 |
调试建议
- 初始化前先注册监听,避免错过早期回调。
onRegister返回非空 Registration ID 表示极光基础注册成功。- Android 标准基座无法生效原生依赖时,请使用自定义基座。
- iOS 真机运行必须使用签名基座或自定义基座,并完成 APNs 能力配置。
- HarmonyOS 推送 token 获取失败时,优先检查 AGC Push Kit、
client_id、签名证书 SHA256、bundleName 和极光后台 Harmony channel。 - 修改平台原生资源后,如仍读取旧配置,清理对应
unpackage/dist/dev/*后重新运行。

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 1329
赞赏 6
下载 12442127
赞赏 1935
赞赏
京公网安备:11010802035340号