移动开发中的App扩展和系统集成:它们是什么、类型以及如何工作

作者: IT Sectr 发布日期: 2026-06-22 阅读时间: 11 分钟

App扩展是独立的可执行模块,将移动应用的功能扩展到其主界面之外:主屏幕上的Today Widget、通过CallKit处理VoIP电话以及通过BroadcastReceiver响应系统事件。系统集成允许应用在深层级上与操作系统交互,解锁普通屏幕无法使用的功能。根据苹果开发者文档,每个扩展在隔离进程中运行,并由系统独立于主应用进行管理。移动应用中的App扩展允许实现主进程中不可用的功能。

要点

  • App扩展 — 应用内的独立二进制文件,将其功能扩展到主进程之外
  • CallKit — 将VoIP电话集成到iPhone系统电话接口的框架
  • BroadcastReceiver — 响应系统广播消息的Android组件
  • AppWidgetProvider — 在Android上创建小部件的基类,支持RemoteViews
  • Content Provider — 通过ContentResolver在应用间共享数据的Android组件

iOS上的App扩展:小部件和内容共享扩展

iOS上的App扩展出现在iOS 8中,成为移动开发中系统集成的基础。这些是独立二进制文件,与主应用打包在一起,但在隔离进程中启动。每个扩展都有自己的Info.plist和通过NSExtensionPrincipalClass定义的入口点。系统管理App扩展的生命周期 — 它们在完成任务后不能停留在后台。

WidgetKit和Today Widget

WidgetKit(iOS 14+)是在主屏幕创建小部件的现代框架。WidgetKit使用SwiftUI描述界面,使用TimelineProvider定义更新计划。小部件有三种尺寸:小(2×2单元格)、中(4×2)和大(4×4)。基于UICollectionViewController的旧版Today Widget仍然受支持,但Apple建议迁移到WidgetKit。WidgetKit上的App扩展不支持动画、键盘输入或手势 — 它们是静态或伪动画元素,定期更新。

Share Extension和Action Extension

Share Extension允许通过系统共享表单从任何应用向您的应用发送内容。Share Extension通过NSExtensionItem接收数据,并使用SLComposeServiceViewController作为UI。Action Extension在原地处理内容 — 例如,在浏览器中翻译文本,无需切换到其他应用。这两种类型都必须在有限时间内完成工作,否则系统会"杀死"扩展。这是移动应用中App扩展的重要限制 — 后台任务在扩展级别不可用。

CallKit、PushKit和SiriKit — 语音和通知的系统集成

iOS上的系统集成远不止小部件:CallKit、PushKit和SiriKit允许移动应用在系统级别工作。这些框架需要特殊权限,但为用户提供无缝体验 — 通过CallKit的通话看起来像普通电话通话,Siri无需打开应用即可处理请求。

CallKit — 系统界面中的VoIP电话

CallKit将第三方应用的通话集成到系统通话屏幕中,包括锁定屏幕。CXProvider将应用注册为VoIP服务,CXCallController管理通话。CallKit自动阻止重复通话,并支持Call Directory Extension以阻止不需要的号码。CallKit在移动开发中的系统集成对于语音通信应用至关重要 — WhatsApp、Skype和Zoom使用它来显示来电。

PushKit — 后台推送通知

PushKit将推送通知直接传递到移动应用,而不向用户显示。PushKit唤醒"已杀死"状态的应用,并通过委托PKPushRegistryDelegate传递数据。这是VoIP应用的主要机制:PushKit传递通话信息,CallKit显示它。PushKit具有比常规推送通知更高的传递优先级,并且不需要显示横幅。移动应用中的App扩展经常将PushKit与CallKit结合用于语音通信。

SiriKit和Intents Extension

SiriKit允许通过Siri和快捷指令应用处理请求。Intents Extension是一个独立的App扩展,注册支持的意图并处理它们。SiriKit支持20多个领域:通话、消息、支付、笔记、锻炼。快捷指令允许用户创建自动化 — 例如,"通过Siri在WhatsApp中发送消息。"与SiriKit和快捷指令的系统集成提高了参与度,因为用户无需打开应用即可执行操作。

Android上的BroadcastReceiver和系统服务

BroadcastReceiver是响应系统广播消息的Android组件。与iOS App扩展不同,BroadcastReceiver不需要单独的二进制文件 — 只需在清单中或通过Context.registerReceiver在代码中注册接收器即可。Android上的系统集成通常从BroadcastReceiver开始:从设备启动时启动服务到响应网络连接。

系统事件的IntentFilter

IntentFilter将BroadcastReceiver绑定到特定系统事件。典型事件:BOOT_COMPLETED(设备启动)、CONNECTIVITY_ACTION(网络变化)、BATTERY_LOW(电量低)、TIME_SET(时间变化)。接收器在AndroidManifest.xml中注册,或通过Context.registerReceiver进行动态注册。动态注册更可取 — 不需要清单权限,仅在应用活动时工作。App扩展在Android上不作为概念存在,但BroadcastReceiver扮演类似角色 — 通过系统集成扩展应用功能。

NotificationListenerService和AccessibilityService

NotificationListenerService是接收所有系统通知的服务。NotificationListenerService需要BIND_NOTIFICATION_LISTENER_SERVICE权限和通过辅助功能设置的访问权限。AccessibilityService是更强大的系统集成工具:它可以读取屏幕内容、模拟点击和自动化操作。这两个服务都需要用户在设置中明确启用,这提高了安全性。通过AccessibilityService的移动应用系统集成用于自动填充器、屏幕阅读器和辅助功能工具。

