技術(shù):蘋果 App Clips 詳解

蘋果WWDC2020 上發(fā)布了 App Clips,有媒體叫做“蘋果小程序”。雖然 Clips 在產(chǎn)品理念上和微信小程序有相似之處,但是在技術(shù)實(shí)現(xiàn)層面確是截然不同的東西。本文會(huì)針對 Clips 的技術(shù)層面做全面的介紹。

實(shí)現(xiàn)方式:native 代碼、native 框架、native app 一樣的分發(fā)

在實(shí)現(xiàn)上,Clips 和原生的 app 使用一樣的方式。在 UI 框架上同時(shí)支持 UIKit 和 SwiftUI,有些開發(fā)者認(rèn)為只能使用 SwiftUI 開發(fā),這點(diǎn)是錯(cuò)誤的。Clips 的定位和 watch app、app extension 類似,和 app 在同一個(gè) project 里,是一個(gè)單獨(dú)的 target。只是 Clips 并沒有自己的專屬 framework(其實(shí)有一個(gè),但是主要包含的是一些特色 api),使用的框架和 app 一致,可以認(rèn)為是一個(gè)精簡版的原生 App。

Clips 不能單獨(dú)發(fā)布,必須關(guān)聯(lián)一個(gè) app。因此發(fā)布的流程和 app 和一樣的,在 apple connect 上創(chuàng)建一個(gè)版本,和 app 一起提交審核。和 app 在技術(shù)上的最大區(qū)別只是大小限制在 10MB 以內(nèi),因?yàn)?Clips 的基礎(chǔ)就是希望用戶可以最迅速的被用戶使用,如果體積大了就失去了產(chǎn)品的根本。

產(chǎn)品定位:用完即走

蘋果對 Clips 的使用場景非常明確:在一個(gè)特定的情境里,用戶可以快速的使用 app 的核心服務(wù)。是小程序內(nèi)味了!

坦率的說,很難說 Clips 的理念是蘋果原創(chuàng)的,在產(chǎn)品的定位上和微信小程序如出一轍。尤其是微信小程序在國內(nèi)已經(jīng)完全普及了,微信小程序初始發(fā)布的時(shí)候也被蘋果加了多條限制。其中一條就是小程序不能有虛擬商品支付功能?,F(xiàn)在回頭看蘋果自己的 Clips 可以完美支持 apple pay,很難說蘋果沒有私心。

觸手可及

Clips 使用一段 URL 標(biāo)識(shí)自己,格式遵從 universal link。因?yàn)樘O果對 Clips 的使用場景非常明確,所以在 Clips 的調(diào)起方式做了嚴(yán)格限制。Clips 的調(diào)用只能是用戶主動(dòng)要發(fā)起才能訪問,所以不存在用戶在某個(gè) app 里不小心點(diǎn)了一個(gè)按鈕,就跳轉(zhuǎn)下載了 Clips。

Clips 的發(fā)起入口有以下幾種:

  • Safari 中關(guān)聯(lián)了 Clips 的網(wǎng)頁
  • 蘋果消息應(yīng)用
  • Siri 附近建議和蘋果地圖

NFC 和二維碼的入口很容易理解,必須用戶主動(dòng)拿出手機(jī)靠近 NFC、打開相機(jī)掃描。蘋果專屬的 Clips 碼生成工具在年底才會(huì)開放。

Safari 中發(fā)起和之前的 universal link 類似,在網(wǎng)站配置了關(guān)聯(lián)的 Clips 信息后,會(huì)有一個(gè) banner 提示打開應(yīng)用。

因?yàn)?Clips 提交 app store 審核的信息里也會(huì)配置好相關(guān)的 url,因此如果在 message 里發(fā)了 Clips 的鏈接,操作系統(tǒng)也會(huì)在應(yīng)用里生成一個(gè) Clips 的卡片,用戶如果需要可以主動(dòng)點(diǎn)擊。

Siri 附近建議和蘋果地圖(在 connect 中可以配置 Clips 的地理位置)。場景和前面的二維碼類似,如果我在地圖上看到一個(gè)商家,商家有提供服務(wù)的 Clips,我可以在地圖或者 Siri 建議里直接打開 Clips。

