一、什么是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)


source 'https://github.com/CocoaPods/Specs.git'platform :ios, '8.0'def pod_Target_TestDemopod 'AFNetworking'
enddef pod_Target_Sharepod 'SDWebImage'
endtarget 'TestDemo' dopod_Target_TestDemopod_Target_Share
endtarget 'TestDemoAppClip' dopod_Target_Share
end

2、使用条件编译:
某些场景下,有些代码可能无法在App Clip的Target中使用:
(1)Objective-C中,我们可以通过在App Clip Target的Build Settings中找到Preprocessor Macros,新增APPCLIP项:

在代码中使用:


#ifndef APPCLIPNSLog(@"this is not App Clip!");
#elseNSLog(@"this is App Clip!");
#endif

(2)Swift中,我们可以通过在App Clip Target的Build Settings中找到Active Compilation Conditions,新增APPCLIP项:

在代码中使用:


#if !APPCLIPprint("this is not App Clip!")
#elseprint("this is App Clip!")
#endif

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配置部分建议看苹果官方文档,后续实际开发再补充。

此文仅供学习交流,转载请注明出处!

iOS App Clips学习笔记:https://www.yangshebing.com/2020/07/12/iOS-App-Clips%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/

iOS App Clips学习笔记相关推荐

  1. 高性能Cordova App开发学习笔记

    高性能Cordova App开发学习笔记 文件结构 添加插件 构建准备 各个www的作用,prepare命令会将hello\www的内容会拷贝到platform下的wwww目录,知道该改哪里了吧?如果 ...

  2. iOS开发的学习笔记

    引言 之前做过半年的iOS开发,从完全不懂的移动开发的菜鸟,到完成前端UI开发的菜鸟,做的一些笔记,希望对大家有用,也希望这些总结的东西对以后会有作用. 开发环境 iOS的系统框架分为四个层次: 核心 ...

  3. iOS Code Signing 学习笔记转写

    最近看了objc.io上第17期中的文章 <Inside Code Signing> 对应的中文翻译版 <代码签名探析> ,受益颇深,对iOS代码签名机制有了进一步的认识.想了 ...

  4. Matlab App Designer 学习笔记

    提示:本文的学习视频来自B站小刘老师的教程 链接:https://www.bilibili.com/video/BV16f4y147x9?from=search&seid=2070258926 ...

  5. MATLAB学习(一)——APP的学习笔记

    1.写在前面 这是一篇MATLAB学习笔记,不断更新. 2.MATLAB基本操作 2.1 函数 Disp函数:打印算子 示例: Disp(pathname) Class函数: 功能:判断数值的类型: ...

  6. iOS初级开发学习笔记:APP生命周期的学习总结

    我们平常使用APP时,一般人都会知道有:简单的正在使用状态:通过home键等方式离开应用,但是不关闭应用,即后台状态:以及调出后台程序管理后向上滑动将应用"杀死",三种状态.而我们 ...

  7. SAP CDS 开发和Fiori App生成学习笔记

    SAP CDS开发环境 Install ABAP Development Tools (ADT) and abapGit Plugin | Tutorials for SAP Developers C ...

  8. iOS初级开发学习笔记:微信充值

    相关教程:微信支付开发流程 一直到设置URL Scheme,均按照步骤进行.下面的内容将作为笔记着重介绍: 注册APPID步骤1-3: 在AppDelegate.m中 1.导入#import &quo ...

  9. 混合app开发学习笔记

    什么是混合移动App开发[重点] 苹果上的软件是如何开发出来的:使用的是 OC.或者使用Swift这门语言 安卓平台上的软件又是如何开发出来的:使用安卓相关的语言开发的,Java,安卓的控件进行开发 ...

最新文章

  1. oracle10g自带的公共同义词,10g ALL_SYNONYMS同义词查询性能下降
  2. 将一个数组拆分为若干个相等数组
  3. java课程设计拼图_基于Java拼图游戏的设计与实现(含录像)
  4. [转]Log4Net五步走
  5. VALSE学习(十七):VALSE 2019报告总结
  6. 怎么查看计算机办公软件版本的,怎样查看电脑用的什么办公软件
  7. 读《明朝那些事》有感
  8. 【书影观后感 八】《周期》万事皆周期
  9. 第一次使用CSDN写博客
  10. 易宝典——玩转O365中的EXO服务 之四十九 如何知道管理员进行了哪些操作
  11. EXCEL中把文本数据转化成数字数据
  12. mxgraph vue 简陋编辑器
  13. 0.45秒!以太坊平均网络传输时间又双叒叕缩短了;以太坊全球节点分布覆盖英国、法国及德国...
  14. Linux字体关联到wine中,Wine的中文显示与字体设置
  15. linux基本功系列之-rpm命令实战
  16. MVS-Texturing 相关背景知识与论文总结
  17. 实现跨越多个云的无缝云数据管理
  18. Python+Appium移动端自动化测试框架实现
  19. 开发常用英文[update]
  20. 深圳Java学习:小白速懂Https协议

热门文章

  1. 【安卓开发系列 -- 开发环境】Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具)
  2. 线性变换的矩阵表示式
  3. svg中 path标签的d属性
  4. 开放平台设计之接口签名认证
  5. Spring Boot 3.0.0-M1 Reference Documentation(Spring Boot中文参考文档)-附录A-C
  6. 比较好用的服务器和网站在线测速工具分享
  7. java实现OCR图文识别Tess4j,高准确率高效率
  8. OCAD应用:单透镜与双胶合透镜结构组合设计
  9. 视频:插入U盘后Win7系统蓝屏,报iusb3xhc.sys
  10. 基于Nginx实现访问控制,连接限制离