iOS App Clips学习笔记
一、什么是App Clip?
App Clip是一个App的轻量版,用来提供一些用户所需功能,我们可以把它看成苹果的小程序。它不需要下载就直接能打开。这样即可达到不下载完整版APP便可体验APP的部分功能,即用即走。
二、App Clip触发场景
- 扫描NFC标签或者二维码
- 点击来自Siri中基于位置的建议
- 点击地图app中的链接
- 点击网站上智能推荐应用横幅
- 点击通过“信息”App分享的链接
三、App Clip 体验准备
开发环境:Xcode12 beta,iOS14系统
四、创建App Clip
创建App Clip的前提是必须先有一个App(没有项目则需先新建),然后在已有的App项目上新建Target:
(1)使用App Clip 模板添加一个Target:Xcode菜单项File->New->Target…
(2)输入App Clip的Product Name,选择开发相关配置,点击完成
(3)项目结构与完整版App一致
五、代码与资源复用
因为App必须包含App Clip的所有功能,所以App Clip代码应该是APP代码的子集。这样便会存在项目代码和资源的复用问题。
1、关于代码复用:
我们可以把重用代码拆分成重用组件,使用cocoapods来管理(新项目推荐使用Swift Packages)
1 |
|
2、使用条件编译:
某些场景下,有些代码可能无法在App Clip的Target中使用:
(1)Objective-C中,我们可以通过在App Clip Target的Build Settings中找到Preprocessor Macros,新增APPCLIP项:
在代码中使用:
1 |
|
(2)Swift中,我们可以通过在App Clip Target的Build Settings中找到Active Compilation Conditions,新增APPCLIP项:
在代码中使用:
1 |
|
3、关于图片资源复用:
我们可以添加一个新的Asset Catalog作为一个共享的assets,然后在完整版App和App Clip中共用这些资源。
六、App Clip访问调用URL
当用户启动一个App Clip,App Clip相关联的生命周期方法将被调用,我们会接收到一个NSUserActivity对象,后续便可通过访问这个NSUserActivity对象来处理任何状态和数据。
不同UI框架的生命周期方法需实现的回调方法不一致:
1、基于SwiftUI的App Clip和完整版App,需实现:
onContinueUserActivity(:perform:)
2、基于UIKit 的App Clip和完整版App
(1)生命周期事件定义在UISceneDelegate中,需实现:
scene:continueUserActivity:
(2)生命周期事件定义在UIApplicationDelegate中,需实现:
application:continueUserActivity:restorationHandler:
注意:完整版App必须处理App Clip所需处理的全部调用。启动时,需确保调用类型为NSUserActivityTypeBrowsingWeb,然后再访问已启动App Clip的URL。
七、App Clip有哪些限制?
大小限制:不能超过10MB。
一个App有且只能有一个App Clip,且App的功能必须包含一个App Clip中的所有功能。
App Clip无法把数据存储到keychain来共享给完整版App,数据共用只能通过一个共享的app container 或者 user defaults ,注意不要在app container或user defaults中存储用户敏感信息。
App Clip不可用的frameworks:CallKit、CareKit、CloudKit、HealthKit、HomeKit、ResearchKit、SensorKit、 Speech。
App Clip无法获取到设备名([UIDevice name])和广告标识符(identifierForVendor),其对应的API会返回空串。
App Clip不能执行后台任务:例如,在App Clip不使用时,用NSURLSession进行后台联网或保持蓝牙连接。
App Clip的通知和定位权限是免申请,用户可以主动关闭:通知在8小时内有效,位置只能获取一次,第二天凌晨4点会自动重置。如需重度使用,可通过弹窗申请。
App Clip无法访问以下数据:
运动和健身数据 苹果音乐和媒体 联系人,文件,消息,提醒和照片等应用数据
八、App Clip需注意的地方
1、 App Clip不会显示在用户主屏幕上,且用户不能像管理完整版App一样管理App Clip,如果App Clip在一段时间内不活跃,系统会自动从设备中清理掉对应的App Clip。
2、App Clip应避免复杂的界面元素,如TabBar或复杂的表单,为了降低技术的复杂性,推荐使用Apple Pay和Sign in with Apple。
3、App Clip会给完整版App保留以下功能:
(1)高级网络功能(如Bonjour)或本地Wi-Fi网络配置
(2)App extensions
(3)自定义和设置:如创建一个settings bundle
(4)数据移交和打开文档
(5)内购和支付卡配置
(6)低级Unix功能如:BSD通知
(7)iPad上的分屏
(8)自定义URL schemes的注册
(9)使用StoreKit的requestReview(in:)
方法请求用户对该应用进行评论
(10)搜索配对的蓝牙设备
九、对于App Clip的一些疑问
1、App Clip必须在iOS14上,推荐使用Swift开发。
2、关于数据共享问题:
App Clip与主App通信方式和普通Extension Target一致,添加App Groups,把App Clip和主App放到同一个App Groups中就能访问user defaults数据。
3、如果App Clip需要展示广告或者推荐其他APP,我们应该怎么做?
使用 SKOverlay或者SKStoreProductViewController。
由于目前没法配置App Clip测试,关于App Clip配置部分建议看苹果官方文档,后续实际开发再补充。
此文仅供学习交流,转载请注明出处!