更新记录
1.0.5(2023-04-12)
- 优化Android逻辑
1.0.4(2023-03-28)
- 增加Android修改服务标题内容接口
1.0.3(2023-01-06)
增加跳转到app设置页、系统设置页接口
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 14.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:11 - 17 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在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原生插件配置”->”云端插件“列表中删除该插件重新选择
功能
- ios通过后台定位或着无限播放音乐来达到后台保活的目的
- ios商店审核时注意说明有后台播放音乐或后台定位功能
- android由于各个厂家碎片化严重,请测试后再购买
- android白名单
- 支持息屏后台任务
iphone X上测试了一个钟都没问题可以保活
集成步骤:
- 在项目manifest.json -》 App常用其它配置 -》 后台运行能力增加audio,location
- 配置定位权限说明:NSLocationWhenInUseUsageDescription、NSLocationAlwaysUsageDescription、NSLocationAlwaysAndWhenInUseUsageDescription
- 在本网页右上角按钮选择试用,绑定项目ID,在项目manifest.json -》App原生插件配置里选择本插件
- 重新自定义基座,只用自定义基座运行
var bgKeepAlive = uni.requireNativePlugin("wrs-bgKeepAlive");
- ios后台保活
// 初始化
bgKeepAlive.initSDK();
// 设置回调
bgKeepAlive.setCallback((resp) => {
var opt = resp.opt;
switch (opt) {
// 监听app进入前台,这时结束后台任务
case "appWillEnterForeground": {
bgKeepAlive.stopLocation();
bgKeepAlive.stopMusic();
bgKeepAlive.stopBgRuning();
}
break;
// 监听app进入后台
case "appDidEnterBackground": {
// app进入后台,此时采用定位保活还是采用播放音乐保活可以根据自己业务决定
var resp = bgKeepAlive.authorizationStatus();
if (isString(resp)) {
resp = JSON.parse(resp);
}
// 0:kCLAuthorizationStatusNotDetermined
// 1: kCLAuthorizationStatusRestricted
// 2:kCLAuthorizationStatusDenied
// 3:kCLAuthorizationStatusAuthorizedAlways
// 4: kCLAuthorizationStatusAuthorizedWhenInUse
// 5: kCLAuthorizationStatusAuthorized
var authorizationStatus = resp.authorizationStatus;
if (authorizationStatus == 3) { // 当定位权限是总是一直定位时采用定位来保活
bgKeepAlive.startLocation();
} else { // 采用播放音乐保活
var absPath = plus.io.convertLocalFileSystemURL('_www');
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (absPath.endWith('/')) {
absPath = absPath.substring(0, absPath.length - 1);
}
var url = absPath + "/static/RunInBackground.mp3"
bgKeepAlive.playMusic({
url: url,
numberOfLoops: -1, // 循环此时,-1表示无限循环
volume: 0 // 音量
});
}
// 开始运行后台任务
bgKeepAlive.startBgRuning();
// 这里执行自己的后台业务,这里以定时器来模拟后台业务
this.doBgTask();
}
break;
case "backgroundTaskExpiration": {
console.log(backgroundTaskExpiration);
}
break
default:
break;
}
});
// 请求定位权限
bgKeepAlive.requestLocationAuthority();
- android后台保活
- 设置service的标题和内容,需要在startBgRuning之前调用才能生效,android Q以后service以前台服务形式存在,Q以前以后台服务形式存在, 修改图标或背景音乐参考demo,直接替换掉nativeplugins/wrs-bgKeepAlive/android/res/drawable和raw下的资源
// 在startBgRuning之前调用
var params = {
title: "主服务",
content: "主服务"
};
bgKeepAlive.setServiceContent(params);
- 进入后台需要执行后台任务时调用:
// 这里模拟app进入后台,一般代码放到App.vue的onHide里
bgKeepAlive.startBgRuning();
this.doBgTask();
- 从后台返回到前台时结束后台任务时调用:
// 这里模拟app进入前台,一般代码放到App.vue的onShow里
bgKeepAlive.stopBgRuning();
- 跳到app设置页面
bgKeepAlive.toAppSettingPage();
- 跳到系统设置页面,仅支持Android
switch (uni.getSystemInfoSync().platform) {
case 'android':
// var main = plus.android.runtimeMainActivity();
// var Intent = plus.android.importClass("android.content.Intent");
// var mIntent = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS");
// main.startActivity(mIntent);
bgKeepAlive.toSysSettingPage();
break;
case "ios":
break;
default:
break;
}
- Android白名单接口
目前市面上流行的手机系统如果要支持后台运行基本上都要开启白名单
这里的白名单主要指的是:
- 电池后台耗电管理
从 Android 6.0 开始,系统为了省电增加了休眠模式,系统待机一段时间后,会杀死后台正在运行的进程。 但系统会有一个后台运行白名单,白名单里的应用将不会受到影响 开启路径(不通机型有所不一样):「设置」 - 「电池」 - 「电池优化」 - 「未优化应用」
- 允许后台高耗电
- 允许自启动
- 允许后台活动
- 开机自启动 开启路径(不通机型有所不一样):「应用权限设置页」 - 「所有权限」
- 自启动(开机自动 后台启动)
- 开机启动
-
锁屏清理 开启路径(不通机型有所不一样):「应用权限设置页」 - 「锁屏清理」 - 「开启」
-
神隐模式(小米) 开启路径(不通机型有所不一样):「应用权限设置页」 - 「神隐模式」 - 「无限制」 - 「开启定位」
-
还有一些其它机型有类似「绿色后台」、「应用保护」这样的设置,都需要开启
这里的白名单接口bgKeepAlive.whiteList()会连续弹出多个提醒框提示用户跳到对应页面去开启设置,但也没法适配所有机型,特别是一些新出的系统(如:鸿蒙)
所以建议在产品功能增加文字说明提示用户主动去跳到对应的设置界面去开启白名单,不要依赖白名单接口bgKeepAlive.whiteList();
经作者测试的机型,所有开启白名单的都可以保持后台运行,包括锁屏状态
switch (uni.getSystemInfoSync().platform) {
case 'android':
bgKeepAlive.whiteList();
break;
case "ios":
break;
default:
break;
}
息屏说明
- ios支持息屏的后台任务
- Android需要调用白名单接口,当用户授权白名单接口的权限时,也能支持息屏任务,当然作者测试机型有限
支持定制,联系方式 QQ:252797991