2016-09-19 93 views
1

我正在爲我們的應用程序的SiriKit意向擴展。我們正在使用鍛鍊擴展類型。問題是,我只是把所需的方法,並總是通過.ready但Siri總是迴應,當開始與SiriKit鍛鍊時,Siri總是迴應'​​繼續在應用程序'

對不起,你必須繼續在應用程序。

我已經嘗試過其他反應,以及(.failure.unspecified),但她還是說繼續在應用程序。我遵循Apple提供的文檔來設置我的.plist文件,但它仍然可能與此有關。

這裏是我的意圖代碼:

class IntentHandler: INExtension, INStartWorkoutIntentHandling, INPauseWorkoutIntentHandling, INResumeWorkoutIntentHandling, INCancelWorkoutIntentHandling, INEndWorkoutIntentHandling { 


override func handler(for intent: INIntent) -> Any { 
    // This is the default implementation. If you want different objects to handle different intents, 
    // you can override this and return the handler you want for that particular intent. 

    return self 
} 

func handle(startWorkout intent: INStartWorkoutIntent, completion: @escaping (INStartWorkoutIntentResponse) -> Void) { 
    print("Starting Service") 
    let activity = NSUserActivity(activityType: "start_service") 
    let result = INStartWorkoutIntentResponse(code: .ready, userActivity: activity) 
    completion(result) 
} 

func handle(endWorkout intent: INEndWorkoutIntent, completion: @escaping (INEndWorkoutIntentResponse) -> Void) { 
    print("Ending Service") 
    let result = INEndWorkoutIntentResponse(code: .ready, userActivity: nil) 
    completion(result) 
} 

func handle(pauseWorkout intent: INPauseWorkoutIntent, completion: @escaping (INPauseWorkoutIntentResponse) -> Void) { 
    print("Pausing Service") 
    let result = INPauseWorkoutIntentResponse(code: .ready, userActivity: nil) 
    completion(result) 
} 

func handle(cancelWorkout intent: INCancelWorkoutIntent, completion: @escaping (INCancelWorkoutIntentResponse) -> Void) { 
    print("Cancel Service") 
    let result = INCancelWorkoutIntentResponse(code: .ready, userActivity: nil) 
    completion(result) 
} 

func handle(resumeWorkout intent: INResumeWorkoutIntent, completion: @escaping (INResumeWorkoutIntentResponse) -> Void) { 
    print("Resume Service") 
    let result = INResumeWorkoutIntentResponse(code: .ready, userActivity: nil) 
    completion(result) 
} 
} 

我想在開始鍛鍊意圖處理的斷點,它擊中的功能。我也嘗試將.ready傳遞給INMessageIntent,並且Siri在應用程序中沒有公開地迴應。我想知道這是否總是適用於鍛鍊擴展。如果是這樣,我仍然希望Siri展示我的IntentsUI。

感謝您的回覆。

回答

0

一旦你準備開始鍛鍊你的應用程序,您需要致電與.continueInApp

完成處理程序,以便將是這樣的:

public func handle(startWorkout intent: INStartWorkoutIntent, completion: @escaping (INStartWorkoutIntentResponse) -> Swift.Void) { 
    let userActivity = NSUserActivity(activityType: NSStringFromClass(INStartWorkoutIntent.self)) 
    let response = INStartWorkoutIntentResponse(code: .continueInApp, userActivity: userActivity) 
    completion(response) 
} 

參見文檔:

您的擴展程序已準備好將控制權轉移到應用程序,以便開始鍛鍊。在返回這段代碼後,SiriKit啓動你的應用程序並將它在初始化時提供的NSUserActivity對象傳遞給它。 (如果您沒有提供用戶活動對象,SiriKit會爲您創建一個對象。)SiriKit在交付之前添加一個INInteraction對象,其中包含用戶活動對象的意圖和響應。您的應用程序應該使用用戶活動對象中的信息來開始鍛鍊。

+1

好的,這工作,但我怎麼得到它來顯示我的IntentsUI? – ctkrocks

相關問題