再次總結(jié)一下 Clips 的入口限制:只能是用戶主動(dòng)發(fā)起才能訪問。雖然 Clips 的入口是一段 universal link,在代碼里的處理方式也和 universal link 一致,但是為了 Clips 不被濫用,Clips 的調(diào)起只能是操作系統(tǒng)調(diào)起。App 沒有能力主動(dòng)調(diào)起一個(gè) Clips 程序。

無需安裝、卸載

因?yàn)?Clips 的大小被限制在了 10MB 以下,在當(dāng)下的網(wǎng)絡(luò)狀態(tài)下,可以實(shí)現(xiàn)快速的打開。為了給用戶使用非常輕松的感覺,在 UI 上不會(huì)體現(xiàn)“安裝”這樣的字眼,而是直接“打開”。預(yù)期的場景下用戶打開 Clips 和打開一個(gè)網(wǎng)頁類似。因此在用戶的視角里就不存在軟件的安裝、卸載。

Clips 的生命周期由操作系統(tǒng)全權(quán)接管。如果 Clips 用戶一段時(shí)間后沒有使用,操作系統(tǒng)就會(huì)自動(dòng)清除掉 Clips,Clips 里存儲(chǔ)的數(shù)據(jù)也會(huì)被一并清除。因此雖然 Clips 提供了存儲(chǔ)的能力,但是程序不應(yīng)該依賴存儲(chǔ)的數(shù)據(jù),只能把存儲(chǔ)當(dāng)做 cache 來使用,操作系統(tǒng)可能自動(dòng)清除緩存的數(shù)據(jù)。

橫向比較:PWA、Instant Apps、小程序

Instant Apps

18 年正式發(fā)布的 Android Instant apps 和 Clips 在技術(shù)上是最接近的。Instant apps 中文被翻成“免安裝應(yīng)用”,在體驗(yàn)上也是希望用戶能夠最低成本的使用上 app,讓用戶感受不到安裝這個(gè)步驟。Instant apps 也可以通過 url 標(biāo)識(shí)(deep link),如果在 chrome 里搜索到應(yīng)用的網(wǎng)站,chrome 如果識(shí)別到域名下有關(guān)聯(lián)應(yīng)用,可以直接“打開”。消息中的鏈接也可以被識(shí)別。只是 Instant apps 發(fā)布的早,國外用戶也沒有使用二維碼的習(xí)慣,所以入口上不支持二維碼、NFC。

兩者的根本區(qū)別還是在定位上,Instant apps 提出的場景是提供一個(gè) app 的試用版。因此場景是你已經(jīng)到了 app 的下載頁面,這個(gè)時(shí)候如果一個(gè) app 幾百兆你可能就放棄下載了,但是有一個(gè)極簡的試用版,就會(huì)提高你使用 app 的可能。這個(gè)場景在游戲 app 里尤其明顯,一方面高質(zhì)量的游戲 app 體積比較大。另一方面,如果是一個(gè)付費(fèi)下載的應(yīng)用,如果有一個(gè)免費(fèi)的試用版,也可以增加用戶的下載可能。在蘋果生態(tài)里很多應(yīng)用會(huì)提供一個(gè)受限的免費(fèi) lite 版本也是一樣的需求。

但是 Instant apps 在國內(nèi)沒有產(chǎn)生任何影響。因?yàn)檎叩脑?,Google Play 不支持在國內(nèi)市場使用。國內(nèi)的安卓應(yīng)用市場也是魚龍混雜,對于 Instant apps 也估計(jì)也沒有統(tǒng)一支持。另外國內(nèi)的安卓生態(tài)也和歐美地區(qū)區(qū)別比較大,早期安卓市場上收費(fèi)的應(yīng)用很少,對于用戶而言需要試用免費(fèi) app 的場景很少。另外大廠也可能會(huì)推出專門的急速版應(yīng)用,安裝后利用動(dòng)態(tài)化技術(shù)下發(fā)代碼,應(yīng)用體積也可以控制在 10 MB 以內(nèi)。

