蘋果 App Clip 技術詳解

蘋果在 WWDC2020 上發佈了 App Clip,有媒體叫作「蘋果小程序」。雖然 Clip 在產品理念上和小程序有類似之處,可是在技術實現層面倒是大相徑庭的東西。本文會針對 Clip 的技術層面作全面的介紹。

實現方式:native 代碼、native 框架、native app 同樣的分發

在實現上,Clip 和原生的 app 使用同樣的方式。在 UI 框架上同時支持 UIKit 和 SwiftUI,有些開發者認爲只能使用 SwiftUI 開發,這點是錯誤的。Clip 的定位和 watch app、app extension 相似,和 app 在同一個 project 裏,是一個單獨的 target。只是 Clip 並無本身的專屬 framework(其實有一個,可是主要包含的是一些特點 api),使用的框架和 app 一致,能夠認爲是一個精簡版的原生 App。 web

Clip 不能單獨發佈,必須關聯一個 app。所以發佈的流程和 app 和同樣的,在 apple connect 上建立一個版本,和 app 一塊兒提交審覈。和 app 在技術上的最大區別只是大小限制在 10MB 之內,由於 Clip 的基礎就是但願用戶能夠最迅速的被用戶使用,若是體積大了就失去了產品的根本。

產品定位:用完即走

蘋果對 Clip 的使用場景很是明確:在一個特定的情境裏,用戶能夠快速的使用 app 的核心服務。是小程序內味了! 坦率的說,很難說 Clip 的理念是蘋果原創的,在產品的定位上和微信小程序一模一樣。尤爲是微信小程序在國內已經徹底普及了,微信小程序初始發佈的時候也被蘋果加了多條限制。其中一條就是小程序不能有虛擬商品支付功能。如今回頭看蘋果本身的 Clip 能夠完美支持 apple pay,很難說蘋果沒有私心。

觸手可及

Clip 使用一段 URL 標識本身,格式聽從 universal link。由於蘋果對 Clip 的使用場景很是明確,因此在 Clip 的調起方式作了嚴格限制。Clip 的調用只能是用戶主動要發起才能訪問,因此不存在用戶在某個 app 裏不當心點了一個按鈕,就跳轉下載了 Clip。 Clip 的發起入口有如下幾種:

  • NFC
  • 二維碼
  • Safari 中關聯了 Clip 的網頁
  • 蘋果消息應用
  • Siri 附近建議和蘋果地圖

NFC 和二維碼的入口很容易理解,必須用戶主動拿出手機靠近 NFC、打開相機掃描。蘋果專屬的 Clip 碼生成工具在年末纔會開放。chrome

Safari 中發起和以前的 universal link 相似,在網站配置了關聯的 Clip 信息後,會有一個 banner 提示打開應用。

由於 Clip 提交 app store 審覈的信息裏也會配置好相關的 url,所以若是在 message 裏發了 clip 的連接,操做系統也會在應用裏生成一個 Clip 的卡片,用戶若是須要能夠主動點擊。

Siri 附近建議和蘋果地圖(在 connect 中能夠配置 clip 的地理位置)。場景和前面的二維碼相似,若是我在地圖上看到一個商家,商家有提供服務的 Clip,我能夠在地圖或者 Siri 建議裏直接打開 Clip。小程序

再次總結一下 Clip 的入口限制: 只能是用戶主動發起才能訪問。雖然 Clip 的入口是一段 universal link,在代碼裏的處理方式也和 universal link 一致,可是爲了 Clip 不被濫用,Clip 的調起只能是操做系統調起。App 沒有能力主動調起一個 Clip 程序。

無需安裝、卸載

由於 Clip 的大小被限制在了 10MB 如下,在當下的網絡狀態下,能夠實現快速的打開。爲了給用戶使用很是輕鬆的感受,在 UI 上不會體現「安裝」這樣的字眼,而是直接「打開」。預期的場景下用戶打開 Clip 和打開一個網頁相似。所以在用戶的視角里就不存在軟件的安裝、卸載。 Clip 的生命週期由操做系統全權接管。若是 Clip 用戶一段時間後沒有使用,操做系統就會自動清除掉 Clip,Clip 裏存儲的數據也會被一併清除。所以雖然 Clip 提供了存儲的能力,可是程序不該該依賴存儲的數據,只能把存儲當作 cache 來使用,操做系統可能自動清除緩存的數據。微信小程序

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

