更新记录

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:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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();
},

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

1、插件不采集任何数据。 2、插件定位功能使用高德定位SDK,参考其官方网站 https://lbs.amap.com/ 3、插件定位功能使用高德定位SDK,启动时需要获取网络状态、访问Wi-Fi状态、位置信息、访问粗略位置、访问精准定位、读取手机状态和身份,其隐私协议参考 https://lbs.amap.com/agreement/compliance

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问