简单理解,就是苹果官方的“小程序”。 官方定义,App Clips是一个轻量级的、原生的、不需要管理和清理的App。
2008年7月11日,iPhone 3G发行并首次支持了App Store,自此开启了iOS平台上移动应用的时代。但是自15年至今,App Store上的移动应用数量增长率不断走低,甚至在18-19年出现了负增长现象(和苹果清理僵尸应用的策略有关)。
从图中可以看出,从15年App数量增长达21.41%之后,增长率一路走低,截止至最新数据增长率不足1%,iOS App市场繁荣不再,苹果生态略显疲态,未来会对相关收入造成影响。 下一次App Store,有可能是5G时代下的“重网络型”App的爆发,例如AR、VR应用。但至少不是现在,苹果不会对这种颓势坐视不管。基于特定低频场景的需求,比如在餐馆点餐付费,长久以来并没有被苹果重视。类似的还有一些业务导向的小公司,没有实力和能力研发App来抓住移动互联网的风口,在微信小程序(或其他小程序)诞生之前,唯一的出路就是找个外包低成本、快速的开发一款Web App。 但是Web App的安全性、用户体验都还存在问题,因此这次Clips主要针对这种场景给出了优化。
可以感受一下,京东H5版本和京东Native版本,体验差的还是挺多的。Clips从想法到技术方案多少都受到了这股来自东方的神秘力量的影响。毕竟小程序这个概念源自微信,也发扬自微信。 在国内,微信小程序可以说无处不在:餐馆点餐、租赁车辆、包括最近的高频应用“健康宝”/"健康码"。用户也逐渐习惯了低频需求用小程序而非下载App。
根据WWDC 2020相关Session可以得知,Clips的入口包括:NFC、QR Code、Cips Code、自家部分App、Siri、Safari的Smart Banner,还有Notification。我将这几个入口总结为:场景化入口、自有流量入口、对外扩展接口三类。
场景化入口包括NFC、QR Code 和Clips Code。 在WWDC2020有这么一个场景,用户在停车场通过NFC直接呼叫Clips支付停车费,将车开走。值得注意的是,呼出Clips是在手机锁屏状态下进行的。
除了NFC之外,还支持通过相机扫描普通QR Code(就是二维码)和未来的Clips Code来进入Clips的方式。 指的一提的是,苹果公布的这个Clips Code长得跟微信小程序码。。。一言难尽。。。 有种同样用了摩斯密码,其中一种做成了射线,另一种做成了环。。。
这些入口有明显的场景特性,多用于在线下需要使用时触发并操作。其实Clips出来后很多人抱怨苹果不支持App内部跳Clips,这个是不准确的。其实苹果自家的Siri,地图及iMessage都支持打开Clips。
其实这三个App并非随便选出来的:苹果地图App代表O2O场景、iMessage代表社交场景、Siri代表了一种未来的主流交互(非UI-Based的交互)。 Notification也算是一种唤起方式,不过这个属于Clips内部唤起逻辑之一。目前还没有资料表明,苹果会在第三方App开放打开Clips。
目前对外扩展入口仅限于Smart Banner。对于Smart Banner不太了解的同学可以参考这里 如果想要启动Clips,需要将Smart Banner配置成如下格式
加入了Clips之后,Smart Banner的使用场景会更加丰富。加入App Clips之后,Smart Banner的链路转化效率会有明显提升,对比如下:之前的Smart Banner必须要经过AppStore下载完成才能完成转化,操作步骤多(如果没登录AppStore账号的话还得登录一下),等待时间长,转化率不高; 集成了App Clips的Smart Banner可以在Clips层完成用户转化,等待时间短,用完即走,转化率高。如果用户想要体验完整版应用,还能自行完成到App的转化。提高了Smart Banner的利用率。
WWDC内资料显示,Clips会对应一个特有的URL,通过访问对应网站JSON信息来判断是否可以打开Clips,以及解析哪些字段,来对打开的Clips做变量传递。这种交互逻辑适合于非Safari的Smart-Banner打开Clips,也称之为Default App Clip Experience。
要完成数据解析,需要同时在对应Web Server和App Clips分别做配置
需要在网站的 apple-app-site-association file中,添加如下代码段:
{ "appclips":{ "apps":["ABCDE12345.example.fruta.Cilp"] }, ... } 复制代码
如果之前有支持过Universal Link,那这个文件一定不陌生。
在工程项目中需要添加对应domain信息
处理NSUserActivity,获取调用链接。 可以通过webPageUrl属性进获取。实例代码:func respondTo(_ activity: NSUserActivity?) { // Guard against faulty data. guard activity != nil else { return } guard activity!.activityType != NSUserActivityTypeBrowsingWeb else { return } guard let incomingURL = activity?.webpageURL else { return } guard let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true) else { return } } 复制代码
这里,为了更好的支持Clips,apple-app-site-association file本次还做了升级,支持订阅变量,具体可以参考WWDC2020:What's new in Universal Links
{ "details":[{ "appIDs":["ABCDE12345.com.example.resturant"], "components":[{"/":"/$(lang)_$(regin)/$(food)/"}] }] } 复制代码
Clips的开发可以说对iOS开发者来说非常友好,可以和平时开发App一样有UIView,可以弹ViewController,基本是和开发Native App相比没有什么区别(除了个别库不支持之外,比如CallKit)
首先打开已有工程,新建一个名为App Clips的target
之后将工程中需要放到Clips里的文件添加到新建的Clips的target中,例如
最后,像修改主工程一样修改Clips Target下的入口文件即可,例如AppDelegate等。
如果想要和主工程共享Asset,可以通过建立一个Asset文件,勾选之前建立的Clips Target即可
在Clips中会存在入口,如果用户想要体验完全的功能,可以通过入口进入App Store对应App的下载流程,完成转化。
值得一提的是,如果想完成从Clips到App的转化,且不丢失任何数据,需要在Clips中使用shared data container
而不是普通的standard data container
,因为正常来说,Clips生命周期之后,数据会随之消失。
使用shared data container
技术后Clips数据迁移步骤如下
首先,官方对于App Clips的大小要求是"Thinning后不超过10MB"。这个也是为了实现所谓的“Instance App”概念。 其次,App Clips的启动会先弹出Clips卡片,包含了Clips的图片信息,标题,描述,AppStore地址等信息。在此卡片的弹出后即启动下载流程,使得用户点击Open的时候看起来像是“立刻打开”。
最后,App Clips使用后,对应内存和数据会进行清理(不使用Shared data container的情况下)。 但是官方还提到,如果某个App Cilps被反复打开,其数据的有效期会相应延长,并有可能永远不删除(像普通App一样)。从目前App Clips开放的接口和交互流程上来看,在手机App这个战场上,App Clips想要撼动微信小程序的地位基本不可能。
传统iOS App是以ViewController为中心的页面组织结构,未来为了更好的适配App Clips,需要更新为基于Router的页面打开/展示架构,统一基于URL来进行传参,和现有App Clips的参数解析逻辑相一致。
苹果技术向来是步步为营。这次App Clips的技术分别以之前的Universal Link、Sign with Apple和Apple Pay为基础。那App Clips又会成为哪些技术的基础?
欢迎关注我的公众号:尼莫萌
扫码关注: