uni-app无法强制保活应用,iOS需在manifest.json中配置UIBackgroundModes声明后台能力(如"audio"或"audio,location"),Android需使用前台服务+权限+厂商白名单引导,真机测试必须打包IPA/APK而非调试基座。

uni-app 不能让应用“不被杀掉”,只能按系统规则申请合法的后台能力。强行保活既不可行,也会导致审核失败或被厂商限制。
iOS 必须配置 UIBackgroundModes 才能支持后台音频或定位
切到后台就暂停音乐或停止定位?不是代码问题,是没在 manifest.json 里声明能力。
- 打开
manifest.json→ 切换到「源码视图」 - 在
"app-plus" → "distribute" → "ios"节点下添加:"UIBackgroundModes": "audio"(仅播放)或"audio,location"(播放+定位) - 值必须是字符串,逗号分隔;数组写法
["audio","location"]也支持,但云端打包时会自动转为字符串 - 填了没用的功能(比如
voip、bluetooth-central)会被忽略——苹果只认文档里列出的项 - 配置后必须提交 云端打包,真机运行(包括自定义调试基座)都不生效
Android 没有“保活配置”,只有前台服务 + 权限 + 厂商白名单引导
Android 系统从 8.0 起禁止后台长期运行服务,setInterval 或 WebSocket 在息屏后几分钟内就会断开。
- 唯一合规方式是启动带通知的前台服务:需原生插件(如
Keep-Alive)调用startForegroundService并展示持续通知 - 必须动态申请权限:
android.permission.FOREGROUND_SERVICE(Android 9+ 强制)、android.permission.POST_NOTIFICATIONS(Android 13+) -
WRITE_EXTERNAL_STORAGE已基本失效,下载文件请用plus.io.convertLocalFileSystemURL('_doc/xxx')存到应用私有目录 - 小米/华为/OPPO 等厂商需额外引导用户手动设置:关闭省电优化、开启自启动、允许后台弹出、锁屏不清理内存——这些无法用代码自动完成,必须弹窗提示跳转设置页
别碰“电池优化豁免”这种高风险操作
虽然 PowerManager.isIgnoringBatteryOptimizations() 可查状态,Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 可跳转设置页,但实际效果极差。
- Google Play 明确不鼓励该行为,部分厂商(如三星)根本没提供该开关
- 用户大概率拒绝授权,且即使同意,也不能保证后台服务持续运行
- 真正起作用的是前台服务 + 合理的业务逻辑(如用
plus.geolocation.watchPosition({background: true})配合location能力)
真机测试时最容易忽略的三个点
很多开发者卡在“明明配了却没用”,往往是因为这几个细节没处理好:
- iOS:没删掉旧的
UIBackgroundModes节点再重配(可视化界面有时残留无效配置) - Android:没在
nativePlugins里声明插件,或插件未正确注册class入口 - 两端共性:没区分开发态和生产态——真机运行走的是调试基座,所有后台能力均被禁用,必须打包 IPA/APK 后安装测试
配置本身只是起点,真正决定后台存活时长的是你调用的原生 API 是否符合系统预期。比如 iOS 开了 location 却没调 watchPosition 传 {background: true},系统照样会挂起进程。


















