更新记录

1.1.1(2021-05-27)

去除短信和通讯录及日历权限

1.1.0(2020-12-28)

设置隐藏通知栏参数

1.0.9(2020-12-26)

优化保活效果

查看更多

平台兼容性

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原生插件配置”->”云端插件“列表中删除该插件重新选择


## 插件开发简介

嵌入保活库 这里提供的应用保活机制是各种方案的混合处理。如果你的应用希望能够一直在后台运行(比如推送服务,黑屏传坐标点)而不被系统自动杀死的话,可以尝试一下。

插件解决的问题

app切换到后台、锁屏之后,系统经常会杀死app,导致app通信,定时任务、后台定位定位等无法正常运行。 新增定时任务回调请求接口可以写到里面,亲测小米9 ,在不设置后台无限制的情况下,只设置了一个电量优化,黑屏传数据传了三个多小时,之后可能不会传数据,但app还在休眠存活,点击亮屏再黑屏还可继续传,效果提高不少,提高使用效果可以设置后台无限制pushLive.gotoBackstage_WhiteList_autStart()

保活的模式(RunMode)

模式名 简称 备注
ENERGY 省电模式 省电一些,但保活效果会差一点
ROGUE 流氓模式 相对耗电,保活时间会长

插件使用说明

需要先引入原生插件到uniapp项目 详细步骤访问链接地址

https://ask.dcloud.net.cn/article/36106

1.初始化

const pushLive = uni.requireNativePlugin('service-keep-live');

2.设置定时任务执行间隔

    //设置定时任务触发时间 单位秒 60秒
                pushLive.setJobTime(60, function(res) {});

3. 启动保活服务

let obj = {
                    title: "高德导航",
                    content: "正在后台运行",
                    mode: 1 , //0省电模式 1流氓模式
                    isShow:true  //true显示通知栏,false隐藏通知栏(建议还是让通知栏显示出来,保活效果好点,新增!!)
                }
                pushLive.startService(obj, function(res) {
                    console.log(res)
                });

4.定时器 提高黑屏数据传输效果

如果在设置申请加入白名单,后台运行的情况下,黑屏不发送数据,请使用setInterval代替

var globalEvent = uni.requireNativePlugin('globalEvent');
globalEvent.addEventListener('doJobEvent', function() {
                console.log("---------")
                // 定时器回调,每隔15秒之后,该函数会被调用一次
                // 执行你的定时逻辑
                //uni.request({.....})
            });

5.设置黑屏一定时间唤醒屏幕 单位分钟

//设置黑屏唤醒屏幕 单位分钟 5分钟
    pushLive.setWakeScreen(5)

6.关闭黑屏唤醒屏幕