Clips 則是非常明確的面向線下提供服務(wù)的場景,在應(yīng)用能力上可以接入 sign in with apple,apple pay。這樣一個(gè)全新的用戶,可以很快速的使用線下服務(wù)并且進(jìn)行注冊、支付。用戶體驗(yàn)會(huì)好的多。安卓因?yàn)閲鴥?nèi)生態(tài)的原因,各個(gè)安卓廠商沒有統(tǒng)一的新用戶可以快速注冊的接口,也沒有統(tǒng)一的支付接口,很難提供相匹敵的體驗(yàn)。如果開發(fā)者針對各個(gè)廠商單獨(dú)開發(fā),那成本上就不是“小程序”了。

Progressive Web App(PWA)

Progressive Web App 是基于 web 的技術(shù)。在移動(dòng)互聯(lián)網(wǎng)興起之后,大家的流量都轉(zhuǎn)移到了移動(dòng)設(shè)備上。然而在移動(dòng)上的 web 體驗(yàn)并不好。于是 W3C 和谷歌就基于瀏覽器的能力,制定了一套協(xié)議,讓 web app 可以擁有更多的 native 能力。

PWA 不是特指某一項(xiàng)技術(shù),而是應(yīng)用了多項(xiàng)技術(shù)的 Web App。其核心技術(shù)包括 App Manifest、Service Worker、Web Push。

PWA 相當(dāng)于把小程序里的代碼直接下載到了本地,有了獨(dú)立的 app 入口。運(yùn)行的時(shí)候基于瀏覽器的能力。但是對于用戶感受和原生 app 一樣。

我個(gè)人對 PWA 技術(shù)很有好感,它的初衷有著初代互聯(lián)網(wǎng)般的美好。希望底層有一套協(xié)議后,用戶體驗(yàn)還是沒有邊界的互聯(lián)網(wǎng)。然而時(shí)代已經(jīng)變了。PWA 在中國基本上是涼了。

PWA 從出生就帶了硬傷,雖然谷歌希望有一套 web 標(biāo)準(zhǔn)可以運(yùn)行在移動(dòng)設(shè)備上,但是對于蘋果的商業(yè)策略而言,這并不重要。因此 PWA 的一個(gè)協(xié)議,從制定出來,再到移動(dòng)設(shè)備(iOS)上支持這個(gè)特性,幾年就過去了。而且對于移動(dòng)用戶而言,可以擁有一個(gè)美好的 web app 并不是他們的痛點(diǎn)。

總結(jié)起來 PWA 看著美好,但似乎更多是對于 web 開發(fā)者心中的美好愿景。在落實(shí)中遇到了很多現(xiàn)實(shí)的問題,技術(shù)支持的不好,開發(fā)者就更沒有動(dòng)力在這個(gè)技術(shù)上做軟件生態(tài)了。

微信小程序

前面提過在產(chǎn)品理念上小程序和 Clips 很相似,甚至說不定 Clips 是受了小程序的啟發(fā)。在市場上,小程序是 Clips 的真正對手。

小程序基于微信的 app,Clips 基于操作系統(tǒng),因此在能力上 Clips 有優(yōu)勢。小程序的入口需要先打開微信,而 Clips 可以通過 NFC 靠近直接激活應(yīng)用。對于開發(fā)者而言,Clips 可以直接獲得很多原生的能力(比如 push),如果用戶喜歡可以關(guān)聯(lián)下載自己的原生應(yīng)用。在小程序中,微信出于商業(yè)原因開發(fā)者不能直接跳轉(zhuǎn)到自有 app,小程序的能力也依賴于微信提供的接口。

對于從 Clips 關(guān)聯(lián)主 app 蘋果還挺重視的,提供了幾個(gè)入口展示關(guān)聯(lián) app。

首先在 Clips 的展示頁就會(huì)顯示:

每次使用 Clips 時(shí)也會(huì)有一個(gè)短暫的浮層展示:

開發(fā)者也可以自己通過 SKOverlay 來展示:

不過如果開發(fā)者沒有自己的獨(dú)立 app,那么也就只能選擇小程序了。小程序發(fā)展到現(xiàn)在場景也比最早提出的線下服務(wù)更加多了,反而類似 Instant apps,更像一個(gè)輕量級的 app。

考慮到國內(nèi)很多小程序的廠商都沒有自己的獨(dú)立 app,因此 Clips 對于這部分群體也并沒有什么吸引力。不過對于線下服務(wù)類,尤其有支付場景的,Clips 在用戶體驗(yàn)上會(huì)比小程序好一些。

總結(jié),Clips 的業(yè)務(wù)場景和小程序有一小部分是重疊的,小程序覆蓋的場景還是更多一些。兩者在大部分時(shí)候并不是互斥式的競爭關(guān)系,即便在一些場景下 Clips 有技術(shù)優(yōu)勢,商家也不會(huì)放棄小程序,因?yàn)檫€有安卓用戶嘛。還是看商家在某些場景里,是否愿意為用戶多提供一種更好的交互方式。

對比原生 app 的技術(shù)限制

雖然 Clips 可以直接使用 iOS framework,但是因?yàn)?Clips 的使用場景是新用戶的初次、簡短、當(dāng)下(in-the-moment experience)的使用,相比原生 app 蘋果還是進(jìn)行了一些限制。

App 不能訪問用戶的隱私信息:

  • 運(yùn)動(dòng)和健身數(shù)據(jù)
  • Apple Music 和多媒體文件
  • 通訊錄、信息、照片、文件等數(shù)據(jù)

不過為了能夠提供給用戶更加輕便的體驗(yàn),通過專門為 Clips 設(shè)計(jì)了免申請的通知、定位權(quán)限。不過也有限制:免申請的通知只在 8 個(gè)小時(shí)內(nèi)有效。位置只能獲取一次。如果 app 需要重度使用這兩類權(quán)限就還是和原來一樣,可以彈窗申請。

某些高級應(yīng)用能力也會(huì)受限,需要在完整的應(yīng)用中才能使用:

  • 不能請求追蹤授權(quán)
  • 不能進(jìn)行后臺(tái)請求任務(wù)
  • 沒在激活狀態(tài)藍(lán)牙連接會(huì)斷開

總的而言雖然有一些限制,但是這些限制的出發(fā)點(diǎn)是希望開發(fā)者關(guān)注 Clips 的正確使用場景。對于 Clips 所提倡的使用場景里,蘋果提供的能力是完全夠用的。

一些技術(shù)細(xì)節(jié)

可以建立一個(gè)共享 targets 的 Asset catalog 來共用圖片資源。

在 Clips 中申請的授權(quán),在下載完整應(yīng)用后會(huì)被同步到應(yīng)用中。

通過 App Group Container 來共享 Clips 和 app 的數(shù)據(jù)。

Clips 的 url 可以配置參數(shù):

在 App Store Connect 中還可以針對指定的參數(shù)配置不一樣的標(biāo)題和圖片。比如一家連鎖咖啡店,可能不同的店你希望彈出的標(biāo)題圖片是不一樣的,可以進(jìn)行單獨(dú)的配置。

總結(jié)

蘋果給定義的 Clips 的關(guān)鍵詞是:lightweight、native、fast、focused、in-the-moment experience。

Clips 在特定的線下場景里有著相當(dāng)好的用戶體驗(yàn)。對于已經(jīng)擁有獨(dú)立 app 的公司來說,開發(fā)一個(gè) Clips 應(yīng)用的成本并不高。我個(gè)人還是期待這樣一個(gè)好的技術(shù)可以被更多開發(fā)者接納,可以提供給用戶更好的體驗(yàn)。對于小程序,Clips 的場景窄的多,兩者并不是直接競爭關(guān)系。我更愿意看做是特定場景下,對于小程序原生能力不足的一種補(bǔ)充。


本文轉(zhuǎn)載自《蘋果 App Clip 技術(shù)詳解 | 蘋果?App Clip 技術(shù)詳解》,版權(quán)歸原創(chuàng)者所有。

評論