App Clip 的最佳实践

作者:blueeee,iOS 开发者

Sessions: https://developer.apple.com/videos/play/wwdc2020/10120/

前言

当用户购买最喜爱的清凉饮料或者支付停车费用的时候, App Clips 可以为用户提供最佳的即刻(in the moment)体验。对于如何创建一个持续且专注的 App Clips ,本篇主题分享了相关的参考和最佳实践,并且展示了如何通过相关技术如 App Clips 通知,地理位置确认来简化交易的流程。同时探索了如何引导用户从 App Clips 到完整的App,要想更好的了解本篇内容,推荐先观看另外两篇 App Clipss 探索之旅App Clipss 的配置及链接处理

App Clips 是开发者们 App 的精简版,有几个较为重要的特点:

  • 轻量的(lightweight)

  • 在用户需要的时候按需触达(delivered on-demand)

  • 用户通过URL唤醒开发者注册的 App Clips

  • 用户通过 App Clips 体验可以轻松的被引导到完整的 App

最佳实践

设计

专注必要任务。App Clips 支持的功能应该仅仅是用户当下所需的功能,而对于相对庞大或者复杂的任务,应该保留在开发者的完整 App 里。

立即可用。当 App Clips 启动后应该可以立即使用,只加载必要的资源,才能保证获得快速的启动体验。不要包含闪屏页或者需要用户等待下载完成后才能进行后续操作的功能

用户完成任务后再询问是否需要注册。创建账户是相对复杂的流程,需要花费用户一定的时间和精力,所以应该在用户完成手头的任务后再询问是否需要注册

请求必要的权限。请求用户权限时,应当只询问当前任务所必须的权限,并且清楚的向用户阐明用途

为完整 App 提供一致的简化体验。用户升级后完整 App 会取代 App Clips,开发者需要为完整 App 提供和 App Clips 相同的流畅体验,确保使用一样的名字和图标,使得用户可以在体验上保持一致

更多关于设计 App Clips 的内容,请参考App Clipss 开发设计指北

构建

App Clip 的最佳实践

关于构建 App Clips,开发者需要为自己的 Xcode 工程新增一个 target。一般来说 App 已经包含了资源和类文件,其中一些会与 App Clips 共享,开发者需要明确哪些资源是 App Clips 需要用到的,并且将它们包含在 App Clips 的 bundle 中。可以想象 App Clips 越小,用户就可以越快速的使用到,所以开发者尽量为 App Clips 添加必要的资源。如上图所示,对于那些可以公用的资源,将它们放入共享的 asset catalog 中,同时开发者需要整理相关的类和国际化文件使它们也可以在完整的 App 和 App Clips *享。

认证

App Clip 的最佳实践

支持 Sign in with Apple 登陆,这是用户最好的登陆账户的方式

使用 ASWebAuthenticationSession 进行联登,如果开发者提供了 Sign in with Apple 以外的登录,那么 ASWebAuthenticationSession 是合适且轻量的进行第三方登录的方式,可以确保用户不需要在App Clips和其他应用间进行切换

为已有账号的用户提供账户名和密码登录,使用 App Clips 支持的密码自动填充,用户可以更加快捷的登陆。

为升级到的完整 App 提供 Sign in with Apple 支持

隐私

App Clip 的最佳实践

App Clips 的生命周期是短暂的,在被保护隐私的前提下,用户应当可以放心的使用。App Clips 不应该包含一些敏感的用户数据,这些数据对于 App Clips 所提供的轻量级的体验是不必要的,开发者可以鼓励用户在完整App中使用相关的功能。

App Clips 支持相机,麦克风和蓝牙的权限申请,为了给予用户快速高效的体验,苹果会把这些权限数据转移到完整App 中,用户无需在完整App内再次申请。

简化交易

在日常生活中我们会遇到许多通过 iOS App 来进行交易的场景,典型的交易流程包含许多步骤,现在举例来说明:

App Clip 的最佳实践

如上图所示,这是一个购买沙冰的流程

  1. 用户走进一家沙冰店,点击NFC标签,这时名为Fruta的App Clips启动了。

  2. App Clips会请求用户的地理位置权限,并通过地理位置信息找到用户所在的沙冰店。

  3. App Clips展示沙冰的菜单

  4. 用户选择喜爱的沙冰并且进行付款

  5. 为了让用户知道沙冰已经制作完成,App Clips会请求通知权限

  6. 最后App Clips会提供登陆和注册功能使得用户可以积分

可以看的出来,通过 Fruta 的 App Clips 购买沙冰的过程还是需要较多的步骤的,让我们看看如何简化购买流程吧!

位置确认

首先 App Clips 可以通过接近 NFC 标签或者扫描二维码等物理方式来触发,在上面沙冰的例子里,NFC 标签中所包含的 URL 可以提供当前沙冰店的信息,有了这些信息可以知道沙冰店的地理位置以及菜单,用户在其中可以选择沙冰并进行购买。

