uniapp:APP开发,后台保活

前言:

  1. 在ios中,软件切换至后台、手机息屏,过了十来秒软件就会被系统挂起,APP内的任务就不能继续执行;
  2. 在android中,默认情况下,软件在后台运行的时候,触发某些特定条件的情况下,会被杀掉进程。

解决方案:

以下方案均测试息屏后台运行两小时

一、后台运行音频(无声音频)(一般)

manifest.json配置:APP常用其他设置—ios设置-后台运行能力,开启audio

代码:

// 开启后台音乐模式
import icon from '@/static/appIcons/20x20.png';
const playTimes = ref(0);
const createAudio = () => {
  const bgAudioManager = uni.getBackgroundAudioManager();
  bgAudioManager.title = '正在运行';
  bgAudioManager.singer = '小熊管家';
  bgAudioManager.coverImgUrl = icon;
  bgAudioManager.src =
    'https://******/keepAppLife.mp3';
  let t: any = null;
  const rePlay = () => {
    if (t) {
      return;
    }
    t = setTimeout(() => {
      clearTimeout(t);
      t = null;
      bgAudioManager.play();
    }, 30000);
  };
  bgAudioManager.onPlay(() => {
    playTimes.value++;
  });
  bgAudioManager.onEnded(() => {
    bgAudioManager.play();
  });
  bgAudioManager.onPause(() => {
    rePlay();
  });
  bgAudioManager.onStop(() => {
    rePlay();
  });
  bgAudioManager.onError(() => {
    rePlay();
  });
};
onShow(createAudio);

缺点:会被其他使用音频功能影响。

二、监听蓝牙断开触发push消息(依赖外部蓝牙)

适用于蓝牙保活业务类型。push消息可有可无。

manifest.json配置:APP常用其他设置—ios设置-后台运行能力,开启bluetooth-central,bluetooth-peripheral

采用监听蓝牙设备断连发送本地push消息,可有效提醒用户程序运行中,且不会中断程序
代码:

// 本地push消息,不能单纯使用push消息模式,
// 需要借助其他的ios后台运行能力,比如蓝牙监听连接状态
// 添加push可以有效的提醒用户打开APP,不使用则用户无感
const createPushMessage = () => {
  uni.createPushMessage({
    title: '小熊管家',
    content: '正在运行',
    payload: {
      path: '/pages/bluetoothTest/bluetoothTest'
    },
    cover: true
  });
};
// 监听广播蓝牙连接状态
const onBLEConnectionStateChange = (item: any) => {
  uni.onBLEConnectionStateChange((res) => {
      createPushMessage()
  });
};

可以使用蓝牙扫描,APP后台运行时开启蓝牙扫描,切换前台时关闭,如此可以不依赖蓝牙

三、H5+ 实时监听经纬度变化(最优)

manifest.json配置:APP常用其他设置—ios设置-后台运行能力,开启location
代码:

const getIOSLocation = () => {
  plus.geolocation.watchPosition(
    function (res) {
      console.log('监听位置变化信息:', res);
    },
    function (e) {
      console.log('监听位置变化信息失败:' + e.message);
    },
    { enableHighAccuracy: true, geocode: false }
  );
};
onShow(getIOSLocation);

android端/鸿蒙端相关

一般情况下,安卓/鸿蒙手机会给每一个安装的APP软件设置耗电限制,默认是智能模式,在触发某些条件下,我们的APP就会被杀掉,只要不触发,存在时间还是很长的,那么如何修改?

手机类型 设置
华为 设置-应用管理-耗电详情-启动管理-选择允许后台活动
小米/红米 设置-应用管理-省电策略-选择无限制
vivo 设置-电池-后台耗电管理-选择应用-选择允许后台高耗电
oppo 设置-电池-关闭智能耗电保护-自定义耗电保护-选择应用-选择允许后台运行

ios手机使用开发中使用【后台运行能力】开启APP后台运行

其他手机类型参考类似设置
一般路人APP可能就不会这么去设置了

ios【后台运行能力】

名称 说明
audio 后台运行音频,可触发ios后台运行不被杀进程
location 后台运行定位,可触发ios后台运行不被杀进程
voip 网络通话,需要创建VOIP推送证书
external-accessory 一些外设控制 APP, 比如一些控制 第三方 MFI 配件的应用,声明这种 类型,可以让APP 在后台不断的与 外设进行沟通
bluetooth-central iPhone 作为蓝牙中心设备使用,也就是做为 server;需要在后台不断更新蓝牙状态的
bluetooth-peripheral iPhone 作为蓝牙外围设备使用,也就是做 client,需要在后台不断的访问其他蓝牙设备获取数据的
fetch APP 需要在后台不断地 频繁有规律的从网络获取数据,大多数APP的后台刷新都是使用此模式来完成,是不是可以使用WebSocket来触发?
remote-notification 远程消息推送
processing 这是iOS13新增的一个模式,基于BackgroundTasks,优点在于不会检测cpu的占用率,也会启动应用的后台任务。
nearby-interaction iOS14苹果推出了NearbyInteraction 框架, 用于感知和连接具有U1芯片的设备。其主要目的是空间感知(近距离定位)。Nearby Interaction 主要提供了两种信息, 距离(Distance)和方位(Direction)。 当两个设备通过Nearby Interaction 互相连接时, 他们会不断发送距离和方位信息, 这样就能互相定位了。 并且同一个设备能够和周围的多个设备建立连接,互不干扰
network-authentication
newsstand-content 杂志应用,可以在后台下载杂志并处理
push-to-talk 对讲机

你可能感兴趣的:(uni-app)