APP Clips 技术文档

2022-03-20  本文已影响0人  大成小栈

1. APP Clips简介

App Clip 是iOS系统支持的,可以专注于app 中某项功能。例如:你在上班路上想购买一杯咖啡,但发现咖啡店内排队下单付款的人很多,此刻你只需要使用iPhone 自带的扫码工具扫描咖啡商店的 App Clip 二维码或 NFC 标签,就可以购买一杯咖啡,无需下载安装咖啡商店的 app。

App Clip 的启动需要由一个调用方调起,在iOS开发中叫invocation。App Clip被invocation调起后,用户可以通过该Clip完成一项专注的任务,当用户不再需要使用它时,它会自动被iPhone移除,这个过程对用户来说是无感知的,因此App Clip也不会占用用户的桌面空间。

App Clip的启动需要由invocation来触发,invocation包括如下5中场景:通过NFC扫描来唤起、通过点击Sari提供的基于地理位置的推荐、在地图App上点击指定的链接、点击网页上的智能推荐横幅、通过Messages App分享的链接。

当某个invocation触发了App Clip时,系统首先会检查invocation关联的URL,通过URL获取用来展示预览信息的数据,预览信息包括一个背景图案,描述标题与启动按钮,用户点击启动按钮后会打开App Clip。我们可以在App Clip启动时,通过回调方法拿到传递进来的URL,通过URL的参数进行不同的逻辑处理。

在启动App Clip之前,系统会先弹出一个预览卡片,这个卡片上的信息可以由开发者在iTunes Connect上自行定义。

App Clips 的特点:

  1. Clip与主App的关系
    App Clip的运行需要invocation进行调用,对于invocation的调用,如果用户安装了完全的主App,则会唤起主App来处理用户任务,如果用户没有安装主App,则自动调起App Clip。

  2. 功能轻便
    用户无需对App Clips进行管理,不用下载也无需删除,当指定的App Clip一段时间不活跃后,系统会自动对它们进行清除。

  3. 体积小巧
    App Clips应该足够的小巧,官方限定不可超过10M大小,只有足够小,在用户需要使用的时候才能以更短的时间加载与展示。

  4. 可用的框架受限
    在开发之前,首先要确认下App Clips可用的框架,大部分主App可用的框架在App Clips中都可以使用,但并不是所有,Assets Library, CallKit, CareKit, CloudKit, Contacts, Contacts UI, Core Motion, File Provider, File Provider UI, HealthKit, HomeKit, Media, Player, Messages, Message UI, PhotoKit, ResearchKit, SensorKit, Speech中是不被支持的,若使用了在编译时不会报错,而是在运行时报错或者返回错误的结果。

  5. 保护用户隐私
    由于App Clips会以推荐或其他广告的方式触发,因此保护用户的隐私非常重要。在App Clips中,隐私保护会一直被启用,例如对后台定位权限的申请,当用户同意后,次日的凌晨4点,这个权限会被重新关闭,如果再次启用了App Clips,需要重新向用户申请。当然,还有一些权限在App Clips中是禁止获取的,其中有:运动和健身数据,音乐和多媒体文件,通讯录/信息/照片等文件。除了其宿主App意外,App Clips也不可以和其他应用共享数据。

  6. App Clips 的消息推送
    微信小程序不能通过 Push 的方式触达用户曾让开发者忧心忡忡。而手机厂商推出的系统级应用在这方便可以给开发者更多的底气,不管是苹果的 App Clips 还是国产手机生态的快应用,服务的消息推送能力都是吸引开发者的重要能力。消息推送在 App Clip 的应用分两种场景:短时间内推送和长时间内的推送。

短时间内推送:
用户在启动 App Clip 后,8 小时内可以收到消息推送。比如用户在 App Clip 购买了一杯咖啡后就退出了 App Clip,当咖啡准备好了,用户就会收到一个「咖啡已准备好」的推送。这方式只需要在 Info.plist 属性文件中添加 NSAppClip Key,并将 NSAppClipRequestEphemeralUserNotification 设置为 true,就能默认获取消息推送的权限。
长时间内推送:
用户在 App Clip 完成一个任务后,可能过了几天才会收到推送。比如用户在 App Clip 租了辆车,租期为 3 天,到期后会用户收到「该还车了」的推送。这种方式和普通 app 的消息推送一样,都需要获取用户的推送授权。

2.开发流程

2.1 创建App Clip

首先其需要一个宿主App,在这个宿主App的工程中新建一个Target,选择App Clip即可,通过File->New->target,选择AppClip,Xcode 接下来会自动创建所需文件,这时候就可以直接选择该Clip的target进行运行,只是无内容。

2.2 App端配置

在调用App Clip时,无论通过哪种invocation来调起App Clip,都需要在App Clip的target中配置指定的关联域。在target工程的Signing&Capability页面找到Associated Domains选项,在其中添加要调起App Clip的域名,格式为appclips:xxx.com。配置方式与UniversalLink的逻辑基本一致。

2.3 服务端配置

