愛奇藝iOS深度實踐 | SiriKit詳解應用篇

愛奇藝技術產品團隊發表於2020-07-15

蘋果全球開發者大會Worldwide Developers Conference,下文簡稱WWDC)自1983年加州首次舉辦以來至今一直備受iOS 開發者關注,第一代 iOS 也從2007年一路走來,如今 iOS 系統的版本也已經到了兩位數。這次 iOS 13 帶來了新的對話式快捷指令、更深層次的自定和新媒體播放體驗,讓各項功能變得更加強大。WWDC2019 之後,愛奇藝對 Siri 進行了相關的技術研究和探索,本文重點討論SiriKit Media Intents 和 Siri Suggestions,鑑於業界對此討論也不併多,結合愛奇藝的場景上線了媒體播放意圖、媒體搜尋意圖、Siri 建議、Siri 新媒體播放建議等功能,幫助使用者更便捷的使用愛奇藝。

SiriKit

2016年 WWDC大會上蘋果開放了 Siri 的 API,開發者們可以利用 SiriKit 將自己的服務提供給使用者。SiriKit 負責處理使用者透過 Siri 對 App 服務的請求,並定義了使用者可以發出的請求型別,稱為意圖,使用域將相關的意圖進行分組。例如,訊息域具有傳送訊息,搜尋訊息以及將訊息標記為已讀或未讀的意圖。App 透過建立能與 Siri 通訊的擴充套件來使用 SiriKit,使用時 App 無需處於執行狀態。此擴充套件會對它能夠處理的特定域和意圖進行註冊。比如,一個資訊 App 可以註冊支援資訊的域,以及傳送資訊的意圖,SiriKit 包含 Intents IntentsUI 框架,支援兩種型別的擴充套件:

1. Intents app extension: 負責接收來自 SiriKit 的使用者請求,並將其轉換為 App 特定的操作。
2. Intents UI app extension: 支援自定義擴充套件程式的樣式,但自定義檢視控制器無法收到任何觸控事件。

愛奇藝iOS深度實踐 | SiriKit詳解應用篇

SiriKit Media Intents

在 WWDC2019 上蘋果介紹了新的媒體播放服務,並且給開發者開放更多的能力。愛奇藝也同步開始技術調研,並在 iOS 13 正式版釋出前上線了對媒體播放意圖的支援。Media domain 負責處理使用者對媒體類服務的請求,支援媒體播放、新增媒體、搜尋媒體、媒體偏好四種意圖。藉助 Media domain,使用者無需啟動 App 即可實現對音訊媒體的播放和控制,這對音訊類 App 非常有意義。對於影片,Siri 會幫使用者啟動 App 並在前臺播放,同樣簡化了播放流程,提高使用體驗。

愛奇藝媒體播放意圖接入流程


愛奇藝iOS深度實踐 | SiriKit詳解應用篇

1. Extension Target Supported Intents Class Name 新增 INPlayMediaIntentMedia Categories 選擇適合 App 的選項,支援多選;
2. 需要在前臺播放媒體時,App Target Info.plist NSUserActivityTypes 新增 Intent Class Name.

  • 在後臺播放,App 收到的系統回撥是 application:handleIntent:completionHandler:
  • 在前臺播放,App 收到的系統回撥是 
    application:continueUserActivity:restorationHandler
    需要在 Info.plist 中宣告 App 支援的活動型別.

3. 提供意圖示例短語對於媒體播放意圖缺失不會影響功能,但提交商店時會收到缺失示例短語警告
4. App Info.plist 中設定 App 別名(可選),使用者透過 Siri 使用 App 服務時,必須在對話中包括 App 的名稱,為了方便表述,可以為 App 提供別名。比如,愛奇藝 iPad 版名稱為 “愛奇藝HD”,別名為“愛奇藝”。當 iPad 同時安裝了“愛奇藝” App 和“愛奇藝HD” App 時,Siri 會優先選擇“愛奇藝” App 響應使用者對“愛奇藝”服務的請求。
5. 處理請求:
1).典型的處理流程需要三個步驟:Resolve、Confirm 和 Handle

  • Resolve: 驗證意圖的引數,確保具有滿足使用者請求所需的資訊。SiriKit 會呼叫每個引數的解析方法,根據返回的解析結果決定如何繼續。
  • Confirm: 對意圖引數執行最終驗證,並驗證 App 的服務已準備就緒,可以實現意圖
  • Handle: 實現意圖,並向 SiriKit 反饋處理結果。

愛奇藝iOS深度實踐 | SiriKit詳解應用篇2).Media domain 的意圖處理建議省略 Confirm 步驟。Apple 在分析自己 App 的使用情況時,發現Confirm 步驟會降低人們繼續播放媒體的可能性。

  • 媒體播放意圖中,Resolve 步驟負責解析意圖的 INMediaSearch 物件,並返回具體可播放的媒體物件。
  • mediaSearch 包含的媒體資訊可能不會精確匹配實際的媒體名稱,因為使用者的表述和 Siri 語音識別的結果可能是不準確的。搜尋服務的模糊查詢會返回準確的媒體資訊,Siri 也會正確的提示實際播放的內容。
  •  mediaSearch 可能為空,使用者沒有指定具體播放的內容。不建議主動詢問要播放什麼,使用者可能會因此而退出使用。開發者需要做出決定,比如播放推薦或熱門的內容,或者按使用者的播放記錄繼續播放。
  • 除了媒體名稱,mediaSearch 還包括媒體型別、藝術家、排序等資訊,這些資訊應結合使用,縮小搜尋範圍,播放更匹配的內容。
  • 愛奇藝對使用者的意圖做了進一步的識別,比如播放“破冰行動大結局”,“延禧攻略第十集”,“最新的奇葩說”等,提供更好的使用者體驗。

3).擴充套件程式的生命週期很短,媒體播放是由 App 完成的,Handle 步驟只需返回響應結果即可。

  • 音訊媒體應該在後臺播放,響應碼為:
    INPlayMediaIntentResponseCodeHandleInApp
  • 影片媒體需要在前臺播放,響應碼為:
     INPlayMediaIntentResponseCodeContinueInApp

4).App 讀取 intent 中的媒體資訊,開始播放。

  •  後臺播放,App 收到的系統回撥是 
    application:handleIntent:completionHandler:,intent 引數包含了需要的資訊;
  • 前臺播放,App 收到的系統回撥是 
    application:continueUserActivity:restorationHandler:,userActivity.interaction.intent 包含了需要的資訊。
    愛奇藝會為媒體播放意圖跳過啟動廣告,提高播放體驗。

5).App 讀取 intent 中的媒體資訊,開始播放。

  • 後臺播放,App 收到的系統回撥是 application:handleIntent:completionHandler:,intent 引數包含了需要的資訊;
  • 前臺播放App 收到的系統回撥是 application:continueUserActivity:restorationHandler:,userActivity.interaction.intent 包含了需要的資訊。愛奇藝會為媒體播放意圖跳過啟動廣告,提高播放體驗。

愛奇藝iOS深度實踐 | SiriKit詳解應用篇

愛奇藝媒體搜尋意圖接入流程

媒體搜尋意圖只支援 App 在前臺展示搜尋結果,在完成播放意圖的支援後,搜尋意圖的實現比較簡單。
愛奇藝iOS深度實踐 | SiriKit詳解應用篇
細節及注意事項如下:
1. 處理請求,搜尋意圖需要 Resolve 和 Handle 兩個步驟。

  •  Resolve 步驟主要提取搜尋內容
  •  Handle 步驟返回響應結果即可,響應碼 INSearchForMediaIntentResponseCodeContinueInApp

    愛奇藝iOS深度實踐 | SiriKit詳解應用篇

 2. App 在系統回撥 
application:continueUserActivity:restorationHandler: 拿到搜尋資訊,展示搜尋結果。

愛奇藝iOS深度實踐 | SiriKit詳解應用篇

Siri Suggestions

Siri 基於使用者的習慣和使用 App 的方式,提供接下來可能要做的事情的建議。例如,如果使用者經常在上午買咖啡,Siri 可能會在使用者通常下單的時間建議使用者下單。Siri 會在鎖定螢幕或“搜尋”中向使用者建議快捷指令。Shortcuts 使開發者可以將 App 的關鍵功能與 Siri 接通,讓使用者可以在新的場景以新的方式使用 App。
愛奇藝iOS深度實踐 | SiriKit詳解應用篇

定義 Shortcu