Instant Apps

18 年正式發佈的 Android Instant apps 和 Clip 在技術上是最接近的。Instant apps 中文被翻成「免安裝應用」,在體驗上也是但願用戶可以最低成本的使用上 app,讓用戶感覺不到安裝這個步驟。Instant apps 也能夠經過 url 標識(deep link),若是在 chrome 裏搜索到應用的網站,chrome 若是識別到域名下有關聯應用,能夠直接「打開」。消息中的連接也能夠被識別。只是 Instant apps 發佈的早,國外用戶也沒有使用二維碼的習慣,因此入口上不支持二維碼、NFC。 二者的根本區別仍是在定位上,Instant apps 提出的場景是提供一個 app 的試用版。所以場景是你已經到了 app 的下載頁面,這個時候若是一個 app 幾百兆你可能就放棄下載了,可是有一個極簡的試用版,就會提升你使用 app 的可能。這個場景在遊戲 app 裏尤爲明顯,一方面高質量的遊戲 app 體積比較大。另外一方面,若是是一個付費下載的應用,若是有一個免費的試用版,也能夠增長用戶的下載可能。在蘋果生態裏不少應用會提供一個受限的免費 lite 版本也是同樣的需求。 可是 Instant apps 在國內沒有產生任何影響。由於政策的緣由,Google Play 不支持在國內市場使用。國內的安卓應用市場也是魚龍混雜,對於 Instant apps 也估計也沒有統一支持。另外國內的安卓生態也和歐美地區區別比較大,早期安卓市場上收費的應用不多,對於用戶而言須要試用免費 app 的場景不多。另外大廠也可能會推出專門的急速版應用,安裝後利用動態化技術下發代碼,應用體積也能夠控制在 10 MB 之內。 Clip 則是很是明確的面向線下提供服務的場景,在應用能力上能夠接入 sign in with apple,apple pay。這樣一個全新的用戶,能夠很快速的使用線下服務而且進行註冊、支付。用戶體驗會好的多。安卓由於國內生態的緣由,各個安卓廠商沒有統一的新用戶能夠快速註冊的接口,也沒有統一的支付接口,很難提供相匹敵的體驗。若是開發者針對各個廠商單獨開發,那成本上就不是「小程序」了。api

Progressive Web App(PWA)

Progressive Web App 是基於 web 的技術。在移動互聯網興起以後,你們的流量都轉移到了移動設備上。然而在移動上的 web 體驗並很差。因而 W3C 和谷歌就基於瀏覽器的能力,制定了一套協議,讓 web app 能夠擁有更多的 native 能力。瀏覽器

PWA 不是特指某一項技術,而是應用了多項技術的 Web App。其核心技術包括 App Manifest、Service Worker、Web Push。緩存

PWA 至關於把小程序裏的代碼直接下載到了本地,有了獨立的 app 入口。運行的時候基於瀏覽器的能力。可是對於用戶感覺和原生 app 同樣。 我我的對 PWA 技術頗有好感,它的初衷有着初代互聯網般的美好。但願底層有一套協議後,用戶體驗仍是沒有邊界的互聯網。然而時代已經變了。PWA 在中國基本上是涼了。 PWA 從出生就帶了硬傷,雖然谷歌但願有一套 web 標準能夠運行在移動設備上,可是對於蘋果的商業策略而言,這並不重要。所以 PWA 的一個協議,從制定出來,再到移動設備(iOS)上支持這個特性,幾年就過去了。並且對於移動用戶而言,能夠擁有一個美好的 web app 並非他們的痛點。 總結起來 PWA 看着美好,但彷佛更可能是對於 web 開發者心中的美好願景。在落實中遇到了不少現實的問題,技術支持的很差,開發者就更沒有動力在這個技術上作軟件生態了。微信

