Siri Kit

概覽

  • 最新的WWDC2016大會上,蘋果提出iOS10并推出了十個新特性,homekit、messageapp等等,大部分是基于iPhone原生應用的更新。其中最大的亮點之一是Siri的接口開放,在iOS10中提供了SiriKit框架在用戶使用Siri的時候生成INExtension對象來告知我們的應用,我們可以通過SiriKit提供的API展示給用戶更多的內容,提供更好的體驗。
  • Siri通過語言處理系統對用戶發出的對話請求進行解析之后生成一個用來描述對話內容的Intent事件,然后通過SiriKit框架分發給集成框架的應用程序以此來獲取應用的內容,比如通過文字匹配查找應用聊天記錄、聊天對象,蘋果demo演示的通過Siri向指定對象發送信息等功能,此外還支持為用戶使用蘋果地圖時提供應用內置服務等功能。

SiriKit提供以下六類服務

  1. 語音和視頻通話 VoIP calling
  2. 發送消息 Messaging
  3. 收款或者付款 Payments
  4. 圖片搜索 Photo search
  5. 管理鍛煉 Workouts
  6. 行程預約 Ride booking
    下面來看一下一個典型的Siri進行交互的語句:


    詞匯邏輯

    其中有三類關鍵部分:Intent、App以及其他信息。Intent就是我要想要通過Siri去做的事的意圖,App是通過手機安裝的什么App來做,至于其他的Payee、Amount等信息則是通過App去完成Intent的必須信息。而整個Siri的交互過程可以參照下圖:


    執行流程

    通過Siri來獲取用戶語言中的關鍵詞匯,這些詞匯在Extension中經過一些邏輯處理,最終反饋到用戶界面,與用戶進行交互。

Siri通過Intents extension的擴展方式和我們的應用進行交互,其中Intents Extension扮演協同Siri共同響應用戶的角色,Intents UI Extension可以提供自定義的用戶響應界面,用以增強體驗。
當我們實現了Intents extension擴展并產生了一個Siri請求事件時,Intent(意圖)事件的處理過程分Resolve、Confirm和Handle三個步驟。

Intent處理的三個階段

生命周期
  • Resolve階段:
    幫助Siri明白用戶的含義
    影響Siri的行為
    提供resolution response
    在Siri獲取用戶的語音輸入之后,生成一個INIntent對象,將語音中的關鍵信息提取出來并且填充對應的屬性,該對象會傳遞給我們設置好的INExtension子類對象進行處理,根據子類遵循的不同protocol來選擇不同的解決方案。通過handler(for intent:)返回處理intent的對象,此對象會調用resolve打頭的實例方法來對Siri的響應進行一系列的信息處理,比如是否需要進一步的信息提示等。在resolve階段提供了以下方法:
    successWithResolvedPerson:成功找到匹配的人
    disambiguationWithPeopleToDisambiguate:還需要挑選
    confirmationRequiredWithPersonToConfirm:還需要確認下
    needMoreDetailsForPerson:還需要更具體的信息,需要Siri進行詢問
    unsupportedWithReason:無法使用指定值
    needsValue:需要某些必需值
    notRequired:應用并沒有要求某些值
  • Confirm階段。
    告訴Siri預期結果
    檢查必要的狀態
    提供Intent response
    Siri提供必要的確認提示
    Siri進行最后的處理階段,生成答復對象,并且向此intent對象確認處理結果。大概長這樣:


    效果圖

    當然,這個界面是經過自定義的。

  • Handle階段:
    執行請求操作
    提供有關結果足夠精確的信息
    如果結果耗時的話還可提供loading
    在Confirm方法執行完成之后,然后顯示結果給用戶看。該階段完成后Intent的生命周期結束。

實現一個Siri Kit應用

  1. 升級到Xcode8,一臺升級到iOS10的測試設備
  2. Intents extension : resolve、confirm、handle流程
  3. Intents UI extension 提供界面自定義等內容
  4. 新建一個空應用并新增一個target
  5. 新增Intents Extension,創建時會詢問是否激活該擴展且是否將Intents UI Extension一并創建,都選擇是。
  6. 了解Embedded frameworks


    extension

Embedded frameworks

Embedded frameworks是蘋果著重提出來的,主要用于以下幾個方面:

  1. 網絡服務
  2. 數據model
  3. Decision-making logic
  4. 用戶界面
    可以在應用主target以及extension分別引用。

在創建extension之后,我們查看extension的plist文件,默認的plist結構如圖所示:


plist

IntentsSupported表示的是應用支持的Intent事件,IntentsRestrictedWhileLocked表示的是鎖屏下支持的Intent事件。在demo中分別賦值:INSendMessageIntent。還要注意一下NSExtensionPrincipalClass,該項內容表示的是extension響應的入口類。其為INExtension的子類,需要實現handler(for intent: INIntent)方法如下:


INExtension

用以根據不同的Intent分發各個自定義Handler進行處理。
另外還就是主項目plist 增加NSSiriUsageDescription 這個是請求Siri權限時提示的文案,同時使用Siri時,用戶必須說出App的名字,也就是Bundle display name,都需要進行設置。其中UCSendMessageIntentHandler需要實現INSendMessageIntentHandling中的方法用以與Siri進行交互,也就是Resolve、Confirm和Handler三階段的交互。

示例代碼如下:

  1. 獲取收件人信息,可以根據自身匹配的信息返回不同狀態與Siri進行進一步的交互。


    收件人
  2. 獲取信息內容,也就是要給收件人發送的信息的具體內容。


    信息內容
  3. 收件人、信息內容確定后,通過Siri向用戶進行信息確認。


    confirm
  4. 信息確認后,進行最終信息的發送并向用戶展示結果。


    handle

    具體展示到界面上的效果圖如下


    效果圖

    至此,一個完整的通過Siri進行發送信息的完整流程結束。簡要概括整個流程,可以參照蘋果Keynote中的圖示:
    protocol三階段

    當然,在上面圖例中,有開發者自定義的Siri反饋界面,這個界面的實現主要是通過Intents UI Extension來實現的。有興趣的話,可以自行研究,實現方式也很簡單。UI Extension的plist結構可以參照下圖,只需要設置一下IntentsSupported即可。


    plist

總結

雖然蘋果開放了SiriKit的入口,但是總體而言還是限制頗多,具體如何使用還是需要繼續深入挖掘。類似可以自定義應用詞匯、使用UI Extension過程中的內存管理等等。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 引言 在6月14日凌晨的WWDC2016大會上,蘋果提出iOS10是一次里程碑并且推出了十個新特性,homekit...
    青花瓷的平方閱讀 3,331評論 0 2
  • 在這里放出原文鏈接地址 Part 3.1: 分析與操作 Intents Intents Extension 的的入...
    李國安閱讀 1,351評論 0 4
  • 介紹SiriKit SiriKit是讓你的內容通過Siri展示的一個框架庫。當用戶向Siri請求特別類型的服務時,...
    孢子菌閱讀 4,316評論 1 6
  • 一、SiriKit介紹 Siri是一款蘋果 iOS 系統提供的智能語音助手軟件,它的全名是 Speech Inte...
    火星抄手閱讀 5,592評論 15 19
  • 在這大天世界里,每個人都有一份最真的心,可是往往很多時間人們都藏起他。
    紅酒佳坊閱讀 200評論 0 0