Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS14新特性探索之一:App Clips轻应用

iOS14新特性探索之一:App Clips轻应用

作者头像
珲少
发布于 2020-07-03 02:34:43
发布于 2020-07-03 02:34:43
2.8K00
代码可运行
举报
文章被收录于专栏:一“技”之长一“技”之长
运行总次数:0
代码可运行

iOS14新特性探索之一:App Clips轻应用

        App Clips是苹果WWDC 2020所发布的iOS 14新特性中最具焦点的一项功能。一经曝光,就引发了互联网上针对其特性的各种讨论。有人说App Clips是苹果模仿微信退出的iOS平台的小程序;有人说它是轻量级的应用程序,为用户提供了简洁版的App体验;同样,对AppClips的评价也是众说纷纭,有人看好也有人看跌,有人觉得是新的平台也有人觉得非常鸡肋。

       无论如何,AppClips都是Apple给iPhone用户提供了一种新的交互方式和新的应用使用体验,作为开发者,我们更需要做的是了解这样一种新的技术的应用,并将其赋能到我们的产品中,为用户提供更好的使用体验,为产品带来更大的价值。

        本篇博客,也是基于这样的想法,将全面的介绍App Clips的应用与开发细节,帮助大家最快的了解与上手这样一种技术。我在编写本篇博客时,使用的依然是iOS14的bate版本,开发工具Xcode的版本也是12.0Bate版本,因此,不能保证后续Apple不会对App Clips的某些特性进行优化修改。如果你在之后很久的某个时间阅读到本篇博客,请有选择的借鉴与吸收。

1. 关于App Clips

        App Clips用中文如何翻译,一直没有找到合适的词汇。可以叫他应用切片,也可以叫它轻应用,更可以称它为小程序,这些称呼好像都合适又好像都插那么一点感觉,我们不如就叫它App Clips好了。

       开发一个App Clips的目的是提供你的App中的部分功能让用户可以快速使用,并且不需要下载完整的App。这句话有两个非常重要的点,首先App Clip提供完整应用程序的一部分功能,这表明你一定要有一个完整功能的App,才可以开发上线App Clips,与iOS开发中其他的Extension类似,App Clip也可以理解为一种Extension,其必须由一个宿主App来承载。

       一个App Clip也可以理解为是某个App的轻量级版本,用来提供一些完成瞬时的任务的功能,例如为一杯咖啡进行支付、使用店铺提供的优惠券、公共的信息查询等等。

      App Clip的启动需要由一个调用方调起,在iOS开发中,更专业点的术语叫invocationinvocation可以是多种形态的,例如通过点击基于位置信息的推荐Banner,点击Sari的推荐或者通过扫描二维码或NFC等。App Clip被invocation调起后,用户可以通过它完成一件专注的任务,当用户不再需要使用它时,它会自动的被iPhone移除,这个过程对用户来说是无感知的,因此App Clip也不会占用用户的桌面空间。

2. 开发App Clip前的准备

        在开发App Clip前,你首先需要明确一个核心原则:

        App Clips技术一定要用在帮助用户方便启动并快速完成特定任务。

       这个原则非常重要,它是App Clips被提供使用的初衷,如果你提供的App Clip非常庞大且操作复杂,那不仅无法丧失了App Clip具有的“快速”优势,而且也会让用户产生困扰,造成糟糕的用户体验。换句话说,App Clips应该是“随用随走”的,即在用户需要使用时快速启动,再用户使用完成后也立刻消失。

       在开发过程中,开发一款App Clip与开发正常的iOS应用并没有特别大的差异,它与开发普通iOS应用有着相关的Framework支持,例如使用UIKit开发应用的界面。同样,App Clips也可以像完整App一样的使用设备的硬件(当然需要申请对应的权限),例如使用相机、蓝牙等等。还有一点需要注意,一个完整的App只能拥有一个App Clip,并且App Clip提供的功能在主App中也需要被完整的支持才行。

        前面说过,App Clip的启动需要由invocation来触发,invocation包括如下5中场景:

  • 通过NFC扫描来唤起
  • 通过点击Sari提供的基于地理位置的推荐
  • 在地图App上点击指定的链接
  • 点击网页上的智能推荐横幅
  • 通过Messages App分享的链接

唤起一个App Clip的过程如下图所示(来自Apple官方文档)

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

        了解了App Clips的启动过程,我们知道实际上在启动App Clip之前,系统会先弹出一个预览卡片,这个卡片上的信息可以由开发者在iTunes Connect上自行定义。

        在着手开发App Clips之前,还有一些事情我们需要考虑。

A.  提供畅快的用户体验

        App Clips不会像通常的App那样展示一个图标在主屏幕上,用户不需要对App Clips进行管理,不用下载也无需删除,当指定的App Clip一段时间不活跃后,系统会自动对它们进行清除。因此,官方建议,App Clips提供的功能应该是线性的,让用户一次性的完成任务。

B. App Clips需要足够小巧

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

C. 检查可用的框架

      在开发之前,首先要确认下App Clips可用的框架,大部分主App可用的框架在App Clips中都可以使用,但并不是所有,CallKit, CareKit, CloudKit, HealthKit, HomeKit, ResearchKit, SensorKit, 和 Speech在App Clips中是不被支持的。

D. 保护用户隐私

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

E. 思考主App的哪些功能是适合在App Clip提供的

      App Clips提供瞬时的应用体验,因此更多时候,在开发App Clips之前,你最先应该思考的是主App上的哪些功能是适合在App Clips上提供的。这需要从产品角度深度的思考,并真实的站在用户的角度体验。

3. 创建一个App Clip程序

        前面讲了很多开发App Clips前的准备,现在就让我们上手创建一个App Clip体验一下。创建App Clip非常简单,首先其需要一个宿主App,如果为已经存在的一个完全应用程序添加App Clip,就更加容易,我们只需要新建一个Target,选择App Clip即可,如下图所示:

新建了App Clip的Target后,Xcode会自动的帮我们创建好一系列必须的文件,并做好配置。这时,直接运行target对应的scheme即可在模拟器或真机上运行App Clip做测试,当前,如果你运行会出现一个空白的页面,这是因为我们还没有编写任何代码。

        前面说过,App Clip的运行需要invocation进行调用,对于invocation的调用,如果用户安装了完全的主App,则会唤起主App来处理用户任务,如果用户没有安装主App,则自动调起App Clip。无论通过哪种invocation来调起App Clip,我们都需要在App Clip的target中配置指定的域权限。在target工程的设置页面,找到Associated Domains选项,在其中添加要调起App Clip的域名,需要找到这样的格式:appclips:xxx.com。这种配置方式与Deep link的逻辑基本一致。

下面,我们可以尝试向App Clip工程中添加一些代码。观察App Clip的工程目录结构,可以发现,其和正常的App几乎没有什么差异。如下图所示:

我们简单的在ViewController中添加一些代码,例如点击屏幕后,随机改变界面的颜色,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self changeColor];
}

- (void)changeColor {
    self.view.backgroundColor = [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1];
}

@end

在开发App Clips时,我们应该尽量的让主App的代码与App Clips需要使用的代码共享,共享代码非常容易,将可以共享的代码保证在静态库或动态库内即可。有时候,你可能需要在共享的代码中区分环境,比如某些代码只在target环境下被编译,某些则只在主App环境下被编译。可以为target添加一个特殊的编译宏来区分环境,Objective-C的工程,这个编译选项需要在Build Settings的Preprocessor Macros选项下进行配置,Swift的工程则需要在Active Compilation Conditions选项下进行配置,例如我们为target工程添加一个CLIP的编译宏,如下图所示:

之后,在编写代码时,对于针对target的代码,就可以将其通过条件编译区分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
#ifdef CLIP
    self.view.backgroundColor = [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1];
#endif
}