尽管如此,如果 NFC 标签与沙冰店不匹配怎么办,或者说如果有人故意在该沙冰店中放置其他的 NFC 标签怎么办,这样会导致用户的困惑,甚至一些欺诈行为会导致用户的损失。

App Clip 的最佳实践

为了防止这一现象,开发者需要知道用户确实在当前的沙冰店并扫描了 tag,可以通过获取用户的地理位置信息来匹配当前的沙冰店。

App Clip 的最佳实践

位置确认仅显示足以完成此操作的信息,不需要完整的地理位置权限,用户可以在 App Clips 卡片中控制是否允许, 当 App Clips 从物理码中接收到信息时,开发者可以通过系统得知是否在正确的位置获取了有效的信息,并得到一个“是”或“否”的答案,无需额外提示。

App Clip 的最佳实践

要启用位置确认,可以将 NSAppClipRequestLocationConfirmation 做为 Key 添加到 info.plist 中的 NSAppClip 里。

App Clip 的最佳实践

当 App Clips 启动时可以通过 NSUserActivity 获取 payload ,然后通过坐标和半径获取相应的区域,半径最多可以设置到500米。最后调用 confirmAcquired(in:region) 方法,通过闭包获取最终结果。

以上就是如何简化位置确认。

付款

正如大多数 App 一样,可以在 App Clips 中可以使用任意的付款方式。使用 Apple Pay 用户可以更加安全和快速的进行交易,无需输入信用卡号,可以很好的简化整个付款流程。

App Clip 的最佳实践

在使用 App Clips 后,开发者可以通过通知来再次唤起用户。

App Clip 的最佳实践

若要当天发送通知,开发者需要先请求权限。通过 App Clips 通知,每次启动后最多可以获得八小时的权限, 如上图用户可以在 App Clips 卡片中授予权限。同时开发者可以在 App Clips 启动后随时请求常规权限。

App Clip 的最佳实践

要启用 App Clips 通知,可以将 NSAppClipRequestEphemeralUserNotification 做为 Key 添加到 info.plist 中的 NSAppClip 里。

App Clip 的最佳实践

若要确定用户是否已在 App Clips 卡片中授予通知权限,可以在 NotificationSettings 中检查 authorizationStatus

登陆

Sign in with Apple 是隐私且便捷的登陆和注册方式,如果用户已经拥有一个基于密码的账户,还可以通过 AuthenticationServices 简化登陆流程,甚至不用展示登陆界面。

App Clip 的最佳实践

当现在完成了所有的简化步骤,如上图所示整个交易交易过程变得更加高效顺畅。

引导用户到完整 App

App Clip 的最佳实践

引导

iOS 提供了许多途径让用户在使用了 App Clips 后,可以轻松的引导到完整 App 中。

App Clip 的最佳实践

当 App Clips **后,app banner 上会显示应用的名称,图标和 App Store 链接,点击 banner 可以跳转到 App Store,用户可以在其中安装完整 App,同时还可以从 App Clips 的设置面板中获取完整的应用。

App Clip 的最佳实践

开发者可以在 App Clips 的视图中嵌入 SKOverlay。苹果建议当用户在 App Clips 中完成相关任务后展示 SKOverlay,这样可以较好的引导用户,比如可以将其放置在用户的付款确认界面之后。

App Clip 的最佳实践

要将 SKOverlay 添加到 App Clips,可以使用 appStoreOverlay 修饰符并通过 AppClipConfiguration 进行配置。

关于更多 SKOverlay 相关的内容,请参考session "What's New with In-App Purchase[1]" 。

共享数据

App Clip 的最佳实践

开发者可以通过安全的 App Group 来将用户数据(例如购物清单或订单历史记录)从 App Clips 传递到完整的 App,这种安全的 App Group 仅可以在 App Clips 和应用程序之间进行访问。当用户安装完整 App 并删除 App Clips 后,App Group 中的共享信息将转移到完整 App 中。

App Clip 的最佳实践

用户如果已经在 App Clips 中登陆,可以通过 App Group 在完整 App 内自动登录。如上图,当用户在在 App Clips 中通过 Sign in with Apple 登陆,会把 userID 以文件或者数据库的形式存储在共享 App Group中,当用户升级到完整 App,可以从 AppGroup 中读取到 userID,同时可以通过 ASAuthorizationAppleIDProvider() 来验证 userID,对于已在 App Clips 中登陆的用户,可以无缝的在完整App中登陆。

Demo

App Clip 的最佳实践

如果没有简化体验,当用户打开 App Clips 后,将会看到如上图一样的提示,用户不得不在当时决定是否需要授予地理位置权限和通知权限,造成不够顺畅的体验,下面来简化下权限申请流程:

这是一个名为 Fruta 的 Xcode 项目

App Clip 的最佳实践

App Clips 支持 8 小时内有效的免申请通知,且无需弹窗提醒。首先在 info.plist 中展开 NSAppClip,将 key 为 NSAppClipRequestEphemeralUserNotification 的value设为 YES

App Clip 的最佳实践

