SiriKitに、特定のIntentを処理できるオブジェクトを提供します。
概要
ユーザーがSiriまたはマップを使ってアプリのリクエストを行うと、SiriKitによってIntents App Extensionがロードされ、そのINExtension
(英語)サブクラスのインスタンスが作成されます。Extensionオブジェクトの役割は、特定のIntentを処理するために使用するhandlerオブジェクトをSiriKitに提供することです。これらのオブジェクトを、Extensionオブジェクトのhandler(for:)
(英語)メソッドから提供します。
handler(for:)
(英語)メソッドの構成はすべてのIntents App Extensionで同じであり、このメソッドは、Intents App ExtensionがサポートするすべてのIntentについて有効な新しいオブジェクトを返す必要があります。リスト1では、このメソッドが「メッセージ」ドメインと「VoIP通話」ドメインのIntentをサポートしています。提供されるIntentオブジェクトのタイプをチェックした後、メソッドは、そのIntentを処理できるオブジェクトを作成して返します。
SiriKitにhandlerオブジェクトを提供する
override func handler(for intent: INIntent) -> Any {
switch intent {
case is INSendMessageIntent,
is INSearchForMessagesIntent,
is INSetMessageAttributeIntent:
return MyMessageHandler()
case is INStartAudioCallIntent:
return MyAudioCallHandler()
case is INStartVideoCallIntent:
return MyVideoCallHandler()
default:
// The app extension should only be called for intents it knows about.
fatalError()
}
}
handler(for:)
(英語)メソッドから返されるオブジェクトは、対応するIntentの処理に必要な特定のプロトコルを実装する必要があります。各Intentオブジェクトには関連プロトコルがあり、その名前はIntent名に基づいています。たとえば、INStart
(英語)オブジェクトを処理する場合、INStart
(英語)プロトコルを実装するオブジェクトを提供します。Intentパラメータをリゾルブし、そのIntentをどのように処理したかをSiriKitに知らせるには、プロトコルによって定義されるメソッドをオブジェクトに実装する必要があります。
SiriKitは通常、単一のIntentオブジェクトを処理する際にhandlerオブジェクトのコピーを複数作成し、各オブジェクトで1つのメソッドのみを呼び出します。キャッシュした状態の情報は以降のメソッド呼び出し時には存在しないため、handlerオブジェクトに保存しないでください。各メソッドから必要とされるデータを取得するには、常に新たにリクエストを行ってください。