【在 iOS 开发路上的大小事-Day29】浅谈 iOS 的 Background Modes

先前在研究如何让 App 在背景多存活久一点
有稍微去了解了一下 iOS 的 Background Mode 是如何运作的
下面就来分享一下 iOS 的 Background Mode

App 在系统的运作流程

Background Mode 有哪些

上面简单介绍了一个 App 在系统里面是如何运作的
下面要来介绍到底有哪些 Background Mode可以选择

  • Audio, AirPlay, and Picture in Picture
  • Location updates
  • Voice over IP
  • External accessory communication
  • Uses Bluetooth LE accessories
  • Acts as a Bluetooth LE accessory
  • Background fetch
  • Remote notifications
  • Background processing

Audio, AirPlay, and Picture in Picture

Audio:顾名思义就是声音、音乐播放,或是麦克风使用,当 App 从前景退到背景时,只要有开启这个选项,就可以常驻在背景播放,不会被系统关闭

AirPlay:像是将 iOS/iPadOS/macOS 的画面投影到其他装置上的功能,就是属於这个

Picture in Picture:这功能是子母画面,也有人称作画中画,他是让你可以在使用 A 应用,同时也可以让 B 应用在背景透过一个小视窗在画面上播放着影片,像是最近 YouTube Premium 会员可以测试的子母画面就是属於这个的应用。一开始这功能是 for iPad 使用的,不过从 iOS 14 开始,也可以在 iOS 上使用了

Location updates

Location updates:顾名思义就是位置更新,当开启这个选项後, App 进到背景後也会持续透过抓取定位来更新当前所在位置,像是 Google Maps、Apple Maps 在导航时,无论是在前景或是背景都可以根据你当前所在处进行判断该如何导航

Voice over IP

Voice over IP:这功能是类似透过网路来打电话,像是常见的 Line、Skype 等都属此类应用,原理大致上是这样的,系统一样还是会将此应用在进到背景的时候强制停止,但在停止的时候,会由系统来接手管理 Socket,当有资料的时候,系统会将此应用再次启动,并且将先前系统接管的 Socket 再交回给应用,整个流程大致如下 (有错还请告知,感谢!)

External accessory communication

External accessory communication:这个选项是提供给一些 MFI 装置透过蓝牙、Lightning 等方式与 iOS 设备连接,进而可以在 MFI 装置对系统发送通知时,将已经被系统强制停止的应用启动

Uses Bluetooth LE accessories

Uses Bluetooth LE accessories:这个选项跟 External accessory communication 类似,只是不需要是 MFI 装置,而是需要 Bluetooth LE 设备

Acts as a Bluetooth LE accessory

Acts as a Bluetooth LE accessory:这个选项是当有一个蓝牙装置与 iOS/iPadOS 装置连接时,对应的应用可以背景执行,但是使用此模式需要使用者进行授权认证

Background fetch

Background fetch:适用於即使在背景,也需要频繁更新资料的 App,过程最多只能执行 30 秒

Remote notifications

Remote notifications:这个是远端推播,与本地推播不同,这是需要付费开发者才能使用的,当系统收到服务器的推播後,系统会去通知 App 并将 App 唤醒来接收推播

Background processing

Background processing:这个是在 Xcode 11 新增的一种 Background Mode,主要是用来在背景处理一些事情的,但资料感觉有点少,下面是引述 Apple Developer 的说明

Use the BackgroundTasks framework to keep your app content up to date and run tasks requiring minutes to complete while your app is in the background. Longer tasks can optionally require a powered device and network connectivity.

Register launch handlers for tasks when the app launches and schedule them as required. The system will launch your app in the background and execute the tasks.

总结

上面简单介绍了各种 Background Mode,希望可以找到适合你的模式
但如果你想要的模式没有在上面,却又想要挂羊皮卖狗肉的话,那就要小心了
因为有极高机率会在上架的时候,被 Apple 挡下来,毕竟现在 Apple 越来越重视使用者隐私了~

参考资料

  1. ios background modes (简书)
  2. What is the Xcode "Background Processing" Background Mode? (stack overflow)
  3. Background Tasks (Apple Developer Documentation)
  4. Swift小记:iOS後台保活方法 (简书)

<<:  Day-27 删除title bar

>>:  [Day27] Flutter with GetX connectivity

Day23 韩式安东炖鸡

在韩国吃到安东炖鸡的时候,就觉得味道很亲切熟悉,不像其他韩国料理辣到喷火,且材料很单纯,咖哩吃腻了...

30天学会Python: Day 23-交换数值

要交换两个变数的值,在 Python 有几种写法 可以先另外建立一个变数,再互相指派,假设输入的数值...

Day16 JavaScript基本教学(一)

JavaScript 语言 (JavaScript Programming Language) Ja...

前端工程师也能开发全端网页:挑战 30 天用 React 加上 Firebase 打造社群网站|Day1 系列影片介绍

2021/10/23 更新:新增范例网站以及程序码连结 (影片教学组的头香我抢走罗XD) 大家好!我...

Day 7 - Using Global.asax File for Short URL Routing with ASP.NET Web Forms C# 使用全域应用程序类别产生短网址路由功能

=x= 🌵 网址显示方式管理。 短网址功能介绍 : 📌 如果仔细观察网址,可以发现平常浏览的网页并不...