对于发布App Clips的程序,还有一点需要注意,在系统弹出预览卡片之前,首先会先通过invocation关联的URL对App Clip进行校验,如果校验不成功,则不会弹出预览卡片也不会打开App Clip程序。要成功进行验证,除了在Xcode工程中配置正确的Associated Domains外,还需要对我们的Web服务做一些修改。需要在服务器添加Apple App Site Association文件,并且添加上类似如下的配置来支持App Clips:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "appclips": {
        "apps": ["ABCED12345.com.example.MyApp.Clip"]
    }
    ...
} 

4. 测试App Clips的启动

      虽然App Clips的启动需要由invocation触发,但是在开发过程中,我们依然有方法来模拟Web发出的invocation来启动App Clip。编辑在App Clip对应的scheme,在其中添加 _XCAppClipURL这个键值来配置模拟从某个URL调起App Clips,如下图所示:

当App Clip被调起后,我们可以通过一些回调方法来拿到URL信息,根据不同的信息,可以将不同的功能线展示给用户进行使用。以UIKit工程为例,当App Clip被调起时,会调用如下方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity {
    NSLog(@"%@", userActivity);
}

在UNUserAvtivity对象中可以获取到传递的URL等信息。如果你的App Clip是可以被特殊的地理位置触发的,那么需要在Clip对应target的info.plist中添加 NSAppClip键,并将其中的 NSAppClipRequestLocationConfirmation键设置为YES。

5. 配置预览卡片

        在真正的启动App Clip之前,首先会弹出预览卡片。在提交App Clip时,是跟宿主App一起打包上传到App Store Connect上的,App Clip的预览卡片配置也是在App Store Connect上完成,提供给开发者自由配置的地方并不多,包括3个方面:

  1. 配置一个头图
  2. 配置副标题并提供描述文案
  3. 配置交互按钮

6. 关于数据共享

        App Clips的和宿主App的数据共享并没有什么特殊的地方,其和普通Extension Target与宿主App通信的方式一样,只要创建一个App Group,并将App Clips与宿主App放入同一个App Group中,之后就可以通过NSUserDefault来进行数据的共享。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
探索 App Clips
在iOS14中苹果推出了很多新特性,其中就包含App Clips。App Clips类似微信的小程序,不需要显式的去App Store里下载,苹果会在对应的时机进行下载。App Clips可以在不打开主App的情况下,单独进行使用,交互操作和主App无异,例如登录、列表视图、支付等。
ios-lan
2020/10/14
2K0
App Clips —— 轻应用码的开发
把Environment Variabless中_XCAppClipURL前面勾选中,然后把后面Value中https://example.com改为自己的链接地址,然后Close,选中真机,前面选择Clip的target,运行一次。然后可以尝试扫描自己生成轻应用码,看是否可以触发。
莫空9081
2021/02/18
1.4K0
苹果小程序App Clips技术解析和展望
北京时间2020年6月23日,苹果在一年一度的WWDC上正式宣布了苹果官方“小程序” App Clips。本文带你来了解App Clips,分析其优缺点,并对前景做展望。
nimomeng
2020/07/02
2.4K0
iOS9新特性——堆叠视图UIStackView
        随着autolayout的推广开来,更多的app开始使用自动布局的方式来构建自己的UI系统,autolayout配合storyBoard和一些第三方的框架,对于创建约束来说,已经十分方便,但是对于一些动态的线性布局的视图,我们需要手动添加的约束不仅非常多,而且如果我们需要插入或者移除其中的一些UI元素的时候,我们又要做大量的修改约束的工作,UIStackView正好可以解决这样的问题。
珲少
2018/08/15
2.5K0
iOS9新特性——堆叠视图UIStackView
iOS14新特性探索之二:App Widget小组件应用
        iOS 14除了引入了亮眼的App Clips功能外。还有一个也非常惹争议的功能就是App Widget。App Widget可以理解为小组件,在非常早的Android版本中就有了Widget的概念,应用开发者可以为系统开发自己应用相契合的Widget来让用户更加方便的使用应用提供的功能。例如Android早期系统中非常常见的钟表时间组件、快捷设置组件等。用户可以将这些小组件根据自己的喜好放在屏幕的指定位置。从这点看,iOS 14提供的App Widget功能的确不能算是一种创新,最多算是一种增强。