kotlin
class BootReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
            WorkManager.getInstance(context)
                .enqueueUniqueWork("post-boot", ...)
        }
    }
}

该示例为BOOT_COMPLETED事件注册了BroadcastReceiver。WorkManager用于在设备启动后延迟执行任务 — 这是Android应用的标准方法。

App Widget Provider — 在Android上创建小部件

Android上的App Widget Provider是小部件上下文中iOS App扩展的对应物:它是一个在主屏幕上显示交互内容的组件。与WidgetKit不同,Android小部件可以接受用户输入 — 点击、开关和手势。App Widget Provider通过大小和更新频率的XML描述在清单中注册。

RemoteViews和AppWidgetProvider

RemoteViews通过XML布局描述小部件界面,仅支持有限的View集合。RemoteViews不允许自定义View — 仅标准组件:TextView、ImageView、Button、ProgressBar。AppWidgetProvider是处理小部件更新、启用和删除的基类。onUpdate方法通过updatePeriodMillis的定时器或通过WorkManager(用于精确控制)调用。Android上与小部件的系统集成需要谨慎 — 过于频繁的更新会消耗电池。

Glance API(Jetpack)— 现代方法

Glance API是使用Kotlin DSL代替XML创建小部件的Jetpack库。Glance API编译为RemoteViews,并支持类似Compose的语法:GlanceComposable、Column、Row、Text。该库解决了复杂XML代码的问题,并允许通过JUnit测试小部件。Glance API尚未支持所有RemoteViews功能 — 对于复杂的交互式小部件,经典方法更好。Android移动开发中的App扩展正在向Glance API发展,简化了小部件的创建和维护。

Content Provider、FileProvider和应用间数据共享

Content Provider是通过统一ContentResolver接口在应用间共享结构化数据的Android组件。与iOS App扩展不同,Content Provider不创建单独的进程 — 数据在调用应用的上下文中同步请求。Content Provider是Android系统集成的基础:联系人、媒体文件、日历和标准应用使用它来发布数据。

用于安全文件共享的FileProvider

FileProvider是ContentProvider的子类,用于应用间的安全文件传输。FileProvider生成临时的content:// URI,而不是直接的file://路径,后者在Android 7+上被禁止。使用时,需要在XML配置中指定files-path或external-files-path。Android移动开发中的App扩展不作为独立概念存在,但FileProvider执行它们的功能 — 将数据共享能力扩展到单个应用之外。

iOS对应:File Provider Extension

在iOS上,文件共享的角色由File Provider Extension执行。File Provider Extension通过NSFileProviderManager将应用的文件发布到文件应用中。与FileProvider不同,iOS扩展需要单独的二进制文件,并在隔离进程中运行。File Provider Extension支持用于文件描述的NSFileProviderItem和用于文件夹导航的NSFileProviderEnumerator。通过File Provider Extension的移动应用系统集成允许用户从文件应用管理应用文件,而无需打开应用。

swift
class MyFileProviderExtension: NSFileProviderExtension {
    override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
        return MyFileProviderItem(identifier: identifier)
    }
}

该示例展示了Swift中File Provider Extension的最小实现。item(for:)方法根据标识符返回NSFileProviderItem对象 — 系统在文件应用中显示文件时调用它。

常见问题

iOS上的App扩展是什么?

App扩展是独立的二进制文件,将应用的功能扩展到其进程之外:Today Widget、Share Extension、Action Extension、Keyboard Extension以及在隔离环境中运行的其他类型。

CallKit和PushKit有何不同?

CallKit将VoIP电话集成到系统电话接口中,并在锁定屏幕上显示。PushKit在后台传递推送通知而不显示给用户 — 它唤醒应用以处理数据,如来电信息。

Android上的BroadcastReceiver是什么?

BroadcastReceiver是响应系统广播消息的Android组件:设备启动(BOOT_COMPLETED)、网络连接(CONNECTIVITY_ACTION)、飞行模式更改和其他操作系统事件。

如何在Android上创建小部件?

使用AppWidgetProvider和RemoteViews创建小部件界面,或使用Glance API(Jetpack)实现Kotlin DSL方法。小部件通过指定大小和更新频率的XML描述在清单中注册。

Content Provider用于什么?

Content Provider是通过ContentResolver在应用间共享数据的Android组件。用于访问联系人、媒体文件和来自其他应用的任何结构化数据。

总结

  • App扩展 — iOS上系统集成的基础:隔离进程中的小部件、共享、内容处理和键盘扩展
  • CallKit和PushKit — VoIP电话的框架对:PushKit传递数据,CallKit显示通话界面
  • BroadcastReceiver — Android上App扩展的对应物,用于响应系统事件而无需单独的二进制文件
  • AppWidgetProvider — Android上小部件的组件,支持RemoteViews和Glance API
  • Content Provider和FileProvider — 通过ContentResolver在Android上进行应用间数据共享的机制
  • File Provider Extension — FileProvider的iOS对应物,用于从隔离进程在文件应用中发布文件
  • 系统集成在移动开发中将App扩展、BroadcastReceiver、CallKit和Content Provider统一到一个生态系统中

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目