Siri Kit

概覽

  • 最新的WWDC2016大會(huì)上讼积,蘋(píng)果提出iOS10并推出了十個(gè)新特性,homekit脚仔、messageapp等等勤众,大部分是基于iPhone原生應(yīng)用的更新。其中最大的亮點(diǎn)之一是Siri的接口開(kāi)放鲤脏,在iOS10中提供了SiriKit框架在用戶使用Siri的時(shí)候生成INExtension對(duì)象來(lái)告知我們的應(yīng)用们颜,我們可以通過(guò)SiriKit提供的API展示給用戶更多的內(nèi)容,提供更好的體驗(yàn)猎醇。
  • Siri通過(guò)語(yǔ)言處理系統(tǒng)對(duì)用戶發(fā)出的對(duì)話請(qǐng)求進(jìn)行解析之后生成一個(gè)用來(lái)描述對(duì)話內(nèi)容的Intent事件窥突,然后通過(guò)SiriKit框架分發(fā)給集成框架的應(yīng)用程序以此來(lái)獲取應(yīng)用的內(nèi)容,比如通過(guò)文字匹配查找應(yīng)用聊天記錄硫嘶、聊天對(duì)象阻问,蘋(píng)果demo演示的通過(guò)Siri向指定對(duì)象發(fā)送信息等功能,此外還支持為用戶使用蘋(píng)果地圖時(shí)提供應(yīng)用內(nèi)置服務(wù)等功能音半。

SiriKit提供以下六類服務(wù)

  1. 語(yǔ)音和視頻通話 VoIP calling
  2. 發(fā)送消息 Messaging
  3. 收款或者付款 Payments
  4. 圖片搜索 Photo search
  5. 管理鍛煉 Workouts
  6. 行程預(yù)約 Ride booking
    下面來(lái)看一下一個(gè)典型的Siri進(jìn)行交互的語(yǔ)句:


    詞匯邏輯

    其中有三類關(guān)鍵部分:Intent则拷、App以及其他信息是越。Intent就是我要想要通過(guò)Siri去做的事的意圖赛惩,App是通過(guò)手機(jī)安裝的什么App來(lái)做金砍,至于其他的Payee、Amount等信息則是通過(guò)App去完成Intent的必須信息彻桃。而整個(gè)Siri的交互過(guò)程可以參照下圖:


    執(zhí)行流程

    通過(guò)Siri來(lái)獲取用戶語(yǔ)言中的關(guān)鍵詞匯,這些詞匯在Extension中經(jīng)過(guò)一些邏輯處理晾蜘,最終反饋到用戶界面邻眷,與用戶進(jìn)行交互。

Siri通過(guò)Intents extension的擴(kuò)展方式和我們的應(yīng)用進(jìn)行交互剔交,其中Intents Extension扮演協(xié)同Siri共同響應(yīng)用戶的角色肆饶,Intents UI Extension可以提供自定義的用戶響應(yīng)界面,用以增強(qiáng)體驗(yàn)岖常。
當(dāng)我們實(shí)現(xiàn)了Intents extension擴(kuò)展并產(chǎn)生了一個(gè)Siri請(qǐng)求事件時(shí)驯镊,Intent(意圖)事件的處理過(guò)程分Resolve、Confirm和Handle三個(gè)步驟。

Intent處理的三個(gè)階段

