Apple iOS 14 轻 App 开发者手册

iOS 14 发布后最新版

随着 iOS 14 发布,Apple 推出轻 App (英文名为 App Clip)。AppsFlyer 将轻 App 视作应用发展的新阶段,尤其面向用户不常使用的 App。我们编写了一份详尽的开发者手册,助您开发第一款轻 App。

为什么要开发轻 App?

假设您走进一家咖啡馆,看到前面排着长队,而收银台旁边的指示牌上写着“下载 App 点咖啡,无需排队”的字样。 

您会怎么想?

如果是我,我会觉得下载一个应用太占内存了,为了节省几分钟排队时间,我下载应用之后还得注册填写个人信息,还是算了…

 

不用排队 也不用提供个人信息

Apple 推出的轻 App 将改变大家对应用的看法,甚至还将改变我们使用智能手机与当下环境互动的方式。有了 iOS 14 轻 App,用户可用手机当即参与当前活动,无需提供隐私信息或允许应用获取用户定位。

在上述咖啡馆场景中,扫描轻 App 二维码,用户通过 Apple 登录,使用 Apple Pay 支付,几秒钟即可完成购买、无需排队。

应用开发者需要了解轻 App 的概念,基于完整 App 重构代码,开发轻 App。

———————–

*重要提示

这份开发者手册基于轻 App 的实际发展动态写成,详尽梳理了 2020 WWDC 开发者大会所有关于轻 App 的文档、视频、iOS 14 发布通告以及发布后测试等。您还可查阅这篇技术文档,进一步了解轻 App 与完整 App 的相关配置。

———————–

轻 App 开发者使用目录(点击标题即跳转到该章节)

轻 App 调用流程总览

本节讲述轻 App 的产品生命周期:从用户以各种方式与轻 App 交互开始,直到用户切换到完整 App
Apple App Clips Invocation Flow

调用(英文为 Invocation)指的是轻 App 被调用,用户打开轻 App。 

调用是轻 App 的一个重要概念,下文还会详述。

假设用户点击近场通信(NFC)标签——这是调用轻 App 的一种方式。

接着:

    1. iOS 系统探测到 NFC 标签,调起轻 App,读取“调用 URL”。
      这个“调用 URL”定义了此次轻 App 被调起的相关功能,将用户轻点 NFC 标签所需的所有服务发送给轻 App。如果用户已经安装了这个应用,完整应用被打开,“调用 URL”将遵循 iOS 通用链接流程进行传输。
      开发者需特别注意:
      如果用户在轻 App 预览卡片或顶部横幅选择下载完整 App,调用 URL 将不会传输给完整 App。在上述场景中,用户需扫描二维码或轻点 NFC 标签再次触发调用流程,调用 URL 才会通过 NSUserActivity 进行传输。
      开发者可将轻 App 调用 URL 同步到完整 App(查看轻 App 与关联完整 App 如何数据共享)。

      示例如下:
      a. 如调用 URL 为“https://megacoffee.com/buy/paris/table/6”:轻 App 在该咖啡馆巴黎分店的餐牌上被调起,且已将“第六桌”加入了偏好设置。用户通过 Apple 登录,使用 Apple Pay 支付,当即下单。这项流程需要轻 App 验证定位,点这里继续了解。
      b. 如调用 URL 为“https://scooter.me/rent?scooter_id=3456”:轻 App 在该电动车品牌的租借价目表上被调起,且已将“电动车 ID”加入了偏好设置。轻 App 可据此信息通知用户租期届满。这项流程需要轻 App 发送通知,点这里继续了解。
    2. iOS 系统读取调用 URL 域名中的 AASA(Apple-App-Site-Association)文件,来验证调用 URL 是否真实有效。点这里继续了解。
    3. 调用 URL 一经验证,iOS 系统为用户打开轻 App 预览卡片(英文为 App Clip Card)
      一款应用程序只能开发一个关联轻 App,但可创建多个轻 App 预览卡片。 App Clip Card iOS14
      不同的轻 App 预览卡片关联不同的轻 App 应用体验。
      这里继续了解轻 App 应用体验。iOS 系统为用户展示与调用 URL 所定义参数最接近的轻 App 预览卡片。系统打开轻 App 预览卡片,此处无需添加代码或开发层面的操作。
      轻 App 预览卡片的作用:

      1. 为用户提供轻 App 的大致介绍与功能说明,与下载完整 App 的应用商店页类似。例如,为咖啡馆的照片添加一些文字描述。
      2. 开发者请求授权,用户可选择不允许。请注意,iOS 14 轻 App 隐私保护政策更严格,授权范围极小,用户能够放心使用轻 App。
      3. 为用户提供行为召唤(CTA) 按钮,实现用户所需的租借、购买、分享、办理、打卡等功能需求。
      4. 为用户展示顶部小型横幅,可跳转至应用商店下载完整 App。
    4. 如果点击了预览卡片上的行为召唤(CTA)按钮,iOS 系统即从 App Store 下载轻 App。这个过程耗时极短,因为轻 App 不可超过 10MB。这个安装包大小对于轻 App 已经足够:近期提交至 App Store 的完整 App 平均大小为 38MB。
    5. 调用 URL 通过 NSUserActivity 传输给轻 App。开发者可使用调用 URL 创建一条深度链接,直接跳转至 URL 定义的特定功能。开发者可读取 URL 参数,如下所示,开发者能够读取分店名称和桌号:
      https://megacoffee.com/buy/paris/table/
      [Get the Guide] Everything Developers Need to Know About Deep Linking
    6. 轻 App 下载过程中用户会收到一条横幅,点击即可跳转到 App Store 下载完整 App。开发者可通过 SKOverlay 再次展示横幅。点这里继续了解。
      App Clip Banner SKOverlay iOS14

<回到顶部>

 

轻 App 调用

本节展开讲述如何调用轻 App ,如何展示不同的轻 App 预览卡片,以及轻 App 以何种方式接收到哪些数据。

 

调用流程

轻 App 一经调用即启用。正如 iOS 通用链接流程,调用流程不是一次点击那么简单。调用流程由 Apple 搭建,因此目前只能基于 Apple 的基建工具打造。如何获取轻 App URL 尚不明确,有了轻 App URL,您可发送短信或展示二维码。待 Apple 此方面流程完全公布后,我们会立即更新这份手册。

 

调用方式

App Clip Banner Safari Invocation   Safari 浏览器横幅

  • 为网站顶部添加元数据,创建 Safari 浏览器 Smart App Banner 智能横幅。
    • 示例:下图为您需要添加的代码片段:
<meta name="apple-itunes-app" content="app-clip-bundle-id=com.coffeeshop.retailapp.Clip, app-id=12345ABCD">

如设备系统为 iOS 13 或更早版本,需添加 app-id在这种场景下点击横幅后,用户进入应用商店下载完整 App。

  • 此次点击横幅的 URL 即为调用 URL。

Apple App Clip Banner Invocation iOS14

App Clip iMessage Invocation iOS14   iMessages 

  • 用户分享网址时展示了智能横幅,该信息中的横幅将调起轻 App。
  • 这个场景中,分享网址的 URL 中配置了调用 URL。

App Clip SMS Invocation URL

App Clip NFC tag Invocation iOS 14   近场通信(NFC)标签 

  • 轻点 NFC 标签,如该标签与轻 App 关联,即调起轻 App。
  • 该 NFC 标签中配置了调用 URL。
  • 使用任一种基建工具即可创建 NFC 标签,只要能被 Apple 设备读取。
  • 手机锁屏状态下可用。

Apple App Clip QR Code invocation   二维码

  • 扫描二维码即可调起被编码了调用 URL 的轻 App。
  • 必须使用相机应用或 Apple 原生条形码读取器扫描轻 App 二维码。
  • Apple 计划发布中间含有 NFC 标签、四周为可扫描的环形码。Apple 希望 iOS 用户能够熟悉这项操作,通过轻点或扫描即可跳转到轻 App。

Apple app clips geo location   地理位置

  • Siri 基于地理位置提供推荐。Apple 还未完全公布,创建流程待更新。

Apple App Clips Maps Invocation   地图 

  • 地图中的标签也可以调起轻 App。这里详细讲述了如何验证轻 App 的调用 URL。

每个轻 App 调用流程都有调用 URL 参与,通常以“https://mygreatapp.com/”起始,scheme 为“https”,主机或域名为“mygreatapp.com”。

iOS 必须验证调用 URL,来确认轻 App 确实为该域名所发布。如果不是该域名发布的轻 App,用户很有可能暴露于作弊或其他恶意行为。 

Scheme 是“https”,而不是“http”,调用 URL 将通过 SSL 证书进行验证,确保轻 App 开发者是域名所有者。

iOS 系统通过 AASA(Apple-App-Site-Association)文件验证域名。这个文件通常用来验证某个域名的通用链接。 

要验证 iOS 14 轻 App,您必须在 AASA 文件中添加以下代码:

{
    "appclips": {
        "apps": ["ABCED12345.com.fruitstore.feedmeapp.Clip"]
    }
    ...
}

*关于 AASA 文件的重要提示:

2020 WWDC 开发者大会上 Apple 宣布将改善设备获取 AASA 文件的机制。设备不再直接从 AASA 文件中读取某应用的域名,新的机制是 Apple 获取 AASA 文件并记录在 CDN,设备访问 Apple CDN 存储的 AASA 汇总文件,便于读取与操作。 

轻 App 意味 AASA 文件数量增加,因此 Apple 改善机制将提升效率。

