关于App Clips
开发一个App Clips的目的是提供你的App中的部分功能让用户可以快速使用,并且不需要下载完整的App。这句话有两个非常重要的点,首先App Clip提供完整应用程序的一部分功能,这表明你一定要有一个完整功能的App,才可以开发上线App Clips,与iOS开发中其他的Extension类似,App Clip也可以理解为一种Extension,其必须由一个宿主App来承载。
一个App Clip也可以理解为是某个App的轻量级版本,用来提供一些完成瞬时的任务的功能,例如为一杯咖啡进行支付、使用店铺提供的优惠券、公共的信息查询等等。
App Clip的启动需要由一个调用方调起,在iOS开发中,更专业点的术语叫invocation,invocation可以是多种形态的,例如通过点击基于位置信息的推荐Banner,点击Sari的推荐或者通过扫描二维码或NFC等。App Clip被invocation调起后,用户可以通过它完成一件专注的任务,当用户不再需要使用它时,它会自动的被iPhone移除,这个过程对用户来说是无感知的,因此App Clip也不会占用用户的桌面空间。
App Clips的开发
在开发过程中,开发一款App Clip与开发正常的iOS应用并没有特别大的差异,它与开发普通iOS应用有着相关的Framework支持,例如使用UIKit开发应用的界面。同样,App Clips也可以像完整App一样的使用设备的硬件(当然需要申请对应的权限),例如使用相机、蓝牙等等。还有一点需要注意,一个完整的App只能拥有一个App Clip,并且App Clip提供的功能在主App中也需要被完整的支持才行。
前面说过,App Clip的启动需要由invocation来触发,invocation包括如下场景:
- 通过NFC扫描来唤起
- 通过点击Sari提供的基于地理位置的推荐
- 在地图App上点击指定的链接
- 点击网页上的智能推荐横幅
- 通过Messages App分享的链接
需要注意的是,App Clips 的入口除了上述六种方式,那些被打开过的 App Clips 还会出现在 App 资源库的“最近添加”文件夹中,而且图标会围有一圈虚线来和正式 App 做出区分。
唤起一个App Clip的过程如下图所示(来自Apple官方文档)
如上图,当某个invocation触发了App Clip时,系统首先会检查invocation关联的URL,通过URL获取用来展示预览信息的数据,预览信息包括一个背景图案,描述标题与启动按钮,用户点击启动按钮后会打开App Clip。我们可以在App Clip启动时拿到传递进来的URL,通过URL的参数进行不同的逻辑处理。
了解了App Clips的启动过程,我们知道实际上在启动App Clip之前,系统会先弹出一个预览卡片,这个卡片上的信息可以由开发者在iTunes Connect上自行定义。
前面说过,App Clip的运行需要invocation进行调用,对于invocation的调用,如果用户安装了完全的主App,则会唤起主App来处理用户任务,如果用户没有安装主App,则自动调起App Clip。无论通过哪种invocation来调起App Clip,我们都需要在App Clip的target中配置指定的域权限。在target工程的设置页面,找到Associated Domains选项,在其中添加要调起App Clip的域名,需要找到这样的格式:appclips:xxx.com。这种配置方式与Deep link的逻辑基本一致。
下面两个截图分别对应oc和swiftUI的appclips开发,可以发现两个target对应的初始化代码基本上是一样的,因此在开发App Clips时,我们应该尽量的让主App的代码与App Clips需要使用的代码共享,共享代码非常容易,将可以共享的代码保证在静态库或动态库内即可。
唤醒 App Clip
开发完 App Clip 后,我们可以点击 Smart app Banner,扫码二维码或 NFC 标签,点击 Siri 获取基于位置的建议,短信等方式来唤醒(invacation) App Clip。
在 AppClip 可以被唤醒之前需要配置 Launch Experience,即给 App Clip 配置一个 URL 和 App Clip Card 信息。在开发阶段可以直接配置 Local Experience 或者在 testflight 上进行配置。App Clip 准备发布时,需要在 app store connect 上进行配置。
本文主要介绍 Local Experience 方式,其他方式可参考苹果开发文档。
1.首先将 SugarClip 通过 Xcode 在手机运行起来。
2.打开手机【设置】-【开发者】-【Local Experience】-【Register Local Experience】。
填入URL PREFIX,打开任何以 URL PREFIX 为前缀的 URL,都会被当做打开 App Clip 来处理。填入 Clip Bundle Id。填入 Title、Subtitle,选择一张图片,这些信息将会显示在 App Clip Card 上。3. 步骤2 的 URL PREFIX 编码成一个二维码(https://www.qr-code-generator.com/)
4. 使用控制面板的二维码扫描器扫描,将会弹出 App Clip Card。
5. 点击查看,进入 App Clip
配置预览卡片
在真正的启动App Clip之前,首先会弹出预览卡片。在提交App Clip时,是跟宿主App一起打包上传到App Store Connect上的,App Clip的预览卡片配置也是在App Store Connect上完成,提供给开发者自由配置的地方并不多,包括3个方面:
- 配置一个头图
- 配置副标题并提供描述文案
- 配置交互按钮
关于数据共享
App Clips的和宿主App的数据共享并没有什么特殊的地方,其和普通Extension Target与宿主App通信的方式一样,只要创建一个App Group,并将App Clips与宿主App放入同一个App Group中,之后就可以通过NSUserDefault来进行数据的共享。
完善的地方
但 App Clips 目前也存在不少影响体验的问题,由于苹果限制了 App Clips 在后台运行的权限,所以无法常驻后台,例如这一次体验的博客 App Clips 在切回主屏幕之后,音频会自动停止播放。
此外,App Clips 的入口也是一个问题,没有和微信小程序一样有一个固定的入口(App 资源库的最近添加并不算一个稳定的入口),无论是学习成本还是使用门槛都很高。
在 App Clips 的宣传视频中,苹果设想了一个被 App Clips 覆盖的全生活线下场景,我认为这也是 App Clips 最应该发力的主赛道。
作为 App 的一部分,App Clips 的特点是其能够更加专注在特定的任务上,例如公共自行车扫码出行,通过 NFC 或者二维码扫描打开相应的 App Cips 就可完成用车、付款、还车等操作;又如线下消费,扫描商户提供的 App Clips,就可浏览店内的数字促销信息,快速完成下单、付款、配送。
当然以上设想的场景不是单靠苹果就能够完成的,整个流程需要用户、开发者、厂商共同推动,任何一款的缺失都可能导致整个设想的流产。