APPClip實(shí)踐

APPClip實(shí)踐

背景

距離上次開發(fā)者大會(huì)已經(jīng)過(guò)去幾個(gè)月了,網(wǎng)上課參考的資料也多了起來(lái),iOS14的適配也已經(jīng)基本完成驗(yàn)證,乘著項(xiàng)目周期間隙,終于可以研究一下新特性了。今天我們就來(lái)試試這個(gè)APPClip.

簡(jiǎn)介

App Clip是一種很好的讓用戶快速訪問(wèn)并體驗(yàn)?zāi)愕腁pp提供了什么內(nèi)容的方式。App Clip是App的一部分,在需要的時(shí)候就可以找到它。App Clip很快也很輕,用戶可以很快打開它們。當(dāng)用戶從這個(gè)飯館點(diǎn)了外賣、租了一個(gè)滑板車或是第一次設(shè)置一個(gè)新連接上的設(shè)備,可以在短短幾秒內(nèi)開始并完成使用App的體驗(yàn)。當(dāng)他們完成之后,用戶就有機(jī)會(huì)下載你的App了。

上面這個(gè)是官方簡(jiǎn)介,看到這個(gè)就想起了微信小程序。沒錯(cuò),就是和微信小程序的功能一樣,不過(guò)是用原生語(yǔ)言開發(fā),對(duì)iOS開發(fā)者更加友好。后面還提到了APPClip碼、NFC、二維碼等使用場(chǎng)景,這讓我想起了刷地鐵卡的經(jīng)歷,可能之后可以在鎖屏的情況下使用吧,人機(jī)交互會(huì)比微信更加便捷。

當(dāng)然和原生比也有很多限制,比如大小10M等,這個(gè)就對(duì)開發(fā)者的要求變高了,現(xiàn)在隨便個(gè)APP就要50多M..也就是說(shuō)APPClip是原APP閹割版,功能更精簡(jiǎn)。

實(shí)踐環(huán)境

開發(fā)開發(fā)工具:XCode 12Beta1(公司網(wǎng)絡(luò)限制,下載新的太慢)

手機(jī):iphonex(iOS14 beta6)

開始實(shí)踐

首先新建一個(gè)工程,創(chuàng)建一個(gè)APPClip target。這步比較簡(jiǎn)單,步驟略過(guò)。

建好后我發(fā)現(xiàn)多了一個(gè)SceneDelegate.m

SceneDelegate.png

原來(lái)從xcode11開始,Appdelegate的一些功能分給了SceneDelegate,使用起來(lái)和原來(lái)的Appdelegate差不多。老項(xiàng)目需要新增SceneDelegate的話可以通過(guò)修改fileInfo.plist實(shí)現(xiàn)。

新增SceneDelegate.png

cocoapods測(cè)試

cocoapods是常用的依賴管理工具,新建target自然也要測(cè)試一下cocoapods是否支持AppClip。正常pod install。

cocoapods.png

沒有報(bào)錯(cuò),基本庫(kù)私有庫(kù)依賴都成功引用,完美。但是一運(yùn)行就崩潰,報(bào)錯(cuò)是動(dòng)態(tài)庫(kù)找不到。打開包一看,動(dòng)態(tài)庫(kù)的frameWorks沒有正常復(fù)制到包中。
[圖片上傳失敗...(image-16c423-1598940228407)]

[圖片上傳失敗...(image-6ed574-1598940228407)]

因?yàn)槲覀兊乃接袔?kù)中依賴動(dòng)態(tài)庫(kù),可能cocoapods對(duì)appclip還沒適配吧,復(fù)制腳本不對(duì)(目前是1.9.3版本)去官網(wǎng)查看,果然有Beta版本。

cocoapods官網(wǎng).png

升級(jí)到1.10.0.beta.2后,在嘗試一下instal,能正常找到framework了。

pod正常.png

順便看了下包大小13M。。引入基礎(chǔ)依賴就超10M了。。用APPclip實(shí)現(xiàn)原本項(xiàng)目APP任重而道遠(yuǎn)啊。