開發者需要考慮為哪些重要的、經常使用的功能定義 Shortcut,幫助使用者更快速的使用 App 的功能。有兩種定義的方式,NSUserActivity 和 Intents

  • NSUserActivity 是一種表示 App 狀態的輕量級方式,如果只是要構建開啟 App 內某個功能的簡單 shortcut,建議使用這種方式。定義 Shortcut,只需在 App Target Info.plist NSUserActivityTypes 中新增型別即可,例如,com.myapp.name.my-activity-type;
  • Intents 可以提供最優的 Shortcuts 體驗。Siri 會根據意圖引數提供更加智慧的預測,並且支援自定義語音回覆和定製化的 UI,結合 Intents App Extension,無需啟動 App 即可完成響應。

開發者可以選擇自定義意圖或使用系統內建意圖。在自定義之前,應檢視 Siri Domains,優先選擇滿足需要的內建意圖。
愛奇藝iOS深度實踐 | SiriKit詳解應用篇

捐贈 Shortcut

每次使用者在 App 中使用支援了 shortcut 的功能時,App 需要告訴 Siri,這樣 Siri 才會學習到建議 shortcut 的正確時機和場景。

  • NSUserActivity:Siri 會根據 userInfo 中的資訊尋找規律,使用 requiredUserInfoKeys 指定 userInfo 中哪些關鍵 key 在尋找規律時用來對比。persistentIdentifier 在刪除捐贈時使用。

愛奇藝iOS深度實踐 | SiriKit詳解應用篇
愛奇藝iOS深度實踐 | SiriKit詳解應用篇· Intents:
Siri 會將捐贈按意圖引數解構組合為 Intent Definition File 中定義的所有可能的 shortcut,從而實現更智慧的預測。groupIdentifier 在刪除捐贈時使用。
愛奇藝iOS深度實踐 | SiriKit詳解應用篇
愛奇藝iOS深度實踐 | SiriKit詳解應用篇

刪除捐贈

如果已捐贈的 shortcut 中包括使用者刪除的資訊,或者 App 不再支援已捐贈的功能時,應該從 Siri 中刪除捐贈。

· NSUserActivity
愛奇藝iOS深度實踐 | SiriKit詳解應用篇· Intents
愛奇藝iOS深度實踐 | SiriKit詳解應用篇

Handle Shortcuts

  • NSUserActivity 需要在 App 內處理;

愛奇藝iOS深度實踐 | SiriKit詳解應用篇

  • Intents 支援後臺使用的 shortcut,需要建立 Intents App Extension。

意圖處理的具體方法參考上述媒體播放意圖《處理請求》部分。

愛奇藝 Siri Suggestions 實現

愛奇藝目前支援兩種建議,常用功能建議和媒體播放建議。Siri 建議出現的時機依賴捐贈形成的規律,而具體策略並不完全透明。開發者在日常生活中,有遇到其他 App 的 Siri 建議功能彈出略頻繁,可能會對使用者有所打擾。愛奇藝在捐贈播放行為時,會考慮播放的持續性,希望建議出現時,使用者確實有觀看時間和觀看需求,避免使用者在碎片時間偶然播放形成規律帶來不好的體驗。

  • 常用功能建議使用 NSUserActivity 實現,點選後會開啟播放記錄頁面;

愛奇藝iOS深度實踐 | SiriKit詳解應用篇

  • 媒體播放建議使用系統內建的 INPlayMediaIntent 實現。App 捐贈當前播放行為,但使用者可能不會重複觀看已看過的內容。INUpcomingMediaManager 提供了更新建議內容的方式,可以向使用者建議未看過或未看完的內容。
  • 支援在後臺執行的 shortcut 可以定製擴充套件程式的 UI,給使用者更好的體驗。愛奇藝也對 Intents UI app extension 做了調研,詳細實現方式請參考官方文件

愛奇藝iOS深度實踐 | SiriKit詳解應用篇
愛奇藝iOS深度實踐 | SiriKit詳解應用篇



總結

SiriKit 的能力還需要不斷完善,仍有一些可最佳化的地方,比如當使用者播放意圖但不指定具體 App 時,希望可以展示支援播放的 App 列表給使用者選擇。隨著 Apple 開放更多 Siri 相關的能力,使用者可以在新的場景以新的方式使用 App 的功能。開發者可以參考以下資料,為 App 支援 Siri 相關功能。

· SiriKit

· Introduction to Siri Shortcuts

· Introducing Parameters for Shortcuts

· Introducing SiriKit Media Intents

愛奇藝iOS深度實踐 | SiriKit詳解應用篇

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945252/viewspace-2704748/,如需轉載,請註明出處,否則將追究法律責任。

相關文章