珲少
2020/07/14
5.4K0
iOS14新特性探索之二:App Widget小组件应用
用APICloud开发iOS App Clip(苹果小程序)详细教程
App Clip是苹果公司在WWDC20开发者大会上发布的新功能,用户可以只访问应用程序的一小部分,而无需下载整个应用,被称为苹果小程序。本文主要介绍如何通过APICloud开发App Clip。
APICloud官方
2021/01/25
1.6K0
用APICloud开发iOS App Clip(苹果小程序)详细教程
iOS录屏框架ReplayKit的应用总结
ReplayKit是iOS自带的一个屏幕录制的框架,其支持应用程序对当前应用内页面进行录屏,并将最终的视频保存到系统相册中。ReplayKit在iOS 9之后引入,其接口简介,可以非常方便的为应用添加录屏功能。需要注意,在某些iOS 12系统上,开启录屏可能会失败(通常需要重启设备解决)。
珲少
2020/05/13
3.5K0
iOS动画-CALayer隐式动画原理与特性
Core Animation的一个非常显著的特性是就是实现动画,而且它支持隐式动画和显式动画两种形式,本篇我们主要从隐式动画说起;
梧雨北辰
2019/04/25
4.8K0
iOS动画-CALayer隐式动画原理与特性
iOS流布局UICollectionView系列四——自定义FlowLayout进行瀑布流布局
        前几篇博客从UICollectionView的基础应用到设置UICollectionViewFlowLayout更加灵活的进行布局,但都限制在系统为我们准备好的布局框架中,还是有一些局限性,例如,如果我要进行瀑布流似的不定高布局,前面的方法就很难满足我们的需求了,如下:
珲少
2018/08/15
3.2K0
iOS流布局UICollectionView系列四——自定义FlowLayout进行瀑布流布局
iOS9的新特性3D-Touch
Apple在iphone6s中推出了的新特性:3D-Touch,由于相关的文档还比较少,我在学习中总结了一下可能有用的功能点。 1. 什么是3D-Touch 虽然Force Touch和3Dtouch依赖的是同种技术,也都基于苹果的Taptic引擎,但3D Touch多了重按,且触摸屏对压力更加敏感。 简而言之: (Peek and Pop): 在App中用户可以使用3D-Touch来提前预览App /网页的下级页面 /在地图上预览地址连接 (Home Screen Quick Action): 在Ho
腾讯大数据
2018/01/26
9150
iOS开发中标签控制器的使用——UITabBarController
        与导航控制器相类似,标签控制器也是用于管理视图控制器的一个UI控件,在其内部封装了一个标签栏,与导航不同的是,导航的管理方式是纵向的,采用push与pop切换控制器,标签的管理是横向的,通过标签的切换来改变控制器,一般我们习惯将tabBar作为应用程序的根视图控制器,在其中添加导航,导航中在对ViewController进行管理。
珲少
2018/08/15
2K0
iOS开发中标签控制器的使用——UITabBarController
iOS流布局UICollectionView系列一——初识与简单使用UICollectionView
        UICollectionView是iOS6之后引入的一个新的UI控件,它和UITableView有着诸多的相似之处,其中许多代理方法都十分类似。简单来说,UICollectionView是比UITbleView更加强大的一个UI控件,有如下几个方面:
珲少
2018/08/16
3.6K0
iOS流布局UICollectionView系列一——初识与简单使用UICollectionView
iOS中Today扩展插件与宿主APP的交互 原
        扩展是iOS8后系统开发给开发者的新开发思路与接口,每一个扩展都可以理解为一个简单的小应用程序,只是其不是独立存在的,要寄附于某一个主应用上。介绍iOS8扩展与Today插件的专题见如下博客:
珲少
2018/08/15
1.7K0
iOS中Today扩展插件与宿主APP的交互
                                                                            原