環(huán)境配置

正常的APPClip啟動(dòng)是通過(guò)鏈接的方式打開的,然后配置文件需要放在服務(wù)器上,并且進(jìn)行關(guān)聯(lián)。但是作為開發(fā)者,xCode提供了一個(gè)很便捷的功能,在run的環(huán)境變量中配置參數(shù)就可以模擬用戶點(diǎn)擊鏈接。這樣就不用麻煩服務(wù)器的同學(xué),進(jìn)行本地測(cè)試了。

環(huán)境配置.png

啟動(dòng)測(cè)試

由于APPClip和原生APP共用一套代碼,那么久需要區(qū)分是從APP遠(yuǎn)程進(jìn)來(lái)的還是用APPClip進(jìn)來(lái)的。通過(guò)測(cè)試原生啟動(dòng)和APPClip啟動(dòng)都會(huì)調(diào)用SceneDelegate中的以下方法

啟動(dòng).png

那么能區(qū)別的參數(shù)就是(UISceneConnectionOptions *)connectionOptions了。

將兩次進(jìn)入的時(shí)候po出來(lái)做對(duì)比

原APP

原生.png

APPClip

APPClip.png

結(jié)果很明顯了,那么怎么獲得剛才設(shè)置的鏈接呢?畢竟還需要通過(guò)鏈接跳轉(zhuǎn)到不同的頁(yè)面。經(jīng)過(guò)嘗試,最終找到了鏈接。方法如下:

鏈接.png
url.png

代碼層面的區(qū)別

上面說(shuō)了啟動(dòng)的跳轉(zhuǎn)方案,那么現(xiàn)在再討論下代碼層面如何區(qū)別。因?yàn)槭?個(gè)target,有經(jīng)驗(yàn)的同學(xué)應(yīng)該都能想到Apple Clang - preprocessing
,自己手動(dòng)加個(gè)標(biāo)志就可以了。

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

本地?cái)?shù)據(jù)共享

APPClip和遠(yuǎn)程APP的使用還有個(gè)關(guān)鍵點(diǎn),那就是本地?cái)?shù)據(jù)共享。當(dāng)然通過(guò)服務(wù)器共享是比較方便的。一般本地?cái)?shù)據(jù)共享有這么幾個(gè)方法:

  • 沙盒緩存共享
  • 鑰匙串共享

但是APPClip和原生APP的BundleId不一樣,是否可以通過(guò)上述方式共享呢?先測(cè)試下第一種沙盒模式

沙盒數(shù)據(jù)共享測(cè)試

首先就是獲取沙盒地址,APPClip類似于小程序,在桌面沒有應(yīng)用,那么是否有沙盒呢?


本地沙盒.png

令我震驚的是,居然獲取到了沙盒地址。。然后再測(cè)試下存文件,新建一個(gè)文件夾測(cè)試。

新建文件夾.png

結(jié)果是建成功了,并且使用也是正常。那么這個(gè)沙盒和原APP是用同一個(gè)嗎?這邊又將相同的代碼賦值到從原生APP進(jìn)來(lái)進(jìn)行測(cè)試,并不能獲取到APPClip中創(chuàng)建的文件夾,因此沙盒是分開存儲(chǔ)的。


獲取沙盒.png

查了下資料,要使用共享容器進(jìn)行數(shù)據(jù)交互,另外要是串只能和原本APP交互。這個(gè)需要配置證書,和widget一樣使用,具體方法網(wǎng)上很多,這里就不再敘述了。

共享容器.png

總結(jié)

總的來(lái)說(shuō),APPClip類似小程序,對(duì)原生開發(fā)者來(lái)說(shuō),沒有語(yǔ)言上的門檻,還是很友好的。但是是否能普及還是有很大的疑問(wèn),畢竟在國(guó)內(nèi)微信小程序已經(jīng)培養(yǎng)了用戶習(xí)慣,店家也不會(huì)無(wú)故增加成本做相同的東西。但是從技術(shù)的角度來(lái)說(shuō),還是有備無(wú)患才好。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容