必须同时安装jg-jcore和jg-jpush插件,且在manifest.json中正确配置android/ios独立appkey、勾选插件、使用自定义调试基座,并在app.vue的onlaunch中初始化监听。

插件必须装两个:JG-JCore 和 JG-JPush
只装 JG-JPush 会报错“找不到 JCore 依赖”,因为极光 SDK 拆成了基础服务(JCore)和推送功能(JPush)两部分。HBuilderX 插件市场里搜不到单个“JG-JPush”就正常——它默认不显示未同时安装依赖的插件。
实操建议:
- 打开 HBuilderX → 左侧【插件市场】→ 分别搜索并安装:
JG-JCore和JG-JPush - 安装完后,必须进
manifest.json→ 【APP原生插件配置】→ 勾选这两个插件 → 点击【确定】,否则不会写入 nativePlugins 配置 - 如果项目已存在
nativeplugins/目录(比如之前做过离线打包),请确认里面没有旧版冲突 SDK,否则可能 init 失败但无明确报错
manifest.json 里 AppKey 填错位置就白配
填错位置是真机调试失败最常见原因。不是填在 “Android 设置” 或 “iOS 设置” 下,而是填在插件自己的配置块里——且 Android 和 iOS 的 key 必须分开填,不能混用。
正确位置(源码视图):
{
"name": "JG-JPush",
"android": {
"JPUSH_APPKEY_ANDROID": "你的Android AppKey",
"JPUSH_CHANNEL": "developer-default"
},
"ios": {
"JPUSH_APPKEY_IOS": "你的iOS AppKey"
}
}
注意:
-
JPUSH_APPKEY_ANDROID和JPUSH_APPKEY_IOS是两个独立字段,iOS 的 key 不能塞进 android 字段里 - 包名(
package)必须和极光后台创建应用时填写的完全一致,包括大小写;Android 包名在manifest.json的app-plus → distribute → android → packagename里 -
JPUSH_CHANNEL建议填英文或数字,不要带中文、空格或特殊符号,否则某些厂商通道初始化会静默失败
真机运行必须用自定义调试基座
直接点【运行到手机或模拟器】走的是标准基座,里面没集成你装的原生插件,uni.requireNativePlugin("JG-JPush") 会返回 undefined,后续所有调用都无效。
怎么做:
- HBuilderX → 【发行】→ 【原生App-制作自定义调试基座】→ 选择对应平台(Android/iOS)→ 等待完成
- 制作完成后,手机上卸载旧调试 App,再点【运行到手机】,这次才会安装含插件的新基座
- 首次运行时,控制台要看到
jpush连接 true才算连上;如果一直 false,先检查网络、厂商通道是否开启、是否被国产 ROM 后台限制
App.vue 中 init 和监听代码不能放错作用域
极光 SDK 初始化必须在 onLaunch 里,且仅限 #ifdef APP-PLUS 块内;放在 onShow 或全局变量里,会导致重复 init 或环境判断失败。
关键代码片段(App.vue):
#ifdef APP-PLUS
const jpushModule = uni.requireNativePlugin("JG-JPush")
jpushModule.setLoggerEnable(true)
jpushModule.initJPushService()
jpushModule.addConnectEventListener(result => {
console.log("jpush连接", result.connectEnable)
})
jpushModule.addNotificationListener(result => {
if (result.notificationEventType === 'notificationOpened') {
// 点击通知跳转逻辑
}
})
#endif
容易踩的坑:
- 漏掉
#ifdef APP-PLUS宏,H5 环境下会报requireNativePlugin is not a function - 把
addNotificationListener放在页面级组件里(比如某个 page.vue),而不是 App.vue 的 onLaunch,会导致冷启动时收不到点击事件 - 没调
jpushModule.setLoggerEnable(true),出问题时日志全黑,只能靠猜











