SiriKit 實踐

ios 10 給我們帶來了很多驚喜的特性件炉,其中很多為開發(fā)者提供的勘究。其中一個就是SiriKit。

Sirikit提供給開發(fā)者使用了斟冕!這聽起來是個不錯的消息口糕,WWDC上也是響起了雷鳴般的掌聲。相信許多開發(fā)者和我一樣磕蛇,開始幻想了景描,Siri現(xiàn)在可以與我自己的應(yīng)用對話了,我可以寫一些好玩的功能秀撇,或者新開發(fā)一些好玩的應(yīng)用超棺。

不妙的是,WWDC在后面又說只支持下列6類應(yīng)用:

語音和視頻通話
發(fā)送消息
收款或者付款
圖片搜索
管理鍛煉
行程預(yù)約

看樣子Siri并沒有那么開放呵燕。

我的疑問就來了棠绘,SiriKit 是怎樣限制只能這幾種應(yīng)用呢?

我先來介紹一個重要的概念I(lǐng)ntents
字面翻譯過來是意圖, 意向再扭。Siri說出來的話氧苍,不會直接進(jìn)入到我們的app,而是會先生成一個NSIntent對象泛范。對應(yīng)6種應(yīng)用让虐,都有各自的Intents。例如發(fā)送消息的應(yīng)用是INSendMessageIntent罢荡,管理鍛煉是INStartWorkoutIntent, INEndWorkoutIntent等等澄干。每種Intents都有相關(guān)的屬性。
例如INSendMessageIntent

public class INSendMessageIntent : INIntent {

    
    public init(recipients: [INPerson]?, content: String?, groupName: String?, serviceName: String?, sender: INPerson?)

    
    // 發(fā)送目標(biāo)對象
    public var recipients: [INPerson]? { get }

    
    // 發(fā)送內(nèi)容
    public var content: String? { get }

    // 發(fā)送的群名稱柠傍,組名稱
    public var groupName: String? { get }

    
    // 用什么服務(wù)來發(fā)
    public var serviceName: String? { get }

    
    // 發(fā)送來源對象
    @NSCopying public var sender: INPerson? { get }
}

Siri將說出的話麸俘,進(jìn)行分詞分析
1.確定app名稱, 你說的話里面要含app名稱,比如“微信發(fā)送消息給xx”惧笛。經(jīng)過我自己的實踐从媚,也不必每次都要帶上app名稱,siri會聰明的記住你上次喚醒的應(yīng)用患整,后面就不用帶上app名稱拜效,直接“發(fā)送消息給xx”就可以了
2.匹配應(yīng)用類型關(guān)鍵字,確定這些分詞是否存在關(guān)鍵字各谚,比如說發(fā)送消息應(yīng)用的關(guān)鍵字就是“發(fā)送”紧憾,管理鍛煉的應(yīng)用就是“鍛煉”

上面兩點滿足了,才可以進(jìn)入Sirikit extension
3.對號入座昌渤,看其他分詞是否能夠填充到Intent相應(yīng)的屬性中赴穗,你后面只能使用Intent提供的這些屬性,其他的分詞Siri分析不能填充屬性的,都被忽略

可見, 6中應(yīng)用都有各自的關(guān)鍵字和規(guī)定屬性般眉,SiriKit就是靠這種規(guī)范來限制應(yīng)用的了赵。

SiriKit必備的三個步驟

WWDC上講了SiriKit必備的三個步驟,這也是開發(fā)者需要實現(xiàn)的甸赃。

Paste_Image.png
  • Resolve階段:上面說的第三條對號入座就是這個階段柿汛,將語音中的關(guān)鍵信息提取出來并且填充INIntent中對應(yīng)的屬性。這是信息獲取階段埠对,簡單說就是“全與不全”
  • Confirm階段:Resolve階段已經(jīng)把完整的信息交給了這個階段络断,這個階段就是根據(jù)自身App的邏輯判斷,這個信息是否允許執(zhí)行项玛,簡單的說就是“能與不能”貌笨,如果判定為允許,那么INIntent就會信息就會傳遞給UI展示
  • handle階段: UI展示后稍计,用戶語音或手動確認(rèn)進(jìn)入handle階段,這個時候就可以將INIntent按照自己意愿去處理了裕循,處理之后的結(jié)果通過UI反饋給用戶

SiriKit extension 的創(chuàng)建

這個地方大同小異臣嚣,請允許我引用其他文章
用開發(fā)者賬號去下載Xcode8_beta版,然后升級一臺設(shè)備到ios10
創(chuàng)建一個空白項目剥哑,新增一個TARGET

Paste_Image.png
Paste_Image.png

如上圖所示硅则,我創(chuàng)建的Intents Extension被我命名為LXDSiriExtension。記住在創(chuàng)建好一個Extension的時候株婴,會詢問你是否激活這個擴(kuò)展怎虫,勾選是。另外還會提示你是否連同Intents UI Extension一并創(chuàng)建了困介,我們同樣選是大审。這樣我們在項目下面總共創(chuàng)建了LXDSiriExtension和LXDSiriExtensionUI兩個TARGET,這兩個文件目錄下面分別存在著一個新的info.plist文件座哩,這個文件用來設(shè)置intent事件發(fā)生時我們設(shè)置的處理類徒扶。

Paste_Image.png

按圖中的層次展開,IntentsSupported和IntentsRestrictedWhileLocked分別是兩個字符串?dāng)?shù)組根穷,每一個字符串表示的是應(yīng)用擴(kuò)展處理的intent事件的類名姜骡。前者表示支持的事件類型,后者表示在非鎖屏狀態(tài)下執(zhí)行的事件類型屿良。文件默認(rèn)是workout類型的事件圈澈,在這里筆者改成了發(fā)送消息INSendMessageIntent。除此之外尘惧,NSExtensionPrincipalClass對應(yīng)的是INExtension子類類名康栈,這個類用來獲取處理intent事件的類。

Paste_Image.png

SiriKit extension UI
Paste_Image.png

拿發(fā)送信息應(yīng)用為例
這個是蘋果提供Sirikit的demo, 跑出來界面,用來發(fā)送信息的谅将。我們所能管轄的UI部分漾狼,就是紅色圈圈里面的內(nèi)容,其他都是系統(tǒng)的饥臂,不在我們的管轄范圍之內(nèi)逊躁。

那么這個紅色區(qū)域是用來做什么的呢,文檔上說隅熙,是來展示我們應(yīng)用的商標(biāo)的稽煤,因為這個界面各種應(yīng)用的模式都是這個樣子,用商標(biāo)來區(qū)分囚戚,讓用戶知道用的是哪個應(yīng)用酵熙。

在siriextensionUI的代碼中,主要是靠configure來自定義頁面的

// Prepare your view controller for the interaction to handle.
    func configure(with interaction: INInteraction!, context: INUIHostedViewContext, completion: ((CGSize) -> Void)!) {
        // Do configuration here, including preparing views and calculating a desired size for presentation.
        if interaction.intent is INSendMessageIntent {
            let sendMessageIntent:INSendMessageIntent = interaction.intent as! INSendMessageIntent;
            // 如果有收信人就顯示紅色背景驰坊,否則顯示黑色背景
            if sendMessageIntent.recipients!.count > 0 {
                view.backgroundColor = UIColor.red()
            } else {
                view.backgroundColor = UIColor.black()
            }
        }
        if let completion = completion {
            completion(self.desiredSize)
        }
    }

INInteraction會包含NSIntent匾二,也就是用戶所說的話,我們可以NSIntent屬性來表現(xiàn)出不同UI表現(xiàn)

根據(jù)文檔中描述拳芙,有以下注意事項:

  • 不能放廣告
  • 事件察藐,不能添加任何手勢,一些有交互的控件
  • 界面dissmiss不要保存數(shù)據(jù)
  • 做動畫要在 DidAppear 開始舟扎,willDissAppear 結(jié)束
  • UI顯示要快
SiriKit 不用 Storyboard
Paste_Image.png

如果不想使用Storyboard

Paste_Image.png

可以用NSExtensionPrincipalClass替換NSExtensionMainStoryboard的key分飞,value寫入vc類


Siri 返回結(jié)果

后補(bǔ)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市睹限,隨后出現(xiàn)的幾起案子譬猫,更是在濱河造成了極大的恐慌,老刑警劉巖羡疗,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件染服,死亡現(xiàn)場離奇詭異,居然都是意外死亡叨恨,警方通過查閱死者的電腦和手機(jī)肌索,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來特碳,“玉大人诚亚,你說我怎么就攤上這事∥缗遥” “怎么了站宗?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長益愈。 經(jīng)常有香客問我梢灭,道長夷家,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任敏释,我火速辦了婚禮库快,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钥顽。我一直安慰自己义屏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布蜂大。 她就那樣靜靜地躺著闽铐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奶浦。 梳的紋絲不亂的頭發(fā)上兄墅,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音澳叉,去河邊找鬼隙咸。 笑死,一個胖子當(dāng)著我的面吹牛成洗,可吹牛的內(nèi)容都是我干的五督。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼泌枪,長吁一口氣:“原來是場噩夢啊……” “哼概荷!你這毒婦竟也來了秕岛?” 一聲冷哼從身側(cè)響起碌燕,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎继薛,沒想到半個月后修壕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡遏考,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年慈鸠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灌具。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡青团,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咖楣,到底是詐尸還是另有隱情督笆,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布诱贿,位于F島的核電站娃肿,受9級特大地震影響咕缎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜料扰,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一凭豪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晒杈,春花似錦嫂伞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至说庭,卻和暖如春然磷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刊驴。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工姿搜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捆憎。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓舅柜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親躲惰。 傳聞我的和親對象是個殘疾皇子致份,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 隨著iOS10.0發(fā)布腳步的臨近,作為開發(fā)者础拨,相信很多人也和我一樣氮块,可以提前體驗一些新系統(tǒng)的新功能,也更關(guān)注新版i...
    MarkCJ閱讀 18,431評論 0 18
  • 關(guān)于SiriKit 在6月14日凌晨的WWDC2016大會上诡宗,蘋果提出iOS10是一次里程碑并且推出了十個新特性滔蝉,...
    sindri的小巢閱讀 22,508評論 40 79
  • 概覽 最新的WWDC2016大會上,蘋果提出iOS10并推出了十個新特性塔沃,homekit蝠引、messageapp等等...
    cuagain閱讀 2,182評論 0 5
  • 一、SiriKit介紹 Siri是一款蘋果 iOS 系統(tǒng)提供的智能語音助手軟件蛀柴,它的全名是 Speech Inte...
    火星抄手閱讀 5,515評論 15 19
  • 引言 在6月14日凌晨的WWDC2016大會上螃概,蘋果提出iOS10是一次里程碑并且推出了十個新特性,homekit...
    青花瓷的平方閱讀 3,262評論 0 2