在系统弹出 app clip 或允许 app clip 调用之前,系统会验证 app clip 的配置和调用的URL。如果无法执行验证,则不会显示app clip,也不会启动。配置方法跟UniversalLink一样,在 server 的 App Site Association (通常是在网站 .well-known 下的 apple-app-site-association 文件) 中添加这个域名对应的 appclips 条目:新增一个键值对,key为appclips,value为一个对象 "apps": ["bundle id.Clip"]

在服务器配置apple-app-site-association文件格式:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "com.jd.paidaojia1",
                "paths": [ "*"]
            }
        ]
    },
    "appclips": {
        "apps": [ "com.jd.paidaojia1.Clips" ]
    }
}

一个能够启动appClip的AppBanner形式如下:

<meta 
  name="apple-itunes-app" 
  content="app-id=myAppStoreID, app-clip-bundle-id=appClipBundleID
>

App Clip 的卡片开始显示时就已经开始了包的下载,App clip 的体积必须在 10MB 以内。这样,大概率在用户选择打开你的 app clip 之前,就能下载完成,以提供良好体验。

用户点击 banner 或者 iMessage 链接,且继续点击打开按钮后,app clip 的 user activity 关联的生命周期函数将被调用,swift中是

// webpageURL为调起的链接,可用以传参
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    print(userActivity.webpageURL)
}
2.4 Beta 期间调试Clip

在开发时,可以通过设置 _XCAppClipURL 这个环境变量来“模拟”通过特定 URL 调起过程。当 Associated Domain 设置正确后,在 Xcode 中运行 app clip,就可以拿到包含这个环境值的 NSUserActivity。这样在 Beta 期间的本地开发就不需要依赖外部 server 环境了。

特别说明一下,这个地址一般为了测试,是需要与你domain中设置的是一样的,但是我们真正使用的时候不可能只是一个固定的地址,后面是可以跟参数,因为调起链接的时候只会拿这个地址前缀部分,比如url是www.paijitang.com?orderNo=123456都是可以识别的。
如果在本地测试的话还需要配置一下 Launch Experience,即给 App Clip 配置一个 URL 和 App Clip Card 信息。在开发阶段可以直接配置 Local Experience 或者在 testflight 上进行配置。App Clip 准备发布时,需要在 app store connect 上进行配置。

手机上配置Launch Experience:

  1. 打开手机【设置】-【开发者】-【Local Experience】-【Register Local Experience】;
  2. 填入 Clip Bundle Id;
    填入 URL PREFIX,打开任何以 URL PREFIX 为前缀的 URL;
    填入 Title、Subtitle,选择一张图片,这些信息将会显示在 App Clip Card 上;
  3. 在Safari中输入有该前缀的一个Url,并请求;
  4. 将会弹出APP Clip Card.不过前提是你的Clip已经配置好真机运行的证书文件,关于配置看下一步。
  5. 关于其他的invocation方式,也可以尝试一下。

特别说明,上面action有三个,Open、View、Play 的区别就是打开卡片的时候,下面的按钮分别是打开、查看、打开游戏,可以自己体验一下。

2.5 Clip需要配置证书

你可以切换到MyClip的target下查看,它的bundle id其实就是它的宿主target的id后面加了一个.Clip,当然你可以改这个后缀,但是需要和证书上的一致。

接下来就是正常的配置Identifies的流程。但是比较重要的一点是必须要把Associated Domains这个给勾选上,不然真机运行会报错。

上面配置完成之后,下面就需要创建对应的描述文件即Profiles文件,分别创建开发可发布证书。之后回到项目里配置上相应证书文件即可。

2.6 发布App Clip

首先,为MyClip配置一个icon,不然会上传失败;
其次,以下几个位置需要与发布的target保持一致。

注:这个Display Name需要选一个跟项目名不一致的名字,否则,提交appStore的时候会告诉你displayName or bundle Name已存在;

最后,需要在App store connnct中配置一下Clip,前提是你必须有一个包含轻应用的包提交通过。然后你就可以在下图中配置:

上面步骤4的配置完成之后,只能让你在Safi浏览器和信息中体验轻App.高级体验则可以通过轻 App 码(内嵌网址和 NFC 标签)、二维码以及“地图”中的地点卡片调用。相关配置可以通过点击编辑高级体验就可以设置,比较简单。
如果你的app使用了TestFligh,这个时候你就可以在手机testFligh App中查看刚才提交的版本,会有一个轻App按钮,点击进去就是你的轻App内容。这里就可以测试你的功能了。

上面基本就是一个轻应用从测试到发布的基本流程。

参考资料:
1.https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA%3D%3D&idx=1&mid=2247484662&scene=21&sn=601cb10f17a9d4bb94fa4b911ed3586a#wechat_redirect
2.https://onevcat.com/2020/06/first-look-app-clips/
3.https://www.ifanr.com/minapp/1368393
4.https://developer.apple.com/documentation/app_clips/creating_an_app_clip_with_xcode

上一篇 下一篇

猜你喜欢

热点阅读