App Clips AASA File Fetching

Apple App Clips Domain Cache Status

(图片来源于 App Store Connect)

 

您可在 App Store Connect,Domain URL Status 页面,找到某个特定轻 App 的调用 URL 的缓存状态:

缓存状态(Cache Status)表明了轻 App 在用户设备上的调用情况。点击“故障排查状态”(Debug Status),即允许 Apple 访问您的 AASA 文件并验证 URL。

<回到顶部>

 

轻 App 体验 

关于轻 App 最重要的环节之一是体验。

轻 App 体验,即提供给用户购买、租借、办理入住等行动的瞬时选项。应用体验不同,展示的轻 App 预览卡片也不同。如果您展示了某个特定的轻 App 预览卡片,您需要配置与之相关的轻 App 体验。

因此,如何将轻 App 调用流程与轻 App 体验进行匹配,以及如何展示特定的轻 App 预览卡片?

我们已经了解每次轻 App 调用都承载着一个调用 URL。iOS 系统将调用 URL 与您点击进入轻 App 体验的 URL 进行关联,向用户展示 URL 前缀匹配的轻 App 体验。

比如,为轻 App 体验创建一个这样的 URL:“https://myrental.com/rent”,能够涵盖“https://myrental.com/rent/car”、“https://myrental.com/rent/suv”等 URL。

因此对于有多种业务的应用来说,建议您创建多个轻 App 体验,针对不同体验展示特定的轻 App 预览卡片以及调用 URL。

例如,您可创建面向以色列的 URL“https://myrental.com/rent/car/il”,或创建面向日本的 URL:“https://myrental.com/rent/car/jp”等等。

轻 App 默认体验

登录 App Store Connect 在“new app version”页面,您配置轻 App 默认体验,为轻 App 预览卡片提供以下元数据:

  • 一张封面图
  • 介绍轻 App 的文字描述
  • 行为召唤(CTA)按钮,用户轻点后即可启动轻 App。

Default App Clip Configuration Metadata

轻 App 默认体验的主要使用场景是浏览器横幅以及用户通过 iMessages 分享网址,这是轻 App 高级体验未经配置的情况。

配置轻 App 默认体验无需调用 URL。

系统验证轻 App 时,即使没有调用 URL 也会出现默认体验(详见下节)。注意,这适用于浏览器横幅以及用户通过 iMessages 分享网址。

 

轻 App 高级体验

配置轻 App 高级体验有如下好处:

  • 全面支持各种调用方式,包括 NFC 标签和二维码
  • 可将轻 App 与地理位置进行关联
  • 可将调用 URL 与轻 App 进行关联

如前所述,多个轻 App 预览卡片可适用于不同的业务逻辑。不同的轻 App 体验调起不同的预览卡片,在 App Store 创建轻 App 体验时可自行定义。

App Clip Experience Customization

(图片来源于 App Store Connect)

App Clip Experience URL specification

(图片来源于 App Store Connect)

App Clip Experience iOS14

(图片来源于 App Store Connect)

<回到顶部>

 

开发轻 App

为尝试开发一款轻 App,我们创建了一个简单的样本应用程序,来示范如何配置轻 App 以及如何与完整 App 关联。 

样本 App 用于展示轻 App 以下操作:

  • 创建轻 App
  • 为 iOS 14 轻 App 及完整 App 里的通用链接创建 Associated Domains Entitlements
  • 完整 App 与轻 App 之间资源共享
  • 通过 NSUserActivity 读取适用于完整 App 与轻 App 的调用 URL
  • 推送通知(Notifications)
  • 通过 App Group 将数据从轻 App 传输到完整 App
  • 验证地理位置 
  • 通过 SKOverlay 从轻 App 跳转到完整 App 

<回到顶部>

 

轻 App 限制条件

Apple 对轻 App 施加了诸多限制条件,在最大限度保护用户隐私的前提下,为用户提供瞬时可用的功能。这些限制主要表现为隐私保护弹窗,用户因此对 App 的隐私标准更加放心。

  • 轻 App 大小不得超过 10MB.
  • 轻 App 不会缓存在后台,这一点更偏向于功能而不是局限
  • 轻 App 不支持 CallKit、CareKitCloudKitHealthKitHomeKitResearchKitSensorKit 和 Speech 框架。编译时不会报错,但是 API 接收回调时会显示运行时无效、数据为空或错误代码等问题。
  • 限制广告跟踪(Limit App Tracking)在轻 App 中持续启用,以保护用户隐私、避免用户被多个 App 或轻 App 追踪。轻 App 向用户申请 ATT 授权,姓名与 IDFV 均返回空白字符串
  • 轻 App 无法进行后台活动,如后台 URLSession 网络请求;轻 App 未使用时不能保持蓝牙连接。
  • 保护用户数据,轻 App 无法访问:
    • Motion 与健康应用数据
    • Apple 音乐与多媒体数据
    • 通讯录、文件、信息、提醒事项,照片等应用数据
  • 除了与之关联的完整应用,轻 App 无法任何其他应用共享数据
  • 一个较为重要的局限是定位。轻 App 无法获取持续定位。对于基于地理位置调起的轻 App 来说可能会有影响。比如,轻 App 需要确认调用 URL 为“https://mybigcup/seattle/table/17”的使用位置的确在西雅图,以免用户为别桌买单。因此,轻 App 可获取用户设备所在的一个物理范围,但不能获取具体地址。但是,轻 App 可请求用户“当使用轻 App 时”允许定位,用户同意后,当地时间次日凌晨 4 点,这个权限会自动关闭。

