?剛剛實(shí)踐的,按步驟來,全網(wǎng)最全的,不要在意排版
1、確認(rèn)你的手機(jī)啟動(dòng)了?Siri 功能,如果沒有需要先打開Siri
2、在你的主工程中啟動(dòng)Siri功能,具體步驟:
2.1在 Xcode 中打開你的應(yīng)用工程。
2.2在項(xiàng)目設(shè)置中,選擇適當(dāng)?shù)?target。 對(duì)于 iOS,選擇你的 iOS app target。 對(duì)于 watchOS,選擇你的 WatchKit Extension target。
2.3選擇 Capaabilities 標(biāo)簽。
2.4啟用 Siri 功能。
3、添加 Intents 應(yīng)用擴(kuò)展 target 提供了構(gòu)建 Intents 擴(kuò)展所需的初始文件,并配置 Xcode 項(xiàng)目以構(gòu)建該擴(kuò)展并將其包含在應(yīng)用程序包中。
在 Xcode 中打開你的已有的應(yīng)用工程。
選擇 File > New > Target。
從 iOS 或 watchOS 平臺(tái)的 “Application Extension” 組中選擇 “Intents Extension”。
點(diǎn)擊下一步。
指定擴(kuò)展名并配置語言和其他選項(xiàng)。
對(duì)于 iOS 應(yīng)用程序,如果你計(jì)劃自定義 Siri 界面的某些部分,請(qǐng)啟用“ Include UI Extension” 選項(xiàng)。
點(diǎn)擊完成。
4、創(chuàng)建Intents文件,并且在里面添加對(duì)應(yīng)的Intent,比如:簽到
選擇你的 Intents 擴(kuò)展的 build scheme。 當(dāng)你創(chuàng)建 Intents 擴(kuò)展目標(biāo)時(shí),Xcode 會(huì)自動(dòng)創(chuàng)建 build scheme。
選擇要運(yùn)行代碼的目標(biāo)(模擬器或設(shè)備)。
選擇 Porduct > Run 以開始調(diào)試會(huì)話。
當(dāng) Xcode 提示時(shí),選擇 Siri 作為要運(yùn)行的主應(yīng)用程序。 Xcode 構(gòu)建你的應(yīng)用程序和擴(kuò)展,將它們安裝在設(shè)備上,然后啟動(dòng)你選擇的應(yīng)用程序。
5、記得把你的Intents文件 關(guān)聯(lián)上所有創(chuàng)建的target
6、另外需要在Info.plist 文件中添加 對(duì)應(yīng)的描述和key,具體在最下面。
7、把target項(xiàng)目run一遍,再run主項(xiàng)目,在手機(jī)上搜索快捷指令:簽到,就可以看到了,添加后就會(huì)打開自己的APP,后續(xù)的邏輯可以自己實(shí)現(xiàn)了
8、如果涉及到多語言問題,也可以在Intents文件添加多語言
重點(diǎn)代碼:
extension AppDelegate {
//這個(gè)方法是關(guān)鍵,調(diào)起的時(shí)候會(huì)執(zhí)行,里面就是你自己實(shí)現(xiàn)自己的業(yè)務(wù)邏輯了
? ? func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([any UIUserActivityRestoring]?) -> Void) -> Bool {
? ? ? ? if userActivity.activityType == "StepIntent" {
? ? ? ? ? ? if let intent = userActivity.interaction?.intent as? DeviceStepIntent {
? ? ? ? ? ? ? ? handleStepIntent(intent)
? ? ? ? ? ? ? ? return true
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return false
? ? }
? ? //? StepIntent
? ? private func handleStepIntent(_ intent: DeviceStepIntent) {
? ? }
}
------------------------檢查下是否有授權(quán) 代碼發(fā)到APP啟動(dòng)時(shí)候
INPreferences.requestSiriAuthorization { status in
? ? ? ? ? ? printLog("requestSiriAuthorization \(status)")
? ? ? ? ? ? switch status {
? ? ? ? ? ? case .authorized:
? ? ? ? ? ? ? ? print("Authorized")
? ? ? ? ? ? default:
? ? ? ? ? ? ? ? print("Not Authorized")
? ? ? ? ? ? ? ? self.promptForSiriAuthorization()
? ? ? ? ? ? }
? ? ? ? }
-----------------------info.plist 文件新增內(nèi)容
<key>NSExtensionAttributes</key>
<dict>
<key>IntentsSupported</key>
<array>
<string>StepIntent</string>
</array>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.intents-service</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).IntentHandler</string>
<key>NSUserActivityTypes</key>
<array>
<string>StepIntent</string>
</array>