如果你想要在Siri界面直接進行一些操作,而不是讓Siri打開APP。那么你可能需要使用Intent Extension了。先看下效果:

1.添加Intents文件
File -> New File,選擇SiriKit Intent Definition File

2.配置Instents文件

3.配置參數

這里的Category是對應Siri界面喚醒Extentsion的不同樣式的。上面那個需要確認的就是Order,直接運行的就是Generic


創(chuàng)建完成后,編譯一下項目,Xcode 會自動生成對應的類,我這里的話會生成 SceneIntent ,每個類包含了 SceneIntentHandling 協議和 SceneIntentResponse 類等所需要的內容。
需要注意的是,這些類不會出現在項目的目錄中,有點和 Core Data 類似。
但你可以正常使用,可以為其新建 Category 或者導入頭文件就可以直接使用。
Intents Extension
接下來就是創(chuàng)建 Extension了。通過file -> new -> target, 選擇Intents Extension 即可。為了讓 Extension 的界面便于控制,我選擇了 Include UI Extension。這樣就同時創(chuàng)建了兩個Extension。

Intents Extension 創(chuàng)建好后,會自動出現一個名為 IntentHandler 的類。對于非即時通訊類的需求,可以刪除其他的方法,保留下面一個方法即可:
- (id)handlerForIntent:(INIntent *)intent;
handlerForIntent 方法是整個 Intents Extension 的入口,當 Siri 通過語音指令匹配到對于的 Intent , 該方法就會被執(zhí)行。這里我 return 我創(chuàng)建一個 SceneIntentHandler 類,該類準守SceneIntentHandling協議。 用來處理匹配到 Intent 后的 UI 顯示以及后續(xù)操作。
該協議有兩個方法:
該方法是在Siri匹配到相應的 Intent時候調用。
通過 completion 返回一個 SceneIntentResponse。
- (void)confirmSendMessage:(INSendMessageIntent *)intent completion:(void (^)(INSendMessageIntentResponse *response))completion
而下面這個方法是用戶對 Intent UI 的操作回調,比如用戶點擊了圖一的“是”這個按鈕, 或者是直接執(zhí)行類的Category
- (void)handleScene:(LHSceneIntent *)intent completion:(void (^)(LHSceneIntentResponse * _Nonnull))completion
請求成功,傳遞 SceneIntentResponseCodeSuccess狀態(tài)。
請求失敗,傳遞之前自定義的 SceneIntentResponseCodeFailureWithSomething 狀態(tài),并且附帶上 errorMessage 信息。供后面的 IntentUI使用。
PS: 這兩個方法不一定都要實現,但是如果實現一定要返回一個completion回調出去,不然Siri會報錯,出現下面的情況:
Intents Extension UI
最后就是我們的 Intent UI登場了。打開文件夾目錄,會發(fā)現系統自動創(chuàng)建了一個名為IntentViewController 的類。
該類只有一個方法,很長的方法:
- (void)configureViewForParameters:(NSSet <INParameter *> *)parameters ofInteraction:(INInteraction *)interaction interactiveBehavior:(INUIInteractiveBehavior)interactiveBehavior context:(INUIHostedViewContext)context completion:(void (^)(BOOL success, NSSet <INParameter *> *configuredParameters, CGSize desiredSize))completion;
在這里我們處理不同的回調狀態(tài)就可以了。
以上就是Siri Shortcut開發(fā)的大體流程了。
參考:
WWDC 2018 Shorcuts
iOS12 Siri ShortCuts 應用
蘋果官方 Siri ShortCuts Demo