蘋果 App Clip 技術詳解

沒故事的卓同學· 2020-07-09
本文來自 沒故事的卓同學博客 ,作者 沒故事的卓同學

image.png

蘋果在 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。


image.png


Clip 不能單獨發布,必須關聯一個 app。因此發布的流程和 app 和一樣的,在 apple connect 上創建一個版本,和 app 一起提交審核。和 app 在技術上的最大區別只是大小限制在 10MB 以內,因為 Clip 的基礎就是希望用戶可以最迅速的被用戶使用,如果體積大了就失去了產品的根本。

產品定位:用完即走


image.png


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


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

觸手可及



Clip 使用一段 URL 標識自己,格式遵從 universal link。因為蘋果對 Clip 的使用場景非常明確,所以在 Clip 的調起方式做了嚴格限制。Clip 的調用只能是用戶主動要發起才能訪問,所以不存在用戶在某個 app 里不小心點了一個按鈕,就跳轉下載了 Clip。


Clip 的發起入口有以下幾種:

  • NFC

  • 二維碼

  • Safari 中關聯了 Clip 的網頁

  • 蘋果消息應用

  • Siri 附近建議和蘋果地圖


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


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。這樣一個全新的用戶,可以很快速的使用線下服務并且進行注冊、支付。用戶體驗會好的多。安卓因為國內生態的原因,各個安卓廠商沒有統一的新用戶可以快速注冊的接口,也沒有統一的支付接口,很難提供相匹敵的體驗。如果開發者針對各個廠商單獨開發,那成本上就不是“小程序”了。

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 來展示:

image.png

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


考慮到國內很多小程序的廠商都沒有自己的獨立 app,因此 clip 對于這部分群體也并沒有什么吸引力。不過對于線下服務類,尤其有支付場景的,Clip 在用戶體驗上會比小程序好一些。


總結,Clip 的業務場景和小程序有一小部分是重疊的,小程序覆蓋的場景還是更多一些。兩者在大部分時候并不是互斥式的競爭關系,即便在一些場景下 Clip 有技術優勢,商家也不會放棄小程序,因為還有安卓用戶嘛。還是看商家在某些場景里,是否愿意為用戶多提供一種更好的交互方式。

對比原生 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 的場景窄的多,兩者并不是直接競爭關系。我更愿意看做是特定場景下,對于小程序原生能力不足的一種補充。


丰禾棋牌官网1369 福彩快3开奖结果今天 楚天风采30选5走势图 排列五简单中奖技巧 吉林省快3走势 云南快乐十分哪里玩 甘肃11选5遗漏查询 广东36选7开奖11056 山西快乐十分任三口诀 cac股票指数 福彩3d最近500期开奖结果