生命周期
  • Resolve階段:
    幫助Siri明白用戶的含義
    影響Siri的行為
    提供resolution response
    在Siri獲取用戶的語(yǔ)音輸入之后板惑,生成一個(gè)INIntent對(duì)象橄镜,將語(yǔ)音中的關(guān)鍵信息提取出來(lái)并且填充對(duì)應(yīng)的屬性,該對(duì)象會(huì)傳遞給我們?cè)O(shè)置好的INExtension子類對(duì)象進(jìn)行處理冯乘,根據(jù)子類遵循的不同protocol來(lái)選擇不同的解決方案洽胶。通過(guò)handler(for intent:)返回處理intent的對(duì)象,此對(duì)象會(huì)調(diào)用resolve打頭的實(shí)例方法來(lái)對(duì)Siri的響應(yīng)進(jìn)行一系列的信息處理裆馒,比如是否需要進(jìn)一步的信息提示等姊氓。在resolve階段提供了以下方法:
    successWithResolvedPerson:成功找到匹配的人
    disambiguationWithPeopleToDisambiguate:還需要挑選
    confirmationRequiredWithPersonToConfirm:還需要確認(rèn)下
    needMoreDetailsForPerson:還需要更具體的信息,需要Siri進(jìn)行詢問(wèn)
    unsupportedWithReason:無(wú)法使用指定值
    needsValue:需要某些必需值
    notRequired:應(yīng)用并沒(méi)有要求某些值
  • Confirm階段喷好。
    告訴Siri預(yù)期結(jié)果
    檢查必要的狀態(tài)
    提供Intent response
    Siri提供必要的確認(rèn)提示
    Siri進(jìn)行最后的處理階段他膳,生成答復(fù)對(duì)象,并且向此intent對(duì)象確認(rèn)處理結(jié)果绒窑。大概長(zhǎng)這樣:


    效果圖

    當(dāng)然棕孙,這個(gè)界面是經(jīng)過(guò)自定義的。

  • Handle階段:
    執(zhí)行請(qǐng)求操作
    提供有關(guān)結(jié)果足夠精確的信息
    如果結(jié)果耗時(shí)的話還可提供loading
    在Confirm方法執(zhí)行完成之后些膨,然后顯示結(jié)果給用戶看蟀俊。該階段完成后Intent的生命周期結(jié)束。

實(shí)現(xiàn)一個(gè)Siri Kit應(yīng)用

  1. 升級(jí)到Xcode8订雾,一臺(tái)升級(jí)到iOS10的測(cè)試設(shè)備
  2. Intents extension : resolve肢预、confirm、handle流程
  3. Intents UI extension 提供界面自定義等內(nèi)容
  4. 新建一個(gè)空應(yīng)用并新增一個(gè)target
  5. 新增Intents Extension洼哎,創(chuàng)建時(shí)會(huì)詢問(wèn)是否激活該擴(kuò)展且是否將Intents UI Extension一并創(chuàng)建烫映,都選擇是。
  6. 了解Embedded frameworks


    extension

Embedded frameworks

Embedded frameworks是蘋(píng)果著重提出來(lái)的噩峦,主要用于以下幾個(gè)方面:

  1. 網(wǎng)絡(luò)服務(wù)
  2. 數(shù)據(jù)model
  3. Decision-making logic
  4. 用戶界面
    可以在應(yīng)用主target以及extension分別引用锭沟。

在創(chuàng)建extension之后,我們查看extension的plist文件识补,默認(rèn)的plist結(jié)構(gòu)如圖所示:


plist

IntentsSupported表示的是應(yīng)用支持的Intent事件族淮,IntentsRestrictedWhileLocked表示的是鎖屏下支持的Intent事件。在demo中分別賦值:INSendMessageIntent凭涂。還要注意一下NSExtensionPrincipalClass祝辣,該項(xiàng)內(nèi)容表示的是extension響應(yīng)的入口類。其為INExtension的子類切油,需要實(shí)現(xiàn)handler(for intent: INIntent)方法如下:


INExtension

用以根據(jù)不同的Intent分發(fā)各個(gè)自定義Handler進(jìn)行處理蝙斜。
另外還就是主項(xiàng)目plist 增加NSSiriUsageDescription 這個(gè)是請(qǐng)求Siri權(quán)限時(shí)提示的文案,同時(shí)使用Siri時(shí)澎胡,用戶必須說(shuō)出App的名字孕荠,也就是Bundle display name绢片,都需要進(jìn)行設(shè)置。其中UCSendMessageIntentHandler需要實(shí)現(xiàn)INSendMessageIntentHandling中的方法用以與Siri進(jìn)行交互岛琼,也就是Resolve底循、Confirm和Handler三階段的交互。

