优化用户体验
主屏幕不会显示应用剪辑。用户用的时候自动安装应用剪辑,一段时间不用了系统删除。
因此必须给用户个好印象,体验要好。
要避免复杂的交互及页面设计,例如tab bars or 复杂的表格,尽量提供线性的、 focused用户体验。
可以用先进的技术处理复杂的任务,例如Apple Pay或者Sign in with Apple。
越小越好
为了保证启动快速,应用剪辑最大10 MB
看看哪些Frameworks可以用
App clips make use of SwiftUI and UIKit, and have access to the same frameworks as your full app.
不能用的Framework: CallKit, CareKit, CloudKit, HealthKit, HomeKit, ResearchKit, SensorKit, and Speech.
用了不可用的Framework也不会编译错误。而是api返回空、错误、或者不可用
For example, HealthKit’s isHealthDataAvailable returns false when you call it from an app clip.
保护用户隐私
应用剪辑可以用 SKOverlay or SKStoreProductViewController来显示广告或者推荐其他app. 但是 Limit App Tracking is always enabled
不能请求追踪授权,一些标识符也会返回空
不能进行后台请求任务
应用剪辑不用的时候,不能维持蓝牙连接
不能持续请求定位
定位授权会在第二天4点取消
为了保护用户数据,以下资源不能访问:
运动和健身数据
Apple Music and Media
Data from apps like 通讯录, Files, 短信, 提醒, and 照片
只能和主App共享数据
For more information, see Making Data Available to the App Clip’s Corresponding App.
关于appclips
- 一个 app 能且只能拥有一个 app clip。
- 通过在一个 app project 中添加 app clip target 就能很简单地创建一个 app clip 了。
- App clip 的结构和普通的 app 毫无二致。你可以使用绝大多数的框架,包括 SwiftUI 和 UIKit (不能使用的都是一些冷门框架和隐私相关的框架,比如 CallKit 和 HomeKit 等 )。所以 app clip 的开发非常简单,你可以使用所有你已经熟知的技术:创建
UIViewController
,组织UIView
,用URLSession
发送请求等等。和小程序这种 H5 技术不同,app clip 就是一个 native 的几乎“什么都能做”的“简化版”的 app。 - App clip 所包含的功能必须是 main app 的子集。App clip 的 bundle ID 必须是 main app 的 bundle ID 后缀加上
.Clip
(在 Xcode 中创建 app clip target 时会自动帮你搞定)。 - 域名和 server 配置方面,和支持 Universal Link 以及 Web Credentials 的时候要做的事情非常相似:你需要为 app clip 的 target 添加 Associated Domain,格式为
appclips:yourdomain.com
;然后在 server 的 App Site Association (通常是在网站.well-known
下的apple-app-site-association
文件) 中添加这个域名对应的appclips
条目:
{
"appclips": {
"apps": ["ABCED12345.com.example.MyApp.Clip"]
}
}
-
默认最简单的情况下,app clip 通过 Safari App Banner 或者 iMessage app 中的符合 domain 要求的 URL 下载和启动。这种启动方式叫做 Default App Clip Experience。
-
一个能够启动 app clip 的 App Banner 形式如下:
<meta
name="apple-itunes-app"
content="app-id=myAppStoreID, app-clip-bundle-id=appClipBundleID
>
-
你的 app clip 在被真正调用前,系统会显示一个 app clip card。对于 Default App Clip Experience,你可以在 App Store Connect 中为这种启动方式提供固定的图片,标题文本和按钮文本。(现在版本的 App Store Connect 中似乎还没有设置的地方,应该是 iOS 14 正式发布后会添加)。
image -
App clip card 显示时,你的 app clip 就已经开始下载了。App clip 的体积必须在 10MB 以内。这样,大概率在用户选择打开你的 app clip 之前,就能下载完成,以提供良好体验。
-
用户点击 banner 或者 iMessage 链接,且继续点击打开按钮后,app clip 的 user activity 关联的生命周期函数将被调用,根据你所使用的技术不同,它将是
onContinueUserActivity(_:perform:)
(SwiftUI),scene(_:willContinueUserActivityWithType:)
(Scene-Based app) 或者application(_:continue:restorationHandler:)
(App Delegate app) 之一。获取到唤醒 app clip 的NSUserActivity
后,就可以通过webpageURL
获取到调用的链接了(Banner 所在页面的链接,或 iMessage 中点击的链接)。 -
根据唤醒 app clip 的 URL,用 UIKit 或 SwiftUI 完成对应的 UI 构建和展示。因为 App Clip 需要是 main app 的子集,因此一般来说这些 URL (以及对应的
NSUserActivity
) 也需要能被 main app 处理。当 main app 已经被安装时,唤醒的会是 main app。 -
对于更复杂的唤醒情况,可以根据 URL 的不同、甚至是地点的不同,来提供不一样的 app clip card。这部分内容也是通过 App Store Connect 进行配置的。这类启动方式被称为 Advanced App Clip Experiences。
-
在开发时,可以通过设置
image_XCAppClipURL
这个环境变量,并运行 app clip target 来“模拟”通过特定 URL 点击后的情况。当 Associated Domain 设置正确后,在 Xcode 中运行 app clip,就可以拿到包含这个环境值的NSUserActivity
。这样在 Beta 期间的本地开发就不需要依赖外部 server 环境了。 -
关于代码和资源的组织。很大机率 main app 和 app clip 是需要共用代码的,可以无脑地选择将源码放到 main app 和 app clip 两个 target 中,也可以选择打成 framework 或者 local Swift Package。不管如何,这部分共用的 binary 都会同时存在于 main app bundle 和 app clip bundle 中。图片等素材资源也类似。简单说,app clip 其实就是一个完整但尺寸有所限制、并且和某个域名绑定,因此不需要用户认证 Apple ID 就可以下载的 app。
-
部分 app clip 是“用完就走”的,但是也有部分 app clip 是为了导流到 main app。可以通过
SKOverlay
或SKStoreProductViewController
来显示一个指向 main app 的推广窗:
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
// 处理 userActivity ...
if let scene = scene as? UIWindowScene {
let overlay = SKOverlay(configuration: SKOverlay.AppClipConfiguration(position: .bottom))
overlay.present(in: scene)
}
}
image
- 如果在 app clip 中有用户注册/登录和支付需求的话,Apple 推荐使用 Sign in with Apple 和 Apple Pay 来简化流程。虽然在 app clip 中,所有的 UI 操作和导航关系都是支持的 (手势,modal present,navigation push 等等),但 app clip 应该尽量避免 tab 或者很长的表单这类复杂交互,让用户能直奔主题。
参考文章:
一些关于 App Clips 的笔记
开发应用剪辑App Clip,iOS的小程序
技术:苹果 App Clips 详解
iOS14新特性探索之一:App Clips轻应用
网友评论