在實(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 并沒(méi)有自己的專屬 framework(其實(shí)有一個(gè),但是主要包含的是一些特色 api),使用的框架和 app 一致,可以認(rèn)為是一個(gè)精簡(jiǎn)版的原生 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)品的根本。
蘋果對(duì) Clips 的使用場(chǎng)景非常明確:在一個(gè)特定的情境里,用戶可以快速的使用 app 的核心服務(wù)。是小程序內(nèi)味了!
坦率的說(shuō),很難說(shuō) Clips 的理念是蘋果原創(chuàng)的,在產(chǎn)品的定位上和微信小程序如出一轍。尤其是微信小程序在國(guó)內(nèi)已經(jīng)完全普及了,微信小程序初始發(fā)布的時(shí)候也被蘋果加了多條限制。其中一條就是小程序不能有虛擬商品支付功能?,F(xiàn)在回頭看蘋果自己的 Clips 可以完美支持 apple pay,很難說(shuō)蘋果沒(méi)有私心。
Clips 使用一段 URL 標(biāo)識(shí)自己,格式遵從 universal link。因?yàn)樘O果對(duì) Clips 的使用場(chǎng)景非常明確,所以在 Clips 的調(diào)起方式做了嚴(yán)格限制。Clips 的調(diào)用只能是用戶主動(dòng)要發(fā)起才能訪問(wèn),所以不存在用戶在某個(gè) app 里不小心點(diǎn)了一個(gè)按鈕,就跳轉(zhuǎn)下載了 Clips。
Clips 的發(fā)起入口有以下幾種:
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 的地理位置)。場(chǎng)景和前面的二維碼類似,如果我在地圖上看到一個(gè)商家,商家有提供服務(wù)的 Clips,我可以在地圖或者 Siri 建議里直接打開 Clips。
再次總結(jié)一下 Clips 的入口限制:只能是用戶主動(dòng)發(fā)起才能訪問(wèn)。雖然 Clips 的入口是一段 universal link,在代碼里的處理方式也和 universal link 一致,但是為了 Clips 不被濫用,Clips 的調(diào)起只能是操作系統(tǒng)調(diào)起。App 沒(méi)有能力主動(dòng)調(diào)起一個(gè) Clips 程序。
因?yàn)?Clips 的大小被限制在了 10MB 以下,在當(dāng)下的網(wǎng)絡(luò)狀態(tài)下,可以實(shí)現(xiàn)快速的打開。為了給用戶使用非常輕松的感覺(jué),在 UI 上不會(huì)體現(xiàn)“安裝”這樣的字眼,而是直接“打開”。預(yù)期的場(chǎng)景下用戶打開 Clips 和打開一個(gè)網(wǎng)頁(yè)類似。因此在用戶的視角里就不存在軟件的安裝、卸載。
Clips 的生命周期由操作系統(tǒng)全權(quán)接管。如果 Clips 用戶一段時(shí)間后沒(méi)有使用,操作系統(tǒng)就會(huì)自動(dòng)清除掉 Clips,Clips 里存儲(chǔ)的數(shù)據(jù)也會(huì)被一并清除。因此雖然 Clips 提供了存儲(chǔ)的能力,但是程序不應(yīng)該依賴存儲(chǔ)的數(shù)據(jù),只能把存儲(chǔ)當(dāng)做 cache 來(lái)使用,操作系統(tǒng)可能自動(dòng)清除緩存的數(shù)據(jù)。
18 年正式發(fā)布的 Android Instant apps 和 Clips 在技術(shù)上是最接近的。Instant apps 中文被翻成“免安裝應(yīng)用”,在體驗(yàn)上也是希望用戶能夠最低成本的使用上 app,讓用戶感受不到安裝這個(gè)步驟。Instant apps 也可以通過(guò) url 標(biāo)識(shí)(deep link),如果在 chrome 里搜索到應(yīng)用的網(wǎng)站,chrome 如果識(shí)別到域名下有關(guān)聯(lián)應(yīng)用,可以直接“打開”。消息中的鏈接也可以被識(shí)別。只是 Instant apps 發(fā)布的早,國(guó)外用戶也沒(méi)有使用二維碼的習(xí)慣,所以入口上不支持二維碼、NFC。
兩者的根本區(qū)別還是在定位上,Instant apps 提出的場(chǎng)景是提供一個(gè) app 的試用版。因此場(chǎng)景是你已經(jīng)到了 app 的下載頁(yè)面,這個(gè)時(shí)候如果一個(gè) app 幾百兆你可能就放棄下載了,但是有一個(gè)極簡(jiǎn)的試用版,就會(huì)提高你使用 app 的可能。這個(gè)場(chǎng)景在游戲 app 里尤其明顯,一方面高質(zhì)量的游戲 app 體積比較大。另一方面,如果是一個(gè)付費(fèi)下載的應(yīng)用,如果有一個(gè)免費(fèi)的試用版,也可以增加用戶的下載可能。在蘋果生態(tài)里很多應(yīng)用會(huì)提供一個(gè)受限的免費(fèi) lite 版本也是一樣的需求。
但是 Instant apps 在國(guó)內(nèi)沒(méi)有產(chǎn)生任何影響。因?yàn)檎叩脑颍珿oogle Play 不支持在國(guó)內(nèi)市場(chǎng)使用。國(guó)內(nèi)的安卓應(yīng)用市場(chǎng)也是魚龍混雜,對(duì)于 Instant apps 也估計(jì)也沒(méi)有統(tǒng)一支持。另外國(guó)內(nèi)的安卓生態(tài)也和歐美地區(qū)區(qū)別比較大,早期安卓市場(chǎng)上收費(fèi)的應(yīng)用很少,對(duì)于用戶而言需要試用免費(fèi) app 的場(chǎng)景很少。另外大廠也可能會(huì)推出專門的急速版應(yīng)用,安裝后利用動(dòng)態(tài)化技術(shù)下發(fā)代碼,應(yīng)用體積也可以控制在 10 MB 以內(nèi)。
Clips 則是非常明確的面向線下提供服務(wù)的場(chǎng)景,在應(yīng)用能力上可以接入 sign in with apple,apple pay。這樣一個(gè)全新的用戶,可以很快速的使用線下服務(wù)并且進(jìn)行注冊(cè)、支付。用戶體驗(yàn)會(huì)好的多。安卓因?yàn)閲?guó)內(nèi)生態(tài)的原因,各個(gè)安卓廠商沒(méi)有統(tǒng)一的新用戶可以快速注冊(cè)的接口,也沒(méi)有統(tǒng)一的支付接口,很難提供相匹敵的體驗(yàn)。如果開發(fā)者針對(duì)各個(gè)廠商單獨(dú)開發(fā),那成本上就不是“小程序”了。
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í)候基于瀏覽器的能力。但是對(duì)于用戶感受和原生 app 一樣。
我個(gè)人對(duì) PWA 技術(shù)很有好感,它的初衷有著初代互聯(lián)網(wǎng)般的美好。希望底層有一套協(xié)議后,用戶體驗(yàn)還是沒(méi)有邊界的互聯(lián)網(wǎng)。然而時(shí)代已經(jīng)變了。PWA 在中國(guó)基本上是涼了。
PWA 從出生就帶了硬傷,雖然谷歌希望有一套 web 標(biāo)準(zhǔn)可以運(yùn)行在移動(dòng)設(shè)備上,但是對(duì)于蘋果的商業(yè)策略而言,這并不重要。因此 PWA 的一個(gè)協(xié)議,從制定出來(lái),再到移動(dòng)設(shè)備(iOS)上支持這個(gè)特性,幾年就過(guò)去了。而且對(duì)于移動(dòng)用戶而言,可以擁有一個(gè)美好的 web app 并不是他們的痛點(diǎn)。
總結(jié)起來(lái) PWA 看著美好,但似乎更多是對(duì)于 web 開發(fā)者心中的美好愿景。在落實(shí)中遇到了很多現(xiàn)實(shí)的問(wèn)題,技術(shù)支持的不好,開發(fā)者就更沒(méi)有動(dòng)力在這個(gè)技術(shù)上做軟件生態(tài)了。
前面提過(guò)在產(chǎn)品理念上小程序和 Clips 很相似,甚至說(shuō)不定 Clips 是受了小程序的啟發(fā)。在市場(chǎng)上,小程序是 Clips 的真正對(duì)手。
小程序基于微信的 app,Clips 基于操作系統(tǒng),因此在能力上 Clips 有優(yōu)勢(shì)。小程序的入口需要先打開微信,而 Clips 可以通過(guò) NFC 靠近直接激活應(yīng)用。對(duì)于開發(fā)者而言,Clips 可以直接獲得很多原生的能力(比如 push),如果用戶喜歡可以關(guān)聯(lián)下載自己的原生應(yīng)用。在小程序中,微信出于商業(yè)原因開發(fā)者不能直接跳轉(zhuǎn)到自有 app,小程序的能力也依賴于微信提供的接口。
對(duì)于從 Clips 關(guān)聯(lián)主 app 蘋果還挺重視的,提供了幾個(gè)入口展示關(guān)聯(lián) app。
首先在 Clips 的展示頁(yè)就會(huì)顯示:
每次使用 Clips 時(shí)也會(huì)有一個(gè)短暫的浮層展示:
開發(fā)者也可以自己通過(guò) SKOverlay 來(lái)展示:
不過(guò)如果開發(fā)者沒(méi)有自己的獨(dú)立 app,那么也就只能選擇小程序了。小程序發(fā)展到現(xiàn)在場(chǎng)景也比最早提出的線下服務(wù)更加多了,反而類似 Instant apps,更像一個(gè)輕量級(jí)的 app。
考慮到國(guó)內(nèi)很多小程序的廠商都沒(méi)有自己的獨(dú)立 app,因此 Clips 對(duì)于這部分群體也并沒(méi)有什么吸引力。不過(guò)對(duì)于線下服務(wù)類,尤其有支付場(chǎng)景的,Clips 在用戶體驗(yàn)上會(huì)比小程序好一些。
總結(jié),Clips 的業(yè)務(wù)場(chǎng)景和小程序有一小部分是重疊的,小程序覆蓋的場(chǎng)景還是更多一些。兩者在大部分時(shí)候并不是互斥式的競(jìng)爭(zhēng)關(guān)系,即便在一些場(chǎng)景下 Clips 有技術(shù)優(yōu)勢(shì),商家也不會(huì)放棄小程序,因?yàn)檫€有安卓用戶嘛。還是看商家在某些場(chǎng)景里,是否愿意為用戶多提供一種更好的交互方式。
雖然 Clips 可以直接使用 iOS framework,但是因?yàn)?Clips 的使用場(chǎng)景是新用戶的初次、簡(jiǎn)短、當(dāng)下(in-the-moment experience)的使用,相比原生 app 蘋果還是進(jìn)行了一些限制。
App 不能訪問(wèn)用戶的隱私信息:
不過(guò)為了能夠提供給用戶更加輕便的體驗(yàn),通過(guò)專門為 Clips 設(shè)計(jì)了免申請(qǐng)的通知、定位權(quán)限。不過(guò)也有限制:免申請(qǐng)的通知只在 8 個(gè)小時(shí)內(nèi)有效。位置只能獲取一次。如果 app 需要重度使用這兩類權(quán)限就還是和原來(lái)一樣,可以彈窗申請(qǐng)。
某些高級(jí)應(yīng)用能力也會(huì)受限,需要在完整的應(yīng)用中才能使用:
總的而言雖然有一些限制,但是這些限制的出發(fā)點(diǎn)是希望開發(fā)者關(guān)注 Clips 的正確使用場(chǎng)景。對(duì)于 Clips 所提倡的使用場(chǎng)景里,蘋果提供的能力是完全夠用的。
可以建立一個(gè)共享 targets 的 Asset catalog 來(lái)共用圖片資源。
在 Clips 中申請(qǐng)的授權(quán),在下載完整應(yīng)用后會(huì)被同步到應(yīng)用中。
通過(guò) App Group Container 來(lái)共享 Clips 和 app 的數(shù)據(jù)。
Clips 的 url 可以配置參數(shù):
在 App Store Connect 中還可以針對(duì)指定的參數(shù)配置不一樣的標(biāo)題和圖片。比如一家連鎖咖啡店,可能不同的店你希望彈出的標(biāo)題圖片是不一樣的,可以進(jìn)行單獨(dú)的配置。
蘋果給定義的 Clips 的關(guān)鍵詞是:lightweight、native、fast、focused、in-the-moment experience。
Clips 在特定的線下場(chǎng)景里有著相當(dāng)好的用戶體驗(yàn)。對(duì)于已經(jīng)擁有獨(dú)立 app 的公司來(lái)說(shuō),開發(fā)一個(gè) Clips 應(yīng)用的成本并不高。我個(gè)人還是期待這樣一個(gè)好的技術(shù)可以被更多開發(fā)者接納,可以提供給用戶更好的體驗(yàn)。對(duì)于小程序,Clips 的場(chǎng)景窄的多,兩者并不是直接競(jìng)爭(zhēng)關(guān)系。我更愿意看做是特定場(chǎng)景下,對(duì)于小程序原生能力不足的一種補(bǔ)充。
本文轉(zhuǎn)載自《蘋果 App Clip 技術(shù)詳解 | 蘋果?App Clip 技術(shù)詳解》,版權(quán)歸原創(chuàng)者所有。
]]>