1. 极光key准备 去极光推送开放平台直接注册就好
申请时需要注意离线打包包名
2.uniapp离线包准备
2.1注意两个都需要下载
下载地址:极光推送 JPush 官方 SDK
下载地址:极光推送 JCore 官方 SDK
2.2两个离线包放入uniapp根目录的nativeplugins文件夹下没有就创建

2.3 manifest.json模块中选原生插件选中,最下面那个不用勾那是商米一体机打印插件

切换到安卓模块配置 勾选Push但是切记下面的俩不能勾选

2.4切换到源码模式配置极光key以及打包包名


2.5编写代码初始化极光在App.vue中
js
// #ifdef APP-PLUS
var jpushModule = uni.requireNativePlugin('JG-JPush');
// #endif
//在onMounted中或者onLaunch中
// #ifdef APP-PLUS
jpushModule.initJPushService();
jpushModule.setLoggerEnable(true);
jpushModule.addConnectEventListener((result) => {
console.log(result, 'addConnectEventListener');
let connectEnable = result.connectEnable;
uni.$emit('connectStatusChange', connectEnable);
});
jpushModule.addNotificationListener((result) => {
let notificationEventType = result.notificationEventType;
let messageID = result.messageID;
let title = result.title;
let content = result.content;
let extras = result.extras;
console.log('addNotificationListener:', result);
// uni.showToast({
// icon: 'none',
// title: JSON.stringify(result),
// duration: 3000
// });
if (notificationEventType == 'notificationOpened') {
// uni.navigateTo({
// url: '/pages/index/jump'
// });
}
});
jpushModule.addCustomMessageListener((result) => {
let type = result.type;
let messageType = result.messageType;
let content = result.content;
console.log(result, 'addCustomMessageListener');
// uni.showToast({
// icon: 'none',
// title: JSON.stringify(result),
// duration: 3000
// });
});
jpushModule.addInMessageListener((result) => {
// uni.showToast({
// icon: 'none',
// title: JSON.stringify(result),
// duration: 3000
// });
console.log(result, 'addInMessageListener');
});
jpushModule.addLocalNotificationListener((result) => {
let messageID = result.messageID;
let title = result.title;
let content = result.content;
let extras = result.extras;
console.log(result, 'resultaddLocalNotificationListener');
// uni.showToast({
// icon: 'none',
// title: JSON.stringify(result),
// duration: 3000
// });
});
//#endif
2.6准备工作完成开始打包放入安卓项目目录
选择发行--app本地打包-完成之后将文件放到离线打包项目中src/main/assets/apps目录下
uniapp离线打包还需其他配置具体参照里面有现成的例子直接拿过来根据教程改巴改巴
uniapp离线打包官网教程
3.android studio准备工作
3.1将从上面下载下来的两个插件目录以及子目录中的jar包跟arr包全部放入安卓目录下的libs目录中。注意是全部别丢包!!!
3.2在assets目录下创建dcloud_uniplugins.json文件具体原因看官网
json
//编写
{
"nativePlugins": [
{
"plugins": [
{
"type": "module",
"name": "JG-JCore",
"class": "cn.jiguang.uniplugin_jcore.JCoreModule"
}
],
"integrateType": "aar",
"minSdkVersion": "19",
"permissions": [],
"abis": [
"armeabi-v7a",
"arm64-v8a",
"x86"
],
"parameters": {
"JPUSH_APPKEY_ANDROID": {
"des": "[Android]极光portal配置应用信息时分配的AppKey",
"key": "换成极光申请的key"
},
"JPUSH_CHANNEL_ANDROID": {
"des": "[Android]用于统计分发渠道,不需要可填默认值developer-default",
"key": "developer-default"
}
}
},
{
"plugins": [
{
"type": "module",
"name": "JG-JPush",
"class": "cn.jiguang.uniplugin_jpush.JPushModule"
}
],
"integrateType": "aar",
"minSdkVersion": "19",
"permissions": [
"${applicationId}.permission.JPUSH_MESSAGE",
"android.permission.INTERNET",
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.POST_NOTIFICATIONS",
"com.huawei.android.launcher.permission.CHANGE_BADGE",
"com.vivo.notification.permission.BADGE_ICON",
"com.hihonor.android.launcher.permission.CHANGE_BADGE",
"android.permission.VIBRATE",
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_BACKGROUND_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.QUERY_ALL_PACKAGES",
"android.permission.GET_TASKS",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE",
"${applicationId}.permission.MIPUSH_RECEIVE",
"com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE",
"com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE"
]
}
]
}
3.3AndroidManifest.xml目录下编写
xml
都是权限
在manifest层级下
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.JPUSH_MESSAGE"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
application层级下
<!-- 这是uniapp离线打包申请的key-->
<meta-data
android:name="dcloud_appkey"
android:value="更换dcloud_appkey" />
<!-- since 3.3.0 Required SDK 核心功能-->
<!-- 可配置android:process参数将PushService放在其他进程中 -->
<!--User defined. For test only 继承自cn.jpush.android.service.JCommonService-->
<service android:name="io.dcloud.feature.jpush.PushService"
android:process=":pushcore" android:exported="true">
<intent-filter>
<action android:name="cn.jiguang.user.service.action" />
</intent-filter>
</service>
<meta-data android:name="dcloud_uninview_background"
android:value="true"/>
<!-- User defined. For test only 用户自定义接收消息器,3.0.7开始支持,目前新tag/alias接口设置结果会在该广播接收器对应的方法中回调-->
<!--since 3.3.0 接收JPush相关事件-->
<receiver android:name="io.dcloud.feature.jpush.PushMessageReceiver" android:exported="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="换成安卓包名即applicationId"></category>
</intent-filter>
</receiver>
<receiver
android:name="io.dcloud.feature.jpush.JPushReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" /> <!-- Required 用户注册SDK的 intent -->
<action android:name="cn.jpush.android.intent.UNREGISTRATION" />
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!-- Required 用户接收SDK消息的 intent -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!-- Required 用户接收SDK通知栏信息的 intent -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!-- Required 用户打开自定义通知栏的 intent -->
<action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" /> <!-- Optional 用户接受 Rich Push Javascript 回调函数的intent -->
<action android:name="cn.jpush.android.intent.CONNECTION" /> <!-- 接收网络变化 连接/断开 since 1.6.3 -->
<category android:name="${JPUSH_PKGNAME}" />
</intent-filter>
</receiver>
<meta-data
android:name="JPUSH_APPKEY"
android:value="换成自己的极光key"/>
3.4build.gradle中编写ndk选项以及manifestPlaceholders

3.5在src/main/assets/data/dcloud_properties中加入一行
xml
<feature name="Push" value="io.dcloud.feature.jpush.JPushService"></feature>
完事直接执行打包
注意事项
uniapp离线打包现在需要申请key(uniapp教程中有),里面需要sha1值跟sha256,
android sudio中可以创建签名使用命令即可得到签名的sha1跟256(自行百度吧)