更新记录
1.0.5(2023-03-25)
1、解决使用同一个插件的两个应用无法安装在同一台手机问题 2、添加定位回调显示
1.0.4(2022-04-20)
1、解决高德隐私合规性问题
1.0.3(2021-11-30)
1、解决锁屏开屏后会触发打开应用后自动关闭问题。
查看更多平台兼容性
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手机型号和品牌多样,保活配置难度也是较大,不同型号不同品牌配置参数有较大差异,不过关键的几个点理解了基本上就并不会有啥问题。如下:
- 配置自启动,应用被杀掉以后要能够自动起来,这个配置是关键。
- 配置允许后台运行,不同手机操作不一致,如设置白名单、修改省电策略等等。目的是让应用能够尽量长久的再后台运行。 以上连个如果设置合理了,基本上能保证不被杀不死,甚至关闭应用以后服务还能自动起来继续运行!
插件后续规划
1、新增推送监听功能。 2、新增蓝牙打印功能。
插件使用说明
- 需要先引入原生插件到uniapp项目 详细步骤访问链接地址
- https://ask.dcloud.net.cn/article/36106
特别说明
- 目前高德地图key的配置放在导入插件包时进行配置,如果不需要使用定位功能,则任意输入参数即可
- App模块配置中,Geolocation或者Map至少需要开启配置一项,否则插件无法进行定位的。
1. 引入组件
首先参考上面的方法引入在线原生插件到项目中,然后再进行以下操作:
var KeepAliveModule = uni.requireNativePlugin("yh-alive")//保活组件
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
});
});
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();
}