创建一个苹果小程序 App Clip 你该知道哪些事
在 Xcode 工程中,你可以为你的 App 添加一个 app clip target, 利用 Xcode ,app clip 可以与你的 app 共享代码与资源,并可以编译,调试,运行在真机或者模拟器环境。但是,在实际使用过程中,开发者必须在自己的服务器上做好验证 app clip 的有效性的措施。
HelloWorld杰少
2022/08/04
6500
创建一个苹果小程序 App Clip 你该知道哪些事
iOS流布局UICollectionView系列六——将布局从平面应用到空间
        前面,我们将布局由线性的瀑布流布局扩展到了圆环布局,这使我们使用UICollectionView的布局思路大大迈进了一步,这次,我们玩的更加炫一些,想办法将布局应用的空间,你是否还记得,在管理布局的item的具体属性的类UICollectionViewLayoutAttributrs类中,有transform3D这个属性,通过这个属性的设置,我们真的可以在空间的坐标系中进行布局设计。iOS系统的控件中,也并非没有这样的先例,UIPickerView就是很好的一个实例,这篇博客,我们就通过使用UICollectionView实现一个类似系统的UIPickerView的布局视图,来体会UICollectionView在3D控件布局的魅力。系统的pickerView效果如下:
珲少
2018/08/15
1.5K0
iOS流布局UICollectionView系列六——将布局从平面应用到空间
六天完成一个简单iOS App - 第一天
项目介绍 仿照百思不得姐,通过看李明杰老师视频学习自己实践并简单总结项目开发过程中普遍遇到的问题,并且将可以用到其他项目中的分类方法进行简单总结,便于以后在别的项目中使用。 每天任务 1. 实现相应功能 2. 代码重构,简单优化 第一天任务: 配置项目基本环境 搭建框架 代码重构 配置项目基本环境 一. 接口获取 我们可以通过Charles等工具抓包来获取我们想做的App的接口,然后通过解析将每个接口的数据解析出来。也可以去知乎中有趣的 API 接口推荐找找看。 二. 项目图片获取方式 图片的获
xx_Cc
2018/05/10
1.2K0
iOS14中的PHPicker
iOS 14 中系统新增了一个图片选择器 PHPicker,官方建议使用 PHPicker 来替代原有的 API 进行图片选择,下面我们来看看 PHPicker 的优点:
ios-lan
2020/10/16
3.8K1
iOS流布局UICollectionView系列七——三维中的球型布局
        通过6篇的博客,从平面上最简单的规则摆放的布局,到不规则的瀑布流布局,再到平面中的圆环布局,我们突破了线性布局的局限,在后面,我们将布局扩展到了空间,在Z轴上进行了平移,我们实现了一个类似UIPickerView的布局模型,其实我们还可以再进一步,类比于平面布局,picKerView只是线性排列布局在空间上的旋转与平移,这次,我们更加充分了利用一下空间的尺寸,来设计一个圆球的布局模型。以下是前几篇博客地址:
珲少
2018/08/16
1.5K0
iOS流布局UICollectionView系列七——三维中的球型布局
iOS流布局UICollectionView系列三——使用FlowLayout进行更灵活布局
        前面的博客介绍了UICollectionView的相关方法和其协议中的方法,但对布局的管理类UICollectionViewFlowLayout没有着重探讨,这篇博客介绍关于布局的相关设置和属性方法。
珲少
2018/08/16
2.1K0
iOS流布局UICollectionView系列三——使用FlowLayout进行更灵活布局
如何开发一个优秀的 App Clip
App clip 是 App 应用程序的轻量级版本,可在用户需要的位置和时间提供某些功能。在 Xcode 中, App clip 是和你主应用程序共享代码和资源的附加 Target。App clip 还可以访问和 App 相同的 frameworks。例如,您的 App clip 可以请求访问摄像头,将敏感数据存储在本地钥匙串中,连接到蓝牙设备等等。但是,在保护用户隐私和保留资源的前提下,App clip 也有一定的局限性。
HelloWorld杰少
2022/08/04
1K0
如何开发一个优秀的 App Clip
推荐阅读
相关推荐
探索 App Clips
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验