现在回到 FrutaClip.swift,在请求通知授权之前,开发者可以检查 App Clips 是否已被授予临时通知权限,这是 iOS 14 中针对 App Clips 引入的新值。如果已经获得了临时通知权限,则无需弹窗提醒。

App Clip 的最佳实践

现在重新编译并安装 App Clips,用户将不会看到通知权限的提示了,此时在 Settings 中打开 Fruta,查看通知设定,可以看见允许通知条目中会有一个“8 小时后关闭”的提示,这表明了 Fruta App Clips 已通过物理调用(例如 NFC 或二维码)开启了 8 小时的临时通知权限。

App Clip 的最佳实践

通过物理调用方法(例如 NFC 或二维码)启动 App Clips 时可以请求一次性的地理位置位置确认,如同配置临时通知,在 info.plist 中展开 NSAppClip,将 key 为 NSAppClipRequestLocationConfirmation 的 value 设为 YES

App Clip 的最佳实践

回到代码中,可以移除 CoreLocation 相关的请求地理位置的代码,确保已在项目中链接了 AppClip.framework,并在 swift 文件中导入。在 handleUserActivity 方法中,通过 appClipActivationPayload 获取经纬度信息以和 URL 携带的信息进行验证。接下来实例化一个 CLCCircularRegion,通过 payload 调用 confirmAcquired(in: region) 方法,只有当用户在该区域时,才可以使用 Apple Pay 进行支付。

App Clip 的最佳实践

这样做有什么好处呢,举例来说明。在 Fruta 总部,Fruta Cupertino 店的二维码与 Fruta San Francisco 店的二维码混合在了一起, 若没有位置确认,会导致没有戒心的客户误为别人的冰沙付款。而有了位置确认,可以很好的保护开发者和用户。如果我现在在 Fruta Cupertino,扫描属于 Fruta San Francisco 的二维码启动 App Clips,然后尝试下单,可以看到成功运行了位置确认,由于我不在 Fruta 所在的 San Francisco,便不可以购买冰沙。

App Clip 的最佳实践

而我此时身处 Fruta San Francisco 店呢,扫描该店的二维码,这时候就可以如往常一样进行支付啦。

App Clip 的最佳实践

最后,是将凭据从 App Clips 迁移到完整的 App。正如之前提到的,需要建立了一个在完整 App 和 App Clips 之间共享的 App Group。在 OrderPlacedView.swift 中,如果通过 Sign in with apple 登录成功,便可以将授权凭据写入 group container 中。

App Clip 的最佳实践

为了使用户能够轻松升级到完整的 APP,这也是配置 StoreKit overlay 的绝佳机会。可以在通过 Sign in with Apple 成功登陆后并完成交易后立即展示。

App Clip 的最佳实践

当用户首次启动完整 App 时,可以为完整 App 添加迁移凭据的逻辑,在 FrutaModel.swift 中,通过预处理条件来只为主 App 编译。当在主 App 下,可以从 group container 中读取之前保存的 userID,同时实例化 ASAuthorizationAppleIDProvider 来获取登陆状态。

App Clip 的最佳实践

完成所有的简化后再次运行 App Clips,经过付款和登陆来到了结果页面,这里展示了之前提到的 SKOverlay,用户可以较为方便的跳转到 App Store 并下载完整 App。用户进入完整 App 后可以自动登陆,并获得账号相关的状态。

以上 demo 向开发者展示了如何配置临时通知,一次性的地理位置权限,以及在 App Clips 和完整 App 间进行数据共享。

总结

在本篇 session 中,苹果向开发者们介绍了设计开发 App Clips 的最佳实践,以及如何简化的 App Clips 的交易流程,最后通过 demo 向开发者们展示了如何在实际开发过程中进行实践。可以看的出来,苹果对 App Clips 定位是轻量和用完即走的,尽量减少对用户的打扰,同时尽可能的希望开发者通过 App Clips 将用户引导到完整 app上。可以遇见之后会涌现出许多优秀的 App Clips,让我们拭目以待吧????!

推荐阅读

✨ 苹果 App Clips 技术详解一文

✨ App Clipss 探索之旅

✨ App Clipss 开发设计指北

✨ App Clipss 的配置及链接处理

✨ 为其他商户构建 App Clipss

关注我们

我们是「老司机技术周报」,每周会发布一份关于 iOS 的周报,也会定期分享一些和 iOS 相关的技术。欢迎关注。

App Clip 的最佳实践

支持作者

这篇文章的内容来自于 《WWDC20 内参》。在这里给大家推荐一下这个专栏,专栏目前已经创作了 99 篇文章,只需要 29.9 元。点击【阅读原文】,就可以购买继续阅读 ~

WWDC 内参 系列是由老司机周报、知识小集合以及 SwiftGG 几个技术组织发起的。已经做了几年了,口碑一直不错。 主要是针对每年的 WWDC 的内容,做一次精选,并号召一群一线互联网的 iOS 开发者,结合自己的实际开发经验、苹果文档和视频内容做二次创作。

参考资料

[1]

What's New with In-App Purchase: https://developer.apple.com/videos/play/wwdc2020/10661/