必须同时安装JG-JCore和JG-JPush插件,正确配置manifest.json中插件专属AppKey位置,使用自定义调试基座,并分平台处理初始化与权限;缺一即导致真机调试失败。

uni-app 集成极光推送不是“装个插件就能用”,而是必须同时满足**插件依赖、配置位置、运行环境、平台差异**四个硬性条件,缺一不可。真机调试失败的 90% 案例,都卡在 JG-JCore 没装、AppKey 填错位置,或没用自定义调试基座。
必须同时安装 JG-JCore 和 JG-JPush 插件
只装 JG-JPush 会报 "找不到 JCore 依赖",因为极光 SDK 已拆分为基础服务(JG-JCore)和推送功能(JG-JPush)两个独立模块。
- HBuilderX → 【插件市场】→ 分别搜索并安装
JG-JCore和JG-JPush(顺序无关) - 安装后必须进
manifest.json→ 【APP原生插件配置】→ 手动勾选这两个插件 → 点【确定】 - 勾选后源码视图中会出现
nativePlugins节点;若没出现,说明勾选未生效 - 如果项目已有
nativeplugins/目录,先清空再重装,避免旧版.aar冲突导致initJPushService()静默失败
manifest.json 中 AppKey 必须填对位置
填错位置是真机调试失败最常见原因——不是填在 android 或 ios 的全局设置里,而是填在插件自己的配置块内,且 Android 和 iOS 的 key 绝对不能混用。
- 正确结构(源码视图):
{
"name": "JG-JPush",
"android": {
"JPUSH_APPKEY_ANDROID": "your_android_appkey_here",
"JPUSH_CHANNEL": "developer-default"
},
"ios": {
"JPUSH_APPKEY_IOS": "your_ios_appkey_here"
}
}
JPUSH_CHANNEL 只能是英文、数字或下划线,含中文/空格会导致华为、小米等厂商通道初始化失败manifest.json 中 app-plus → distribute → android → packagename 完全一致(包括大小写)Bundle ID 必须与 APNs 证书匹配,否则 initJPushService() 在 iOS 上返回 false
真机调试必须用自定义调试基座
直接点【运行到手机】走的是标准基座,里面没集成你装的原生插件,uni.requireNativePlugin("JG-JPush") 会返回 undefined,后续所有调用都无效。
- HBuilderX → 【发行】→ 【原生App-制作自定义调试基座】→ 选 Android 或 iOS → 等待完成
- 制作完成后,手机上卸载旧的 HBuilder 调试 App,再点【运行到手机】
- 首次运行时,控制台要看到
jpush connection: true才算连上;如果一直是false,优先检查网络、厂商通道是否开启、是否被国产 ROM 后台限制(如小米“省电模式”) - 开发阶段建议加
jpush.setLoggerEnable(true),日志能暴露通道初始化失败的真实原因
App.vue 中初始化必须分平台处理权限
iOS 和 Android 的权限模型完全不同:iOS 需主动请求通知授权,Android 8.0+ 需动态申请通知权限(但 uni-app 封装层不自动处理),且地理位置相关监听仅限 iOS。
- 初始化代码必须放在
onLaunch生命周期中,且需判断平台:
const jpush = uni.requireNativePlugin("JG-JPush")
if (uni.getSystemInfoSync().platform === "ios") {
jpush.requestNotificationAuthorization((res) => {
if (res.status === 2) { // 已允许
jpush.initJPushService()
}
})
} else {
jpush.initJPushService() // Android 可直接 init
}
onShow 或页面级 onLoad 中调用 initJPushService(),它只能且必须在启动时执行一次setAlias)、标签(setTags)等操作,应在用户登录成功后调用,而非启动即调receiveNotification)要在 init 之后立即注册,否则冷启动收到的通知可能丢失nativePlugins 配置不会自动带入,必须手动确认打包工程中是否包含 JG-JCore 和 JG-JPush 的完整目录结构,尤其是 android/libs 下的 .aar 文件是否齐全**。


















