做者|何世友、彭權華ios
在 2020 年 6 月 23 日的 WWDC 大會中,蘋果發佈了 App Clips 。git
App Clip(官方翻譯:輕 App;民間翻譯:「蘋果」小程序),是主 app 輕量級的版本,旨在在特定場景爲用戶提供快速便捷的體驗。github
若是你在上班路上通過一家咖啡店想購買一杯咖啡,但發現排隊下單付款的人不少,此刻你只須要使用 iPhone 自帶的掃碼工具掃描咖啡商店的 App Clip 二維碼或 NFC 標籤,就能夠購買一杯咖啡,無需下載安裝咖啡商店的 app。小程序
圖片來源:蘋果官網 swift
這應用場景聽起來是否是跟微信小程序很像?微信小程序
是的,因而咱們在 App Clips 發佈後就馬上進行了 App Clips 和微信小程序的對比和實操(點此閱讀詳細內容)。微信
咱們發現,App Clips 和微信小程序的存在都是爲了解決同一個問題。但就開發而言,App Clips 和微信小程序亦存在着方向上的差別。網絡
微信小程序是 0 到 0.1 再到 1.0。開發者爲提供一個服務,從頭開始開發小程序,用戶用完即走,體驗很棒。App Clips 則是從 1.0 到 0.1,是對現有 app 的一種改良,所以在開發上遇到的麻煩反而會少一些。app
下面,咱們就針對 App Clip 幾個重要特性進行詳細說明,並以 App Clip demo 爲例,講一講開發的那些事。不管你是基於實際業務須要,或者學習、探索新事物的需求,只要具有必定的開發基礎,經過本教程,也能輕鬆搞定一個 App Clip。框架
App Clip 僅限應用於特定場景,即儘量快地完成一個任務,即用即走。你能夠把它看做主 app 的核心功能應用,對於複雜的任務應該在其對應的主 app 完成,所以某些功能被禁止在 App Clip 中使用。
當彈出 App Clip Card 時會當即下載 App Clip,安裝包大小的限制保證了用戶體驗——當用戶打開 App Clip 時大機率已經下載好。
Assets Library, CallKit, CareKit, CloudKit, Contacts, Contacts UI, Core Motion, File Provider, File Provider UI, HealthKit, HomeKit, Media, Player, Messages, Message UI, PhotoKit, ResearchKit, SensorKit, Speech
以上 Framework 不能在 AppClip 使用,若使用了在編譯時不會報錯,而是在運行時報錯或者返回錯誤的結果。
微信小程序不能經過 Push 的方式觸達用戶曾讓開發者憂心忡忡。而手機廠商推出的系統級應用在這方即可以給開發者更多的底氣,不論是蘋果的 App Clips 仍是國產手機生態的快應用,服務的消息推送能力都是吸引開發者的重要能力。
消息推送在 App Clip 的應用分兩種場景:短期內推送和長時間內的推送。(查看官方文檔)
用戶在啓動 App Clip 後,8 小時內能夠收到消息推送。好比用戶在 App Clip 購買了一杯咖啡後就退出了 App Clip,當咖啡準備好了,用戶就會收到一個「咖啡已準備好」的推送。這方式只須要在 Info.plist 屬性文件中添加 NSAppClip Key,並將 NSAppClipRequestEphemeralUserNotification 設置爲 true,就能默認獲取消息推送的權限。
用戶在 App Clip 完成一個任務後,可能過了幾天纔會收到推送。好比用戶在 App Clip 租了輛車,租期爲 3 天,到期後會用戶收到「該還車了」的推送。這種方式和普通 app 的消息推送同樣,都須要獲取用戶的推送受權。
接下來將演示如何使用 知曉雲 MinCloud 快速建立一個動態數據服務的 App Clip。該 Clip 主要展現了一個產品列表,點擊產品便可跳轉到產品詳情頁。經過集成 MinCloud 從知曉雲獲取產品信息,最後爲該 Clip 生成一個二維碼,用戶只需使用 iOS 14 的掃碼工具掃描二維碼,便可跳轉到 Clip。
在已存在的 SugarDemo 工程建立一個 App Clip Target,並命名爲 SugarClip。
這時在工程目錄中多了個 SugarClip 目錄,接下來咱們就能夠在這裏實現 App Clip 了。
經過 CocoaPods 集成 MinCloud,打開 Podfile 文件,添加如下內容:
platform :ios, '11.0' target 'SugarClip' do use_frameworks! pod 'MinCloud', :git => 'https://github.com/ifanrx/hydrogen-ios-sdk.git' pod 'Moya', '~> 13.0' pod 'SnapKit' pod 'Kingfisher' end target 'SugarDemo' do use_frameworks! pod 'MinCloud',:git => 'https://github.com/ifanrx/hydrogen-ios-sdk.git' pod 'SnapKit' pod 'Kingfisher' end
添加完後,執行 pod install 安裝。
安裝好 MinCloud 後在工程中導入 MinCloud,打開 Sugar Clip 的 AppDelegate.swift 文件,在文件頂部添加 import MinCloud,並在 application(_: didFinishLaunchingWithOptions:) 方法內添加:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. BaaS.register(clientID: "fdc4feb5403a985fe681") // 註冊 clientid BaaS.isDebug = true // 是否打印日誌 return true }
Product 結構
首先建立一個 Product 結構,用於表示產品信息。
struct Product: Decodable { public var id: String // 產品 id public var name: String? // 產品名稱 public var participantCount: Int? // 參與討論人數 public var coverImage: String? // 封面圖 public var rating: Double? // 產品評分 public var brief: String? // 產品簡介 public var description: String? // 產品描述 }
獲取產品列表
func loadProductList() { let table = Table(tableId: "105766") table.find { [weak self] (recordList, error) in if let list: List<Product> = recordList?.listInfo.decoded() { self?.products = list.objects self?.tableView.reloadData() // 刷新產品列表 } } }
Table 對應 MinCloud 的表結構,經過表 id 就能夠操做對應表數據。使用 find 操做來獲取產品表全部產品記錄,獲取產品記錄後,將其解碼爲 List 對象。
獲取產品詳情
func loadProduct() { let table = Table(tableId: "105766") table.get(productId) { [weak self] (record, error) in if let product: Product = record?.recordInfo.decoded() { self?.product = product self?.displaySubviews() // 展現產品詳細信息 } } }
使用 get 操做指定產品的 id 獲取產品的全部信息,獲取產品記錄後,將其解碼爲 Product 對象。
在項目中建立了 ProductCell、RatingLabel、BriefView 等視圖控件,分別顯示產品列表項、產品評分、產品簡介等信息。而這些控件能夠在主 App 和 App Clip 複用。所以在 SugarDemo 目錄中建立了須要複用的組件,並將對應的文件的 Target Membership 中勾選 SugarDemo 和 SugarClip 便可複用。
開發完 App Clip 後,咱們能夠點擊 Smart app Banner,掃碼二維碼或 NFC 標籤,點擊 Siri 獲取基於位置的建議,短信等方式來喚醒(invacation)App Clip。
在 AppClip 能夠被喚醒以前須要配置 Launch Experience,即給 App Clip 配置一個 URL 和 App Clip Card 信息。在開發階段能夠直接配置 Local Experience 或者在 testflight 上進行配置。App Clip 準備發佈時,須要在 app store connect 上進行配置。
本文主要介紹 Local Experience 方式,其餘方式可參考蘋果開發文檔。
至此,咱們已經完成了一個 App Clip 的開發。
開發難度:
App Clip 從技術選型上是面向 iOS 開發者的,對 iOS 開發者來講,開發 App Clip 能夠簡單到修改點配置便可發佈。而若是是小程序開發者想要入坑,有兩條路能夠走:
挑戰:
App Clip 現階段只容許使用 Sign in with Apple 蘋果登陸、Apple Pay 蘋果支付,沒法集成微信登陸、微信支付等線下服務場景主流的第三方能力。這對想要使用 App Clip 優化線下服務體驗來講是個挑戰,畢竟國內開通了 Apple Pay 的不是多數。但願 App Clip 團隊早日推出更好的解法。
紅利:
App Clip 體驗輕巧優秀,開發者可經過 App Clip 爲主體 app 作一個試玩試用版本,讓用戶快速體驗,以下降用戶安裝門檻,提升總體轉化率。
經過這篇文章,但願你也能高效的開發一個 App Clip。
相關閱讀