App Clip — 轻量版 iOS 应用,无需在设备上安装即可立即启动。该技术在 iOS 14 中引入,允许用户通过扫描 NFC 标签、QR 码或 App Clip Code 访问应用的特定功能。App Clip 的大小不超过 10 MB,启动时间不到两秒。这是 Apple 为与原生应用即时交互而提供的解决方案,无需完整安装。
关键要点
App Clip — Apple 为 iOS 开发的技术,允许运行完整应用的一小部分而无需安装。当用户扫描 NFC 标签、QR 码或 App Clip Code 时,操作系统会下载并以卡片形式在当前屏幕上打开 App Clip。Apple 为“支付、订购或注册”场景设计了 App Clip — 这些操作需要无摩擦、无等待地完成。
App Clip 以临时模式工作。iOS 会在有限时间内存储 App Clip 数据(通常几天或直到用户明确删除)。如果用户再次需要同一功能,App Clip 会重新下载。Apple 有意限制 App Clip 的存储,以鼓励安装完整应用以永久使用。在 App Clip 中创建的数据会在安装完整应用时通过 CloudKit 自动传输到完整应用中。
实际示例:扫描餐厅桌上的 NFC 标签进行点餐和支付(Panera, Pizza Hut),租用滑板车上的 QR 码解锁(Lime, Bird),停车计时器上的 App Clip Code 支付(PayByPhone),扫描商店中的商品购买(Shopify)。所有这些场景有一个共同点——交易类任务因没有安装步骤而受益。
App Clip 通过五种机制激活。最常见的是——NFC 标签(触碰启动 App Clip)、QR 码(用相机扫描在屏幕底部显示 App Clip 卡片)和 App Clip Codes(Apple 自有的带图案边框和内置 NFC 标签的视觉代码)。App Clip 也可以通过 Safari App Banner 和 iMessage 链接启动。
App Clip Code — Apple 的专利技术。与 QR 码不同,App Clip Code 外观美观——支持品牌颜色和居中徽标,URL 编码在边缘的声波中。该代码包含内置 NFC 标签,提供双重启动机制:视觉扫描和触碰。Apple 通过 App Store Connect 门户提供 App Clip Code 生成工具。
// SceneDelegate.swift — 通过 NSUserActivity 处理 App Clip 启动
import UIKit
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene,
willContinueUserActivityWithType userActivityType: String) {
// 准备接收传入的 NSUserActivity
}
func scene(_ scene: UIScene,
continue userActivity: NSUserActivity) {
guard let invocationURL = userActivity.webpageURL else { return }
// 解析 URL 并导航到相应屏幕
handleInvocationURL(invocationURL)
}
private func handleInvocationURL(_ url: URL) {
// 示例:/order/restaurantID — 订单屏幕
// 示例:/pay/parkingID — 支付屏幕
}
}所有触发器最终都会创建一个带有 webpageURL 参数的 NSUserActivity,其中包含调用上下文。App Clip 解析此 URL 并显示相应的屏幕。App Clip 还支持地理位置触发器——当用户在特定位置附近(例如,在有 App Clip 的咖啡馆附近)时,iOS 可以建议 App Clip。
开发 App Clip 从现有的完整应用 Xcode 项目开始。您添加一个新的 App Clip target——它使用相同的项目、相同的团队和大部分共享代码。App Clip target 仅包含特定功能所需的文件、故事板和资源。Apple 提供预配置了授权和 Info.plist 键的 App Clip 模板。
// AppClip/ProductViewModel.swift — App Clip 和完整应用之间的共享逻辑
import Foundation
import StoreKit
class ProductViewModel: ObservableObject {
@Published var items: [Product] = []
@Published var total: Decimal = 0
func checkout() {
// 通过 API 发送订单
}
func showInstallPrompt() {
// 显示 SKOverlay 用于安装完整应用
guard let scene = UIApplication.shared()
.connectedScenes
.first(where: { $0 is UIWindowScene }) as? UIWindowScene else { return }
let overlay = SKOverlay(configuration: SKOverlay.AppClipConfiguration(
position: .bottom
))
overlay.present(in: scene)
}
}
// AppClip/MainViewController.swift — App Clip 主屏幕
class MainViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 为 App Clip 卡片设计的紧凑 UI
// 使用 SF Symbols 减小大小
// 仅加载当前交易的数据
}
@IBAction func openFullApp(_ sender: Any) {
// 在 App Store 中打开应用页面
guard let url = URL(string: "https://apps.apple.com/app/id123456789") else { return }
UIApplication.shared.open(url)
}
}App Clip target 使用与主应用相同的 Apple Developer Team ID 和 Bundle ID(带有 .Clip 后缀)。关键授权:com.apple.developer.app-clip 和处理 URL 的关联域。App Clip 支持 Apple Pay、Sign in with Apple、StoreKit 用于购买和 Core Location。某些框架不可用:后台模式、HealthKit、Media Library 和某些传感器 API。
App Clip 的大小限制由 Apple 严格控制——压缩后不超过 10 MB。检查在上传到 App Store 阶段进行;超出限制的构建将被拒绝。大小包括二进制代码、资源(故事板、资源目录)和相关框架。Swift 运行时库属于 iOS 的一部分,不计算在内,但第三方框架会增加大小。
| 优化方法 | 效果 | 备注 |
|---|---|---|
| 资源目录精简 | 30–60% | 单一图像比例 (3x),排除未使用的设备类型 |
| SF Symbols | 显著 | 系统图标免费——不要包含自定义图标 |
| 用 SwiftUI 替代 UIKit | 20–30% | SwiftUI 需要更少的相关框架 |
| 最少依赖 | 可变 | 仅包含 App Clip 功能所需的框架 |
| 按需资源 | 可变 | 启动后加载非关键数据(图像) |
| 代码剥离 | 10–40% | Swift 中的死代码剥离和全模块优化 |
Xcode 在归档后在 Organizer 中提供 App Clip 大小报告。报告按组成部分(代码、资源、框架)拆分大小,并显示估计的下载大小。Apple 建议将 App Clip 保持在 8 MB 以内,以考虑不同交付渠道的压缩差异。
App Clip 使用场景分为四个阶段。发现:用户在物理世界中遇到 NFC 标签、QR 码或 App Clip Code。启动:扫描或触碰下载 App Clip(不到 2 秒,通常 1 秒)。交互:App Clip 以卡片形式打开,具有单一功能——订单、支付或预订屏幕。完成:用户完成任务并看到通过 SKOverlay 或 App Store 链接安装完整应用的提议。
Apple 特别关注 App Clip 中的隐私。系统分别为 App Clip 请求相机、地理定位和通知权限。在 App Clip 中创建的数据(支付信息、偏好)本地存储,并在安装时通过 CloudKit 传输到完整应用。App Clip 不能请求敏感权限(Health、Motion、Media Library)——这需要安装完整应用。
重要功能——SKOverlay,一个原生 iOS 元素,显示在 App Clip 屏幕底部并提议安装完整应用。SKOverlay 不需要导航到 App Store,并在当前应用的上下文中工作。用户可以通过一次点击安装完整应用,App Clip 在安装后自动传输所有创建的数据。
| 特性 | App Clip (iOS) | Instant App (Android) |
|---|---|---|
| 大小限制 | 10 MB 压缩 | 10 MB 总计 |
| 启动方式 | NFC、QR、App Clip Code、Safari、iMessage、地理位置 | 深层链接、Google Play「试用」、NFC、QR |
| 开发 | Xcode + Swift(一个 target) | Android Studio + Kotlin(功能模块) |
| 支持 | iOS 14+(iPhone、iPod touch) | Android 5.0+(API 21+) |
| 数据存储 | 临时,传输到完整应用 | 临时(cookie API),传输 |
| 变现 | Apple Pay、StoreKit | Google Pay、Google Play Billing |
| 视觉触发器 | App Clip Code(自有格式) | 标准 QR 码 |
两种技术——App Clip 和 Android Instant App——解决相同的任务:无需安装即时启动原生应用,但使用不同的平台方法。App Clip 更受限(仅 iOS,生态系统较小),但提供与 Apple Pay 和 Apple 设备生态系统的深度集成。Instant Apps 凭借更广泛的 Android 覆盖范围和灵活的触发器(包括无需额外基础设施的标准 QR 码)而胜出。
常见问题
App Clips 需要 iOS 14 或更高版本,可在 iPhone 6s 及更新机型、iPod touch(第 7 代)以及所有配备 A9 或更新芯片的 iPad 上运行。App Clip Code 扫描通过内置相机应用实现。通过 NFC 标签启动需要 iPhone XR/XS 或更新机型(iPhone 7/8 可以读取 NFC 但无法启动 App Clip)。
不可以,App Clip 必须与 App Store 中的完整 iOS 应用关联。App Clip 不能独立发布。完整应用和 App Clip 使用相同的 Apple Developer Team ID 和 Bundle ID(带有 .Clip 后缀)。Apple 将 App Clip 定位为完整应用的入口点,而非独立的分发机制。
App Clip 的最大大小为压缩后 10 MB。Apple 在上传到 App Store 时严格检查此限制。建议将大小保持在 8 MB 以内以考虑压缩差异。使用 SF Symbols、SwiftUI 并最小化第三方依赖以遵守限制。
不可以,App Clips 不能发送推送通知。Apple 有意阻止了此功能以防止垃圾信息。本地通知在 App Clip 的短暂生命周期内是允许的。对于通知,用户必须安装完整应用。这是与 PWA 和完整原生应用的关键区别。
iOS 在有限时间内存储 App Clip 数据(通常 7-30 天不活跃)。如果用户安装完整应用,数据会通过 CloudKit 自动传输。如果未进行安装,iOS 会删除 App Clip 及其数据。用户也可以通过「设置」中「App Clips」部分手动删除 App Clip。
对于简单场景(点餐 + 支付),为现有 iOS 应用添加 App Clip 通常需要一名开发人员 2-4 周。App Clip 使用主应用的大部分代码库,因此成本远低于从头创建单独的应用。主要时间花在大小优化和触发器配置上。
App Clip 支持 Apple Pay、Sign in with Apple、StoreKit、Core Location、MapKit 和 PushKit(仅限 VoIP)。不可用的包括 HealthKit、ResearchKit、HomeKit、CarPlay、Metal(完全)、后台模式(后台获取、位置更新)和 Media Library。App Clip 还不能访问麦克风和某些设备传感器。
简要总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。