Intentパラメータの最終的な検証を行い、サービスがIntentを実行できる状態にあることを確認します。
概要
Intentのパラメータをリゾルブした後、Intentをハンドルする前に、SiriKitからIntentの詳細をコンファームするよう求められる場合があります。コンファームフェーズは、Intentパラメータの最終的な検証を行い、必要なサービスが利用可能であることを検証する機会です。たとえば、会社のサーバと通信できることをコンファームします。最終的な検証を行った後、リクエストをどのようにハンドルするかを示すresponseオブジェクトをSiriKitに渡します。
リスト1は、ランニングアプリがINStart
(英語)オブジェクトの検証に使用するコンファームメソッドを示しています。このアプリはユーザーの走行経路を特定するためにCore Locationを使うため、メソッドは、必要な位置情報サービスが利用可能かどうか検証し、利用できない場合はエラーコードを返します。位置情報サービスを利用できる場合、responseオブジェクトにはアプリでランの開始準備ができたことを示すINStart
(英語)コードが含まれます。
ワークアウトを開始できる状態であることをコンファームする
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とともにカスタムNSUser
(英語)オブジェクトを渡すことが推奨されますが、必須ではありません。何らかの理由でSiriKitがアプリを起動する必要がある場合は、SiriKitが、提供されたアクティビティオブジェクトをアプリに渡します。アプリはこのオブジェクト内の情報を使ってさらにアクションを実行することができます。たとえば、ユーザーアクティビティオブジェクトにカスタムデータを含めると、アプリはそのデータをインターフェイスの構成に使用できます。