<回到顶部>

 

测试轻 App

测试轻 App 并不容易,因为调用流程初始于系统,需要登录 App Store Connect 配置。因此,开始创建轻 App 时,您需要借助以下方法测试调用流程:

测试轻 App 的关键步骤如下: 

  1. NSUserActivity 成功处理传入的调用 URl 
  2. 正确解析 URL 参数
  3. 正常运行流程

测试中加入调用 URL 具体步骤如下:

  1. 点击 Product -> 编辑轻 App 对应的 Scheme
  2. 添加 Environment variable _XCAppClipURL 这个键值来模拟调用 URL
  3. 在轻 App 对应 target 运行轻 App 的 scheme。NSUserActivity 获取这个值。

这里查看示例代码。

使用本地体验(Local Experiences )测试轻 App 预览卡片

轻 App 预览卡片是用户交互的重要环节,需在创建初期,即提交轻 App 至 App Store Connect 之前以及配置 AASA 文件之前进行测试。 

App Store Connect 中设置轻 App 本地体验与设置轻 App 高级体验流程一样。

轻 App 本地体验的限制条件:

  • 两种方式调起轻 App 预览卡片:
    • 二维码(通过 iOS 内建相机扫描)
    • NFC 标签
  • iOS 14.2 与 Xcode 12.2 及以上
  • App Store Connect 中,轻 App 本地体验配置将覆盖轻 App 高级体验
  • 轻 App 本地体验仅发布已注册 Development、Ad Hoc 和 TestFlight 的应用,不能发布已在 App Store Connect 发布的应用。

app clip developer local experience(图片来源于 iOS 设备)

 

app clips local experience test(图片来源于 iOS 设备)

 app clip local experience demo(图片来源于 iOS 设备)

如何设置轻 App 本地体验?

  1. 确认您的设备处于开发者模式
  2. 将系统更新到 iOS 14.2 及以上并接入 Xcode 12.2 
  3. 在 APP CLIPS TESTING 页面,进入 Local Experiences – Settings -> Developer -> Local Experiences
  4. 选择 Register Local Experience,创建轻 App 本地体验
  5. 模拟 App Store Connect 轻 App 高级体验,创建轻 App 本地体验

如何调用轻 App 本地体验?

  1. 使用下列方式将轻 App 添加到您的设备:
    1. 使用 Xcode 构建并运行轻 App
    2. 使用 Xcode 中 Archive 功能为轻 App 创建 ipa 文件,在设备上安装
    3. 通过 TestFlight 向用户推送轻 App
  2. 使用 iOS 相机扫描已编码调用 URL 的二维码或轻点 NFC 标签,该调用 URL 与轻 App 本地体验中定义的 URL 重叠。这与 App Store Connect 中规定的重叠规则相对应。

提交轻 App 到 App Store Connect 后测试

将完整 App 与轻 App 提交至 App Store 时,您可在 TestFlight 页面定义轻 App 调用。每个调用流程都是调用 URL 定义的。 

Testing app clips after submission to App Store Connect

(图片来源于 App Store Connect)

Adding an app clip invocation

(图片来源于 App Store Connect)

 应用测试人员在 TestFlight 中查看调用流程并运行轻 App,模拟调用 URL 被调起的流程。

<回到顶部>    


小结:随需而现、瞬时可用的轻 App

轻 App 指明了应用生态的下一个发展阶段,为 iOS 用户带来更加优化、瞬时可用的功能,为应用设计与开发提供了更广阔的空间。

轻 App 用户体验将历经两个阶段:

  • “瞬时可用”:用户通过轻 App 与当下环境即时互动,安全快捷 
  • “以小见大”:用户通过完整 App 充分享受应用提供的全线服务 

Apple 为这两个阶段都搭建了基础设施,以便用户从轻 App 流畅切换到完整 App。 

我们相信,轻 App 将被众多开发团队采用,为用户提供更高价值、打造更优互动。我们编写这份手册,希望能够为您开发轻 App 提供相关专业知识。

您还可继续查看 Apple 轻 App 开发文档