示例代碼如下:

  1. 獲取收件人信息槐瑞,可以根據(jù)自身匹配的信息返回不同狀態(tài)與Siri進(jìn)行進(jìn)一步的交互熙涤。


    收件人
  2. 獲取信息內(nèi)容,也就是要給收件人發(fā)送的信息的具體內(nèi)容困檩。


    信息內(nèi)容
  3. 收件人祠挫、信息內(nèi)容確定后,通過(guò)Siri向用戶進(jìn)行信息確認(rèn)悼沿。


    confirm
  4. 信息確認(rèn)后等舔,進(jìn)行最終信息的發(fā)送并向用戶展示結(jié)果。


    handle

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


    效果圖

    至此糟趾,一個(gè)完整的通過(guò)Siri進(jìn)行發(fā)送信息的完整流程結(jié)束慌植。簡(jiǎn)要概括整個(gè)流程,可以參照蘋(píng)果Keynote中的圖示:
    protocol三階段

    當(dāng)然义郑,在上面圖例中蝶柿,有開(kāi)發(fā)者自定義的Siri反饋界面,這個(gè)界面的實(shí)現(xiàn)主要是通過(guò)Intents UI Extension來(lái)實(shí)現(xiàn)的非驮。有興趣的話交汤,可以自行研究,實(shí)現(xiàn)方式也很簡(jiǎn)單劫笙。UI Extension的plist結(jié)構(gòu)可以參照下圖芙扎,只需要設(shè)置一下IntentsSupported即可。


    plist

總結(jié)

雖然蘋(píng)果開(kāi)放了SiriKit的入口填大,但是總體而言還是限制頗多戒洼,具體如何使用還是需要繼續(xù)深入挖掘。類似可以自定義應(yīng)用詞匯栋盹、使用UI Extension過(guò)程中的內(nèi)存管理等等施逾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末敷矫,一起剝皮案震驚了整個(gè)濱河市例获,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌曹仗,老刑警劉巖榨汤,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異怎茫,居然都是意外死亡收壕,警方通過(guò)查閱死者的電腦和手機(jī)妓灌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蜜宪,“玉大人虫埂,你說(shuō)我怎么就攤上這事∑匝椋” “怎么了掉伏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)澳窑。 經(jīng)常有香客問(wèn)我斧散,道長(zhǎng),這世上最難降的妖魔是什么摊聋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任鸡捐,我火速辦了婚禮,結(jié)果婚禮上麻裁,老公的妹妹穿的比我還像新娘箍镜。我一直安慰自己,他們只是感情好煎源,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布鹿寨。 她就那樣靜靜地躺著,像睡著了一般薪夕。 火紅的嫁衣襯著肌膚如雪脚草。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天原献,我揣著相機(jī)與錄音馏慨,去河邊找鬼。 笑死姑隅,一個(gè)胖子當(dāng)著我的面吹牛写隶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讲仰,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慕趴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了鄙陡?” 一聲冷哼從身側(cè)響起冕房,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趁矾,沒(méi)想到半個(gè)月后耙册,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毫捣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年详拙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帝际。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饶辙,死狀恐怖蹲诀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弃揽,我是刑警寧澤侧甫,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站蹋宦,受9級(jí)特大地震影響披粟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冷冗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一守屉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒿辙,春花似錦拇泛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至泰偿,卻和暖如春熄守,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耗跛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工裕照, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人调塌。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓晋南,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親羔砾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子负间,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 引言 在6月14日凌晨的WWDC2016大會(huì)上,蘋(píng)果提出iOS10是一次里程碑并且推出了十個(gè)新特性姜凄,homekit...
    青花瓷的平方閱讀 3,284評(píng)論 0 2
  • 在這里放出原文鏈接地址 Part 3.1: 分析與操作 Intents Intents Extension 的的入...
    李國(guó)安閱讀 1,326評(píng)論 0 4
  • 介紹SiriKit SiriKit是讓你的內(nèi)容通過(guò)Siri展示的一個(gè)框架庫(kù)政溃。當(dāng)用戶向Siri請(qǐng)求特別類型的服務(wù)時(shí),...
    孢子菌閱讀 4,275評(píng)論 1 6
  • 一檀葛、SiriKit介紹 Siri是一款蘋(píng)果 iOS 系統(tǒng)提供的智能語(yǔ)音助手軟件玩祟,它的全名是 Speech Inte...
    火星抄手閱讀 5,549評(píng)論 15 19
  • 在這大天世界里,每個(gè)人都有一份最真的心屿聋,可是往往很多時(shí)間人們都藏起他空扎。
    紅酒佳坊閱讀 193評(píng)論 0 0