开发|刚上线的苹果「小程序」得这么做

在2020年6月23日的WWDC大会中 , 苹果预告了AppClips 。
AppClip(官方翻译:轻App;民间翻译:「苹果」小程序) , 是主app轻量级的版本 , 旨在在特定场景为用户提供快速便捷的体验 。
如果你在上班路上经过一家咖啡店想购买一杯咖啡 , 但发现排队下单付款的人很多 , 此刻你只需要使用iPhone自带的扫码工具扫描咖啡商店的AppClip二维码或NFC标签 , 就可以购买一杯咖啡 , 无需下载安装咖啡商店的app 。
开发|刚上线的苹果「小程序」得这么做
文章图片
图片来源:苹果官网
这应用场景听起来是不是跟微信小程序很像?
是的 , 于是我们在AppClips发布后就立刻进行了AppClips和微信小程序的对比和实操 。
我们发现 , AppClips和微信小程序的存在都是为了解决同一个问题 。 但就开发而言 , AppClips和微信小程序亦存在着方向上的差异 。
微信小程序是0到0.1再到1.0 。 开发者为提供一个服务 , 从头开始开发小程序 , 用户用完即走 , 体验很棒 。 AppClips则是从1.0到0.1 , 是对现有app的一种改良 , 因此在开发上遇到的麻烦反而会少一些 。
下面 , 我们就针对AppClip几个重要特性进行详细说明 , 并以AppClipdemo为例 , 讲一讲开发的那些事 。 无论你是基于实际业务需要 , 或者学习、探索新事物的需求 , 只要具备一定的开发基础 , 通过本教程 , 也能轻松搞定一个AppClip 。
AppClip的技术限制
AppClip仅限应用于特定场景 , 即尽可能快地完成一个任务 , 即用即走 。 你可以把它看作主app的核心功能应用 , 对于复杂的任务应该在其对应的主app完成 , 因此某些功能被禁止在AppClip中使用 。
安装包大小10M以内
当弹出AppClipCard时会立即下载AppClip , 安装包大小的限制保证了用户体验——当用户打开AppClip时大概率已经下载好 。
不能使用指定Framework
AssetsLibrary,CallKit,CareKit,CloudKit,Contacts,ContactsUI,CoreMotion,FileProvider,FileProviderUI,HealthKit,HomeKit,Media,Player,Messages,MessageUI,PhotoKit,ResearchKit,SensorKit,Speech
以上Framework不能在AppClip使用 , 若使用了在编译时不会报错 , 而是在运行时报错或者返回错误的结果 。
与用户隐私相关操作
1.
不能跟踪用户信息 , 也不能通过identifierForVendor来获取用户唯一标识 。
2.
不能持续地获取用户位置 , 每次使用位置需要请求用户授权 , 次日凌晨4:00 , 会自动关闭授权 。 再次使用位置时 , 需要用户重新授权 。
3.
只允许AppClip和其对应的主app通信 , 不允许和其他app进行通信 , 这就导致微信登录分享支付等功能在AppClip里使用不了 。
4.
不能访问苹果音乐、多媒体 , 通讯录 , 文件 , 运动健康 , 相册等数据 。
其他复杂任务
1.
后台活动:网络请求、位置更新等
2.
蓝牙连接
3.
Appextensions
4.
URLschemes
5.
内购(In-apppurchases)(区别苹果支付ApplePay , 在AppClip是能够使用苹果支付的)
AppClips的消息推送
微信小程序不能通过Push的方式触达用户曾让开发者忧心忡忡 。 而手机厂商推出的系统级应用在这方便可以给开发者更多的底气 , 不管是苹果的AppClips还是国产手机生态的快应用 , 服务的消息推送能力都是吸引开发者的重要能力 。
消息推送在AppClip的应用分两种场景:短时间内推送和长时间内的推送 。 (官方文档:https://developer.apple.com/documentation/app_clips/enabling_notifications_in_app_clips)
短时间内推送
用户在启动AppClip后 , 8小时内可以收到消息推送 。 比如用户在AppClip购买了一杯咖啡后就退出了AppClip , 当咖啡准备好了 , 用户就会收到一个「咖啡已准备好」的推送 。 这方式只需要在Info.plist属性文件中添加NSAppClipKey , 并将NSAppClipRequestEphemeralUserNotification设置为true , 就能默认获取消息推送的权限 。
长时间内推送
用户在AppClip完成一个任务后 , 可能过了几天才会收到推送 。 比如用户在AppClip租了辆车 , 租期为3天 , 到期后会用户收到「该还车了」的推送 。 这种方式和普通app的消息推送一样 , 都需要获取用户的推送授权 。
使用知晓云MinCloud创建一个AppClip
接下来将演示如何使用知晓云MinCloud快速创建一个动态数据服务的AppClip 。 该Clip主要展示了一个产品列表 , 点击产品即可跳转到产品详情页 。 通过集成MinCloud从知晓云获取产品信息 , 最后为该Clip生成一个二维码 , 用户只需使用iOS14的扫码工具扫描二维码 , 即可跳转到Clip 。
创建AppClipTarget
在已存在的SugarDemo工程创建一个AppClipTarget , 并命名为SugarClip 。
开发|刚上线的苹果「小程序」得这么做
文章图片
开发|刚上线的苹果「小程序」得这么做
文章图片
这时在工程目录中多了个SugarClip目录 , 接下来我们就可以在这里实现AppClip了 。
开发|刚上线的苹果「小程序」得这么做
文章图片
导入MinCloud
通过CocoaPods集成MinCloud , 打开Podfile文件 , 添加以下内容:
platform:ios,'11.0'target'SugarClip'douse_frameworks!pod'MinCloud',:git=>'https://github.com/ifanrx/hydrogen-ios-sdk.git'pod'Moya','~>13.0'pod'SnapKit'pod'Kingfisher'endtarget'SugarDemo'douse_frameworks!pod'MinCloud',:git=>'https://github.com/ifanrx/hydrogen-ios-sdk.git'pod'SnapKit'pod'Kingfisher'end
添加完后 , 执行podinstall安装 。
安装好MinCloud后在工程中导入MinCloud , 打开SugarClip的AppDelegate.swift文件 , 在文件顶部添加importMinCloud , 并在application(_:didFinishLaunchingWithOptions:)方法内添加:
【开发|刚上线的苹果「小程序」得这么做】funcapplication(_application:UIApplication,didFinishLaunchingWithOptionslaunchOptions:[UIApplication.LaunchOptionsKey:Any]?)->Bool{//Overridepointforcustomizationafterapplicationlaunch.BaaS.register(clientID:''fdc4feb5403a985fe681'')//注册clientidBaaS.isDebug=true//是否打印日志returntrue}
获取产品数据
Product结构
首先创建一个Product结构 , 用于表示产品信息 。
structProduct:Decodable{publicvarid:String//产品idpublicvarname:String?//产品名称publicvarparticipantCount:Int?//参与讨论人数publicvarcoverImage:String?//封面图publicvarrating:Double?//产品评分publicvarbrief:String?//产品简介publicvardescription:String?//产品描述}
获取产品列表
funcloadProductList(){lettable=Table(tableId:''105766'')table.find{[weakself](recordList,error)inifletlist:List=recordList?.listInfo.decoded(){self?.products=list.objectsself?.tableView.reloadData()//刷新产品列表}}}
Table对应MinCloud的表结构 , 通过表id就可以操作对应表数据 。 使用find操作来获取产品表所有产品记录 , 获取产品记录后 , 将其解码为List对象 。
获取产品详情
funcloadProduct(){lettable=Table(tableId:''105766'')table.get(productId){[weakself](record,error)inifletproduct:Product=record?.recordInfo.decoded(){self?.product=productself?.displaySubviews()//展示产品详细信息}}}
使用get操作指定产品的id获取产品的所有信息 , 获取产品记录后 , 将其解码为Product对象 。
产品页面
在项目中创建了ProductCell、RatingLabel、BriefView等视图控件 , 分别显示产品列表项、产品评分、产品简介等信息 。 而这些控件可以在主App和AppClip复用 。 因此在SugarDemo目录中创建了需要复用的组件 , 并将对应的文件的TargetMembership中勾选SugarDemo和SugarClip即可复用 。
开发|刚上线的苹果「小程序」得这么做
文章图片
唤醒AppClip
开发完AppClip后 , 我们可以点击SmartappBanner , 扫码二维码或NFC标签 , 点击Siri获取基于位置的建议 , 短信等方式来唤醒(invacation)AppClip 。
在AppClip可以被唤醒之前需要配置LaunchExperience , 即给AppClip配置一个URL和AppClipCard信息 。 在开发阶段可以直接配置LocalExperience或者在testflight上进行配置 。 AppClip准备发布时 , 需要在appstoreconnect上进行配置 。
本文主要介绍LocalExperience方式 , 其他方式可参考苹果开发文档(https://developer.apple.com/documentation/app_clips/testing_your_app_clip_s_launch_experience) 。
1.首先将SugarClip通过Xcode在手机运行起来 。
2.打开手机【设置】-【开发者】-【LocalExperience】-【RegisterLocalExperience】
开发|刚上线的苹果「小程序」得这么做
文章图片
填入URLPREFIX , 打开任何以URLPREFIX为前缀的URL , 都会被当做打开AppClip来处理 。
填入ClipBundleId 。
填入Title、Subtitle , 选择一张图片 , 这些信息将会显示在AppClipCard上 。
3.步骤2的URLPREFIX编码成一个二维码(https://www.qr-code-generator.com/)
4.使用控制面板的二维码扫描器扫描 , 将会弹出AppClipCard 。
开发|刚上线的苹果「小程序」得这么做
文章图片
5.点击查看 , 进入AppClip
开发|刚上线的苹果「小程序」得这么做
文章图片
至此 , 我们已经完成了一个AppClip的开发 , 可以对整个过程做一些总结:
开发难度:
AppClip从技术选型上是面向iOS开发者的 , 对iOS开发者来说 , 开发AppClip可以简单到修改点配置即可发布 。 而如果是小程序开发者想要入坑 , 有两条路可以走:
1.
学习iOS原生开发;
2.
等待跨端的框架适配AppClip 。
挑战:
AppClip现阶段只允许使用SigninwithApple苹果登录、ApplePay苹果支付 , 无法集成微信登录、微信支付等线下服务场景主流的第三方能力 。 这对想要使用AppClip优化线下服务体验来说是个挑战 , 毕竟国内开通了ApplePay的不是多数 。 希望AppClip团队早日推出更好的解法 。
红利:
AppClip体验轻巧优秀 , 开发者可通过AppClip为主体app做一个试玩试用版本 , 让用户快速体验 , 以降低用户安装门槛 , 提高整体转化率 。
通过这篇文章 , 希望你也能高效的开发一个AppClip 。
本文由彭权华、何世友共同完成 。


    推荐阅读