APPClip实践

作者: o翻滚的牛宝宝o | 来源:发表于2020-09-01 14:04 被阅读0次

    APPClip实践

    背景

    距离上次开发者大会已经过去几个月了,网上课参考的资料也多了起来,iOS14的适配也已经基本完成验证,乘着项目周期间隙,终于可以研究一下新特性了。今天我们就来试试这个APPClip.

    简介

    App Clip是一种很好的让用户快速访问并体验你的App提供了什么内容的方式。App Clip是App的一部分,在需要的时候就可以找到它。App Clip很快也很轻,用户可以很快打开它们。当用户从这个饭馆点了外卖、租了一个滑板车或是第一次设置一个新连接上的设备,可以在短短几秒内开始并完成使用App的体验。当他们完成之后,用户就有机会下载你的App了。

    上面这个是官方简介,看到这个就想起了微信小程序。没错,就是和微信小程序的功能一样,不过是用原生语言开发,对iOS开发者更加友好。后面还提到了APPClip码、NFC、二维码等使用场景,这让我想起了刷地铁卡的经历,可能之后可以在锁屏的情况下使用吧,人机交互会比微信更加便捷。

    当然和原生比也有很多限制,比如大小10M等,这个就对开发者的要求变高了,现在随便个APP就要50多M..也就是说APPClip是原APP阉割版,功能更精简。

    实践环境

    开发开发工具:XCode 12Beta1(公司网络限制,下载新的太慢)

    手机:iphonex(iOS14 beta6)

    开始实践

    首先新建一个工程,创建一个APPClip target。这步比较简单,步骤略过。

    建好后我发现多了一个SceneDelegate.m

    SceneDelegate.png

    原来从xcode11开始,Appdelegate的一些功能分给了SceneDelegate,使用起来和原来的Appdelegate差不多。老项目需要新增SceneDelegate的话可以通过修改fileInfo.plist实现。

    新增SceneDelegate.png

    增SceneDelegate.png)

    cocoapods测试

    cocoapods是常用的依赖管理工具,新建target自然也要测试一下cocoapods是否支持AppClip。正常pod install。

    cocoapods.png

    没有报错,基本库私有库依赖都成功引用,完美。但是一运行就崩溃,报错是动态库找不到。打开包一看,动态库的frameWorks没有正常复制到包中。
    [图片上传失败...(image-16c423-1598940228407)]

    [图片上传失败...(image-6ed574-1598940228407)]

    因为我们的私有库中依赖动态库,可能cocoapods对appclip还没适配吧,复制脚本不对(目前是1.9.3版本)去官网查看,果然有Beta版本。

    cocoapods官网.png

    升级到1.10.0.beta.2后,在尝试一下instal,能正常找到framework了。

    pod正常.png

    顺便看了下包大小13M。。引入基础依赖就超10M了。。用APPclip实现原本项目APP任重而道远啊。

    环境配置

    正常的APPClip启动是通过链接的方式打开的,然后配置文件需要放在服务器上,并且进行关联。但是作为开发者,xCode提供了一个很便捷的功能,在run的环境变量中配置参数就可以模拟用户点击链接。这样就不用麻烦服务器的同学,进行本地测试了。

    环境配置.png

    启动测试

    由于APPClip和原生APP共用一套代码,那么久需要区分是从APP远程进来的还是用APPClip进来的。通过测试原生启动和APPClip启动都会调用SceneDelegate中的以下方法

    启动.png

    那么能区别的参数就是(UISceneConnectionOptions *)connectionOptions了。

    将两次进入的时候po出来做对比

    原APP

    原生.png

    APPClip

    APPClip.png

    结果很明显了,那么怎么获得刚才设置的链接呢?毕竟还需要通过链接跳转到不同的页面。经过尝试,最终找到了链接。方法如下:

    链接.png url.png

    代码层面的区别

    上面说了启动的跳转方案,那么现在再讨论下代码层面如何区别。因为是2个target,有经验的同学应该都能想到Apple Clang - preprocessing
    ,自己手动加个标志就可以了。

    APPClip宏.png
    #ifdef APPClip
    // 可以在App Clip中使用的代码
    #else
    // 不想在App Clip中使用的代码
    #endif
    

    本地数据共享

    APPClip和远程APP的使用还有个关键点,那就是本地数据共享。当然通过服务器共享是比较方便的。一般本地数据共享有这么几个方法:

    • 沙盒缓存共享
    • 钥匙串共享

    但是APPClip和原生APP的BundleId不一样,是否可以通过上述方式共享呢?先测试下第一种沙盒模式

    沙盒数据共享测试

    首先就是获取沙盒地址,APPClip类似于小程序,在桌面没有应用,那么是否有沙盒呢?


    本地沙盒.png

    令我震惊的是,居然获取到了沙盒地址。。然后再测试下存文件,新建一个文件夹测试。

    新建文件夹.png

    结果是建成功了,并且使用也是正常。那么这个沙盒和原APP是用同一个吗?这边又将相同的代码赋值到从原生APP进来进行测试,并不能获取到APPClip中创建的文件夹,因此沙盒是分开存储的。


    获取沙盒.png

    查了下资料,要使用共享容器进行数据交互,另外要是串只能和原本APP交互。这个需要配置证书,和widget一样使用,具体方法网上很多,这里就不再叙述了。

    共享容器.png

    总结

    总的来说,APPClip类似小程序,对原生开发者来说,没有语言上的门槛,还是很友好的。但是是否能普及还是有很大的疑问,毕竟在国内微信小程序已经培养了用户习惯,店家也不会无故增加成本做相同的东西。但是从技术的角度来说,还是有备无患才好。

    相关文章

      网友评论

        本文标题:APPClip实践

        本文链接:https://www.haomeiwen.com/subject/yllvsktx.html