微信小程序

前面提過在產品理念上小程序和 Clip 很類似,甚至說不定 Clip 是受了小程序的啓發。在市場上,小程序是 Clip 的真正對手。 小程序基於微信的 app,Clip 基於操做系統,所以在能力上 Clip 有優點。小程序的入口須要先打開微信,而 Clip 能夠經過 NFC 靠近直接激活應用。對於開發者而言,Clip 能夠直接得到不少原生的能力(好比 push),若是用戶喜歡能夠關聯下載本身的原生應用。在小程序中,微信出於商業緣由開發者不能直接跳轉到自有 app,小程序的能力也依賴於微信提供的接口。 對於從 Clip 關聯主 app 蘋果還挺重視的,提供了幾個入口展現關聯 app。 首先在 clip 的展現頁就會顯示:網絡

每次使用 Clip 時也會有一個短暫的浮層展現:

開發者也能夠本身經過 SKOverlay 來展現:

不過若是開發者沒有本身的獨立 app,那麼也就只能選擇小程序了。小程序發展到如今場景也比最先提出的線下服務更加多了,反而相似 Instant apps,更像一個輕量級的 app。 考慮到國內不少小程序的廠商都沒有本身的獨立 app,所以 clip 對於這部分羣體也並無什麼吸引力。不過對於線下服務類,尤爲有支付場景的,Clip 在用戶體驗上會比小程序好一些。 總結,Clip 的業務場景和小程序有一小部分是重疊的,小程序覆蓋的場景仍是更多一些。二者在大部分時候並非互斥式的競爭關係,即使在一些場景下 Clip 有技術優點,商家也不會放棄小程序,由於還有安卓用戶嘛。仍是看商家在某些場景裏,是否願意爲用戶多提供一種更好的交互方式。app

對比原生 app 的技術限制

雖然 Clip 能夠直接使用 iOS framework,可是由於 Clip 的使用場景是新用戶的初次、簡短、當下(in-the-moment experience)的使用,相比原生 app 蘋果仍是進行了一些限制。 App 不能訪問用戶的隱私信息:

  • 運動和健身數據
  • Apple Music 和多媒體文件
  • 通信錄、信息、照片、文件等數據

不過爲了可以提供給用戶更加輕便的體驗,經過專門爲 Clip 設計了免申請的通知、定位權限。不過也有限制:免申請的通知只在 8 個小時內有效。位置只能獲取一次。若是 app 須要重度使用這兩類權限就仍是和原來同樣,能夠彈窗申請。 某些高級應用能力也會受限,須要在完整的應用中才能使用:

  • 不能請求追蹤受權
  • 不能進行後臺請求任務
  • 沒在激活狀態藍牙鏈接會斷開

總的而言雖然有一些限制,可是這些限制的出發點是但願開發者關注 Clip 的正確使用場景。對於 Clip 所提倡的使用場景裏,蘋果提供的能力是徹底夠用的。

一些技術細節

能夠創建一個共享 targets 的 Asset catalog 來共用圖片資源。

在 Clip 中申請的受權,在下載完整應用後會被同步到應用中。 經過 App Group Container 來共享 clip 和 app 的數據。

Clip 的 url 能夠配置參數:

在 App Store connect 中還能夠針對指定的參數配置不同的標題和圖片。好比一家連鎖咖啡店,可能不一樣的店你但願彈出的標題圖片是不同的,能夠進行單獨的配置。

總結

蘋果給定義的 Clip 的關鍵詞是:lightweight、native、fast、focused、in-the-moment experience。 Clip 在特定的線下場景裏有着至關好的用戶體驗。對於已經擁有獨立 app 的公司來講,開發一個 clip 應用的成本並不高。我我的仍是期待這樣一個好的技術能夠被更多開發者接納,能夠提供給用戶更好的體驗。對於小程序,clip 的場景窄的多,二者並非直接競爭關係。我更願意看作是特定場景下,對於小程序原生能力不足的一種補充。

相關文章
相關標籤/搜索