愛奇藝iOS深度實踐 | SiriKit詳解應用篇
SiriKit
2016年 WWDC大會上蘋果開放了 Siri 的 API,開發者們可以利用 SiriKit 將自己的服務提供給使用者。SiriKit 負責處理使用者透過 Siri 對 App 服務的請求,並定義了使用者可以發出的請求型別,稱為意圖,使用域將相關的意圖進行分組。例如,訊息域具有傳送訊息,搜尋訊息以及將訊息標記為已讀或未讀的意圖。App 透過建立能與 Siri 通訊的擴充套件來使用 SiriKit,使用時 App 無需處於執行狀態。此擴充套件會對它能夠處理的特定域和意圖進行註冊。比如,一個資訊 App 可以註冊支援資訊的域,以及傳送資訊的意圖,SiriKit 包含 Intents 和 IntentsUI 框架,支援兩種型別的擴充套件:
SiriKit Media Intents
在 WWDC2019 上蘋果介紹了新的媒體播放服務,並且給開發者開放更多的能力。愛奇藝也同步開始技術調研,並在 iOS 13 正式版釋出前上線了對媒體播放意圖的支援。Media domain 負責處理使用者對媒體類服務的請求,支援媒體播放、新增媒體、搜尋媒體、媒體偏好四種意圖。藉助 Media domain,使用者無需啟動 App 即可實現對音訊媒體的播放和控制,這對音訊類 App 非常有意義。對於影片,Siri 會幫使用者啟動 App 並在前臺播放,同樣簡化了播放流程,提高使用體驗。
愛奇藝媒體播放意圖接入流程
在後臺播放,App 收到的系統回撥是 application:handleIntent:completionHandler: 在前臺播放,App 收到的系統回撥是 application:continueUserActivity:restorationHandler 需要在 Info.plist 中宣告 App 支援的活動型別.
Resolve: 驗證意圖的引數,確保具有滿足使用者請求所需的資訊。SiriKit 會呼叫每個引數的解析方法,根據返回的解析結果決定如何繼續。 Confirm: 對意圖引數執行最終驗證,並驗證 App 的服務已準備就緒,可以實現意圖。 Handle: 實現意圖,並向 SiriKit 反饋處理結果。
媒體播放意圖中,Resolve 步驟負責解析意圖的 INMediaSearch 物件,並返回具體可播放的媒體物件。 mediaSearch 包含的媒體資訊可能不會精確匹配實際的媒體名稱,因為使用者的表述和 Siri 語音識別的結果可能是不準確的。搜尋服務的模糊查詢會返回準確的媒體資訊,Siri 也會正確的提示實際播放的內容。 mediaSearch 可能為空,使用者沒有指定具體播放的內容。不建議主動詢問要播放什麼,使用者可能會因此而退出使用。開發者需要做出決定,比如播放推薦或熱門的內容,或者按使用者的播放記錄繼續播放。 除了媒體名稱,mediaSearch 還包括媒體型別、藝術家、排序等資訊,這些資訊應結合使用,縮小搜尋範圍,播放更匹配的內容。 愛奇藝對使用者的意圖做了進一步的識別,比如播放“破冰行動大結局”,“延禧攻略第十集”,“最新的奇葩說”等,提供更好的使用者體驗。
音訊媒體應該在後臺播放,響應碼為: INPlayMediaIntentResponseCodeHandleInApp 影片媒體需要在前臺播放,響應碼為: INPlayMediaIntentResponseCodeContinueInApp
後臺播放,App 收到的系統回撥是 application:handleIntent:completionHandler:,intent 引數包含了需要的資訊; 前臺播放,App 收到的系統回撥是 application:continueUserActivity:restorationHandler:,userActivity.interaction.intent 包含了需要的資訊。 愛奇藝會為媒體播放意圖跳過啟動廣告,提高播放體驗。
後臺播放,App 收到的系統回撥是 application:handleIntent:completionHandler:,intent 引數包含了需要的資訊; 前臺播放,App 收到的系統回撥是 application:continueUserActivity:restorationHandler:,userActivity.interaction.intent 包含了需要的資訊。愛奇藝會為媒體播放意圖跳過啟動廣告,提高播放體驗。
愛奇藝媒體搜尋意圖接入流程
Resolve 步驟主要提取搜尋內容 Handle 步驟返回響應結果即可,響應碼 INSearchForMediaIntentResponseCodeContinueInApp
Siri Suggestions
定義 Shortcu
NSUserActivity 是一種表示 App 狀態的輕量級方式,如果只是要構建開啟 App 內某個功能的簡單 shortcut,建議使用這種方式。定義 Shortcut,只需在 App Target Info.plist NSUserActivityTypes 中新增型別即可,例如,com.myapp.name.my-activity-type; Intents 可以提供最優的 Shortcuts 體驗。Siri 會根據意圖引數提供更加智慧的預測,並且支援自定義語音回覆和定製化的 UI,結合 Intents App Extension,無需啟動 App 即可完成響應。
捐贈 Shortcut
NSUserActivity:Siri 會根據 userInfo 中的資訊尋找規律,使用 requiredUserInfoKeys 指定 userInfo 中哪些關鍵 key 在尋找規律時用來對比。persistentIdentifier 在刪除捐贈時使用。
刪除捐贈
如果已捐贈的 shortcut 中包括使用者刪除的資訊,或者 App 不再支援已捐贈的功能時,應該從 Siri 中刪除捐贈。
Handle Shortcuts
NSUserActivity 需要在 App 內處理;
Intents 支援後臺使用的 shortcut,需要建立 Intents App Extension。
愛奇藝 Siri Suggestions 實現
愛奇藝目前支援兩種建議,常用功能建議和媒體播放建議。Siri 建議出現的時機依賴捐贈形成的規律,而具體策略並不完全透明。開發者在日常生活中,有遇到其他 App 的 Siri 建議功能彈出略頻繁,可能會對使用者有所打擾。愛奇藝在捐贈播放行為時,會考慮播放的持續性,希望建議出現時,使用者確實有觀看時間和觀看需求,避免使用者在碎片時間偶然播放形成規律帶來不好的體驗。
常用功能建議使用 NSUserActivity 實現,點選後會開啟播放記錄頁面;
媒體播放建議使用系統內建的 INPlayMediaIntent 實現。App 捐贈當前播放行為,但使用者可能不會重複觀看已看過的內容。INUpcomingMediaManager 提供了更新建議內容的方式,可以向使用者建議未看過或未看完的內容。 支援在後臺執行的 shortcut 可以定製擴充套件程式的 UI,給使用者更好的體驗。愛奇藝也對 Intents UI app extension 做了調研,詳細實現方式請參考官方文件
總結
SiriKit 的能力還需要不斷完善,仍有一些可最佳化的地方,比如當使用者播放意圖但不指定具體 App 時,希望可以展示支援播放的 App 列表給使用者選擇。隨著 Apple 開放更多 Siri 相關的能力,使用者可以在新的場景以新的方式使用 App 的功能。開發者可以參考以下資料,為 App 支援 Siri 相關功能。
· SiriKit
· Introduction to Siri Shortcuts
· Introducing Parameters for Shortcuts
· Introducing SiriKit Media Intents
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945252/viewspace-2704748/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iOS開發-SiriKit應用iOS
- iOS 10 SiriKit QQ 適配詳解iOS
- iOS多執行緒詳解:實踐篇iOS執行緒
- 愛奇藝內容中臺之Serverless應用與實踐Server
- 詳解JavaScript陣列特性與實踐應用JavaScript陣列
- 詳解愛奇藝ZoomAI影片增強技術的應用OOMAI
- 深度學習的應用與實踐深度學習
- 愛奇藝網路協程編寫高併發應用實踐
- React 應用實踐(基礎篇)React
- 詳解愛奇藝ZoomAI視訊增強技術的應用OOMAI
- 愛奇藝深度學習雲平臺的實踐及優化深度學習優化
- 愛奇藝元件化設計在會員業務的應用和實踐元件化
- 愛奇藝深度學習雲平臺的實踐及最佳化深度學習
- 深度理解JavaScript陣列特性與實踐應用JavaScript陣列
- quartz (從原理到應用)詳解篇quartz
- Android篇 | 愛奇藝App啟動最佳化實踐分享AndroidAPP
- 學術派 | 愛奇藝深度語義表示學習的探索與實踐
- iOS VIPER架構實踐(二):VIPER詳解與實現iOS架構
- 深度學習在小米電商業務的應用實踐深度學習
- 深度剖析——超融合架構應用與實踐分享架構
- iOS專案開發MVVM架構實踐(第三篇:應用佈局)iOSMVVM架構
- Android系統服務DropBoxManagerService詳解與實踐應用Android
- 最佳實踐(2):iOS開發篇iOS
- iOS-block迴圈引用詳解和應用iOSBloC
- iOS開發中的Scroll View應用詳解iOSView
- iOS 中的事件傳遞和響應機制 - 實踐篇iOS事件
- iOS 中的事件傳遞和響應機制 – 實踐篇iOS事件
- 拯救老電影——詳解愛奇藝ZoomAI視訊增強技術的應用OOMAI
- 一文詳解雲原生應用實踐與未來趨勢
- JavaScript Event Loop 機制詳解與 Vue.js 中實踐應用JavaScriptOOPVue.js
- iOS應用自動推送的方法研究與實踐iOS
- 重新整理 .net core 實踐篇————配置應用[一]
- Android應用增量升級方案之實踐篇Android
- 愛奇藝混合雲內網DNS實踐內網DNS
- 深度解讀!阿里統一應用管理架構升級的教訓與實踐阿里架構
- TiDB 在摩拜單車的深度實踐及應用TiDB
- 深度學習在美團搜尋廣告排序的應用實踐深度學習排序
- 圖解「正向代理」的原理 + 實踐應用圖解