更新记录
1.0.1(2023-03-25)
1、解决同一个手机无法安装两个使用本插件的应用。
2、添加定位回调信息
1.0.0(2021-12-13)
1、超强保活功能,电源和自启动配置好的话可以永久保活。
2、给前端提供定时任务。
3、提供通知栏消息监听功能。
4、提供通知栏消息上传到业务后台。
5、提供根据通知内容配置通知声音
6、提供相关配置调用接口。
7、提供位置获取功能,能够后台获取当前高德定位信息。
8、提供定时上传定位信息到业务后台。
9、提供定位权限查询和获取接口
平台兼容性
Android |
Android CPU类型 |
iOS |
适用版本区间:4.4 - 11.0 |
armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 |
× |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
插件主要功能
- 该Android保活组件集成了无声音乐(已优化功耗),前台服务、双进程守护、像素保活,jobs五种保活方式,只要用户不主动杀死程序基本可以保证不会死。
- 如果配置了自启动、电池管理等,即使用户主动关闭前端应用,后台进程也能够保持持续运行。
- 插件集成了位置监听功能,定位信息可以自动上报后台。
- 插件集成了通知监听功能,通知可以自动上报后台,也可以反馈前端,也可配置语音播报。
插件应用场景
- 应用需要尽量保持不被系统杀死。
- 需要持续在后台上传定位信息。
- 应用需要随时监听推送消息。
- 关闭应用插件服务可以自动起来,达到插件服务不死。
插件应用行业
- 服务行业,服务端需要持续监听新订单。
- 电商行业,商家需要持续监听订单信息。
- 外卖行业,商家需要监听新订单等信息,骑手需要随时监听新订单以及上报当前位置。
- 其他行业,比如需要实现个人免签支付用于监听微信支付宝通知等。
等等。。。
保活配置核心
由于Androiid手机型号和品牌多样,保活配置难度也是较大,不同型号不同品牌配置参数有较大差异,不过关键的几个点理解了基本上就并不会有啥问题。如下:
- 配置自启动,应用被杀掉以后要能够自动起来,这个配置是关键。
- 配置允许后台运行,不同手机操作不一致,如设置白名单、修改省电策略等等。目的是让应用能够尽量长久的在后台运行。
以上两个如果配置正确了,基本上能保证不被杀死,甚至关闭应用以后服务还能自动起来继续运行!
插件使用说明
- 需要先引入原生插件到uniapp项目 详细步骤访问链接地址
- https://ask.dcloud.net.cn/article/36106
特别说明
- 目前高德地图key的配置放在导入插件包时进行配置,如果不需要使用定位功能,则任意输入参数即可
- App模块配置中,Geolocation或者Map至少需要开启配置一项,否则插件无法进行定位的。
1. 引入组件
首先参考上面的方法引入在线原生插件到项目中,然后再进行以下操作:
var KeepAliveModule = uni.requireNativePlugin("yh-nl")//保活组件
const modal = uni.requireNativePlugin('modal');//弹toast需要
var globalEvent = uni.requireNativePlugin('globalEvent');//监听回调需要
2. 监听事件
监听定时任务回调。
globalEvent.addEventListener('myEvent', function(e) {
console.log('myEvent' + JSON.stringify(e));
modal.toast({
message: "myEvent收到:" + JSON.stringify(e),
duration: 1.5
});
});
监听通知回调。
globalEvent.addEventListener('notify', function(e) {
console.log('notify' + JSON.stringify(e));
modal.toast({
message: "notify:" + JSON.stringify(e),
duration: 1.5
});
});
3. 开始保活
参数说明
参数 |
默认值 |
说明 |
showNotification |
false |
是否显示状态栏通知 |
notificationTitle |
应用名称 |
通知标题 |
notificationText |
|
通知内容 |
runModel |
0 |
0-省点模式,省电一些,但保活效果会差一点;1-流氓模式,相对耗电,但可造就不死之身 |
intervalTime |
5000 |
定时任务时间间隔,单位:毫秒 |
使用示例
startKeepAlive() {
KeepAliveModule.startKeepAlive({
showNotification:true,
notificationTitle:"保活应用",
notificationText:"后台运行中",
runModel:1,//0-省电模式,1-流氓模式
intervalTime:5000,
},res=>{
modal.toast({
message: ret,
duration: 1.5
});
})
}
4. 停止保活
stopKeepAlive() {
var ret = KeepAliveModule.stopKeepAlive({})
modal.toast({
message: ret,
duration: 1.5
});
},
5. 开始位置监听
参数说明
参数 |
默认 |
说明 |
intervalTime |
2000 |
定时间隔时间 |
gaodeApiKey |
|
高德地图Key |
locationMode |
1 |
定位模式 1:高精度 2:仅网络(低功耗)3:仅设备 |
purpose |
0 |
定位场景 0:无、1:签到、2:出行、3:运动 |
ifUpload |
false |
是否上报服务器 |
uploadUrl |
|
上报接口,post上传接口,默认上传主要定位数据,如http://xx/api/xxx |
params |
|
其他参数,如"{'lat':'1','lng':'3'}" |
headers |
|
Http的header参数 |
定位信息默认上传参数
参数 |
类型 |
说明 |
longitude |
double |
经度 |
latitude |
double |
纬度 |
accuracy |
float |
精度 |
address |
String |
地址 |
speed |
float |
速度 |
county |
String |
国家 |
province |
String |
省 |
city |
String |
城市 |
district |
String |
城区 |
street |
String |
街道 |
streetNum |
String |
街道门牌号 |
cityCode |
String |
城市编码 |
adCode |
String |
区域编码 |
使用示例
startLocation() {
KeepAliveModule.startLocation({
intervalTime: 5000,//定位间隔时间
gaodeApiKey: "0eef1axxxxxx7964",//高德地图Key,已停用,引入插件配置
locationMode: 1,//定位模式
purpose: 0,//定位场景
ifUpload: true,//是否上报服务器
uploadUrl: "http://xx:8080/api/reportLocation",//上报接口
params: "{'lat':'1','lng':'3'}",//其他参数
headers: "{'authorization1':'Bearer xOHeJhg'}",
}, function(res) {
console.log("启用结果:", res);
});
}
6. 停止监听
stopLocation() {
let ret = KeepAliveModule.stopLocation();
modal.toast({
message: "停止定位服务",
duration: 1.5
});
}
7. 获取当前位置
getCurrentLocation() {
let ret = KeepAliveModule.getCurrentLocation();
modal.toast({
message: ret,
duration: 1.5
});
}
8. 电池白名单
inBatteryWhiteList() {
KeepAliveModule.inBatteryWhiteList((ret) => {
modal.toast({
message: ret,
duration: 1.5
});
})
}
9. 跳转电池设置
jumpBatterySetting() {
var ret = KeepAliveModule.jumpBatterySetting({})
modal.toast({
message: ret,
duration: 1.5
});
}
10. 跳转自启动设置
jumpAutoStart() {
var ret = KeepAliveModule.jumpAutoStart({})
modal.toast({
message: ret,
duration: 1.5
});
}
11. 检查定位服务/权限
返回参数说明
参数 |
类型 |
说明 |
service |
boolean |
定位服务是否开启,true-已开启,其他-未开启 |
location |
boolean |
定位权限是否已授权,true-已授权,其他-未授权 |
使用示例
checkLocationPermission() {
KeepAliveModule.checkLocationPermission(res => {
modal.toast({
message: "定位服务:" + res.service + ",定位权限:" + res.location,
duration: 1.5
});
});
}
12. 跳转定位服务开启页面
toOpenGps(){
let ret = KeepAliveModule.toOpenGps();
modal.toast({
message: "跳转定位服务",
duration: 1.5
});
}
13. 获取定位权限
requireLocationPermission(){
let ret = KeepAliveModule.requireLocationPermission();
}
14. 判断通知是否打开
isNotificationEnabled() {
let ret=KeepAliveModule.isNotificationEnabled();
modal.toast({
message: ret,
duration: 1.5
});
}
15. 跳转通知设置页
openNotifySetting() {
KeepAliveModule.openNotifySetting();
}
16. 判断通知是否打开(该通知未打开,系统无法接收应用该通知)
isNotificationEnabled() {
let ret=KeepAliveModule.isNotificationEnabled();
modal.toast({
message: ret,
duration: 1.5
});
}
17. 跳转通知设置页
openNotifySetting() {
KeepAliveModule.openNotifySetting();
}
18. 应用通知授权判断(通知未授权,无法获取到应用通知内容)
checkNotifySetting(){
let ret=KeepAliveModule.checkNotifySetting();
modal.toast({
message: ret,
duration: 1.5
});
},
19. 应用通知授权配置
goNotifySetting(){
KeepAliveModule.goNotifySetting();
},
20. 开始监听通知信息
参数说明
参数 |
默认 |
说明 |
listenPkgs |
|
监听包名,格式如:"com.tencent.mm,com.xyz.abc",如果多个应用中间用逗号分隔,如果不填,则默认监听当前应用的通知 |
ifPlayAudio |
false |
是否播放音频,如果选择是,audioJsons必填,否则会报错 |
audioJsons |
|
音频内容,格式如下:"[{'title':'微信','audioUrl':'https://bjee0d8.mp3'}]",其中title表示通知标题信息,audioUrl表示播放的音频文件,达到不同通知播放播放不同音频,注意:音频文件务必使用网络音频文件 |
ifUpload |
false |
是否上报服务器 |
uploadUrl |
|
上报接口,post上传接口,如http://xx/api/xxx,上传参数具体如下表 |
params |
|
其他参数,如"{'lat':'1','lng':'3'}" |
headers |
|
Http的header参数 |
通知信息默认上传参数
参数 |
类型 |
说明 |
title |
String |
通知标题 |
content |
String |
通知内容 |
data |
String |
通知数据内容,如果以上两个参数不满足可自行解析 |
使用示例
openNotifyListener(){
let ret=KeepAliveModule.openNotifyListener({
ifUpload: true,//是否上报服务器
ifPlayAudio:true,//是否播放音频
listenPkgs:"com.tencent.mm",//监听包名
audioJsons:"[{'title':'微信','audioUrl':'https://xxx0d8.mp3'}]",//音频文件
uploadUrl: "http://192.168.0.104/api/uploadXXX",//上报接口
params: "{'lat':'1','lng':'3'}",//其他参数
headers: "{'authorization':'Bearer eyJhbGciOiJBzpIm8A'}",
});
modal.toast({
message: ret,
duration: 1.5
});
},
21. 清空通知栏信息
clearNotify(){
KeepAliveModule.clearNotify();
},