記事

Intentの詳細をコンファームする

Intentパラメータの最終的な検証を行い、サービスがIntentを実行できる状態にあることを確認します。

概要

Intentのパラメータをリゾルブした後、Intentをハンドルする前に、SiriKitからIntentの詳細をコンファームするよう求められる場合があります。コンファームフェーズは、Intentパラメータの最終的な検証を行い、必要なサービスが利用可能であることを検証する機会です。例えば、会社のサーバと通信できることをコンファームします。最終的な検証を行った後、リクエストをどのようにハンドルするかを示すresponseオブジェクトをSiriKitに渡します。

リスト1は、ランニングAppがINStartWorkoutIntent(英語)オブジェクトの検証に使用するコンファームメソッドを示しています。このAppはユーザーの走行経路を特定するためにCore Locationを使うため、メソッドは、必要な位置情報サービスが利用可能かどうか検証し、利用できない場合はエラーコードを返します。位置情報サービスを利用できる場合、responseオブジェクトにはAppでランの開始準備ができたことを示すINStartWorkoutIntentResponseCode.ready(英語)コードが含まれます。

リスト1

ワークアウトを開始できる状態であることをコンファームする

func confirm(startWorkout intent: INStartWorkoutIntent, 
       completion: @escaping (INStartWorkoutIntentResponse) -> Void) {
    var code : INStartWorkoutIntentResponseCode = .ready
    var activity : NSUserActivity? = nil
        
    // If location services are not available, the user
    // might need to change the type of workout.
    if !CLLocationManager.locationServicesEnabled() {
        code = .failureRequiringAppLaunch
        activity = NSUserActivity(activityType: 
              "com.example.myRunningApp.noLocationAvailable")
    }
        
    // Deliver the response back to SiriKit.
    let response = INStartWorkoutIntentResponse(code: code, 
            userActivity: activity)
    completion(response)
}

コンファーム時にresponseとともにカスタムNSUserActivity(英語)オブジェクトを渡すことが推奨されますが、必須ではありません。何らかの理由でSiriKitがAppを起動する必要がある場合は、SiriKitが、提供されたアクティビティオブジェクトをAppに渡します。Appはこのオブジェクト内の情報を使ってさらにアクションを実行することができます。例えば、ユーザーアクティビティオブジェクトにカスタムデータを含めると、Appはそのデータをインターフェイスの構成に使用できます。

関連項目

Intentのリゾルブとハンドル

Intentのパラメータをリゾルブする

Intentのパラメータを検証し、続行に必要な情報があることを確認します。

Intentのハンドル

Intentを実行し、処理内容に関するフィードバックをSiriKitに提供します。