iOS12 Siri Shortcuts(二)

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

IMG_2970.jpg

1.添加Intents文件

File -> New File,選擇SiriKit Intent Definition File

image.png
2.配置Instents文件
image.png
3.配置參數
image.png

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

屏幕快照 2019-03-09 下午3.55.08.png

image.png
LHSceneIntentResponseCodeFailure
LHSceneIntentResponseCodeSuccess

創(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。

image.png

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會報錯,出現下面的情況:

IMG_2971.PNG

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

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容