//关闭黑屏唤醒屏幕
    pushLive.colseWakeScreen(function(res) {
        console.log(res)
    }

7.申请加入白名单 (先初始化启动服务,在使用此方法,如果使用此方法,就不要使用9,10,11)

pushLive.gotoBackstage_WhiteList_autStart()

8.检测是否加入白名单

pushLive.isIgnoringBatteryOptimizations(function(res) {
                    console.log(res)
                })

9. 申请电池优化

pushLive.requestIgnoreBatteryOptimizations(function(res) {
                    console.log(res)
                });

10. 设置省电策略

pushLive.SetPowerKeeper(function(res) {
                    console.log(res)
                });

11.设置自启动

pushLive.gotoWhiteListSetting()

12.停止保活机制

pushLive.closeService(function(res) {
                    console.log(res)
                });

13.获取Android版本

//获取安卓版本号 
            pushLive.checkAndroidVersion(function(res){
                console.log(res)
            })
version_SDK_INT对应Android版本一览表
version_SDK_INT 对应Android版本
29 10
28 9
27 8.1
26 8.0
25 7.1
24 7.0

14.后台定位权限

14.1 判断是否有定位权限 (flag:false/true)

pushLive.isLocationPermissions(function(res){
                    console.log(res)
                })

14.2 申请后台定位权限

pushLive.requestLocationPermissions();

15.扩展 全局悬浮球(可最小化显示到桌面)

15.1参数配置(悬浮球图标请放到static/floatBallIcon目录下)

    pushLive.configFloatBall({
                        debug: false,
                        backToMainPage: true, //如果想返回有回调,设置为false,如果要实现桌面点击悬浮球进入app,设置为true
                        appid:"__UNI__9EDE**D",
                        //图标请放到static/floatBallIcon目录下
                    },
                    (ret) => {
                        console.log(ret)
                    }
                );

15.2 显示全局悬浮球(如果放到app.vue里面的话,使用setTimeout延迟执行显示)

pushLive.showFloatBallIcon();

15.3隐藏全局悬浮球

pushLive.hideFloatBallIcon();

15.4 从桌面自动弹出app界面(注意:切换到后台的时候悬浮窗设置成显示,才可实现自动弹出)

    pushLive.openAppView((res) => {
                        console.log(res)
                    });

15.5关闭悬浮服务

pushLive.destroy()

16.代码示例


<script>
    const pushLive = uni.requireNativePlugin('service-keep-live');
    export default {
        data() {
            return {}
        },
        onLoad() {
            //获取安卓版本号 
            pushLive.checkAndroidVersion(function(res) {
                console.log(res)
            })
            //注意:开启服务之后,配置后台运行,白名单,自启动,即可实现长时间保活,黑屏传数据
            this.goStartService();
            // !!!如果在设置后台运行的情况下,黑屏不发送数据,请使用setInterval代替 定时任务回调
            var globalEvent = uni.requireNativePlugin('globalEvent');
            globalEvent.addEventListener('doJobEvent', function() {
                console.log("---------")
                /* uni.request({}) */
            });
        },
        methods: {
            goStartService() {
                let obj = {
                    title: "高德导航",
                    content: "正在后台运行",
                    mode: 1,  //0是省点模式 1流氓模式
                    isShow:true  //true显示通知栏,false隐藏通知栏
                }
                pushLive.startService(obj, function(res) {
                    console.log(res)
                });
                //判断是否加入白名单
                pushLive.isIgnoringBatteryOptimizations(function(res) {
                    console.log(res);
                    let flag = res.flag;
                    if (flag == false) {
                        //提示 如果为了提高黑屏传点效果可以使用第二种申请加入白名单方式
                        //第一种申请加入白名单 只设置电量优化        
                        /*pushLive.requestIgnoreBatteryOptimizations(function(res) {
                                console.log(res)
                            });*/
                        //第二种 申请加入白名单,设置后台无限制,自启动(无需设置),设置电量优化
                        pushLive.gotoBackstage_WhiteList_autStart()
                    }
                })
                //设置定时任务触发时间 单位秒 60秒
                //如果在设置后台运行的情况下,黑屏不发送数据,请使用setInterval代替
                pushLive.setJobTime(60, function(res) {
                    console.log(res)
                });
                //设置黑屏唤醒屏幕 单位分钟 10分钟
                pushLive.setWakeScreen(5)

            },
            //判断应用是否添加在白名单之中
            isIgnoringBattery() {
                pushLive.isIgnoringBatteryOptimizations(function(res) {
                    console.log(res);
                    let flag = res.flag;
                    if (flag == false) {
                        pushLive.requestIgnoreBatteryOptimizations(function(res) {
                            console.log(res)
                        });
                    }
                })
            },
            //申请加入白名单
            requestIgnoreBattery() {
                pushLive.requestIgnoreBatteryOptimizations(function(res) {
                    console.log(res)
                });
            },
            //设置app自启动
            whiteListSetting() {
                pushLive.gotoWhiteListSetting()
            },
            stopService() {
                pushLive.closeService(function(res) {
                    console.log(res)
                });
            },
            gotoBackstageWhiteListAutStart() {
                pushLive.gotoBackstage_WhiteList_autStart()
            },
            addLocation() {
                let dst = setInterval(function() {
                    uni.request({
                        header: {
                            'Content-Type': 'application/x-www-form-urlencoded'
                        },
                        url: 'http://123.*******/location',
                        data: {
                            longitude: 114.1598,
                            latitude: 32.145380,
                            user_id: 1812
                        },
                        method: 'POST',
                        success: (res) => {
                            console.log(res)
                        }
                    })
                }, 1000 * 60)
            },
        }
    }
</script>

保活插件手机出现黑屏不执行基本问题排查

1.是否设置后台运行 2.如果是实现定位,排查App是否允许后台定位

隐私、权限声明

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

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.REORDER_TASKS" /> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>

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

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

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