ハイライト
iOS 14 では、アプリ内インテント処理が SiriKit に追加され、カスタム インテントが画像と字幕の曖昧さ回避、動的検索、ページング、および非推奨マーカーをサポートできるようになります。開発者は、Siri とショートカットのアクションをより高速かつ明確にすることができます。
主要内容
SiriKit 統合の最も過小評価されている側面は、SiriKit がアプリの外部で実行されることです。ユーザーが Siri に何かを言うと、システムがインテント ハンドラーに接続します。このハンドラーは Intents 拡張機能内にある場合もあれば、ユーザーをアプリに戻す必要がある場合もあります。どの道を選択する場合でも、解決、確認、処理の各ステップに割り当てられる時間は 10 秒のみです。今回は、拡張機能の起動、フレームワークのロード、および静的初期化の実行に時間がかかります。
以前は、メディアの再生、フィットネス トレーニング、画面上の進行中のタスクは 2 つの部分に分割されることがよくありました。拡張機能が解決と確認を担当し、アプリが実際の実行を担当していました。これにより、状態の転送が増加し、コードが強制的に共有フレームワークに分割されます。iOS 14 では、アプリ内インテント処理という新しいオプションが追加されました。アプリがマルチウィンドウをサポートし、UIScene ライフサイクルを採用している限り、アプリのプロセスで SiriKit リクエストを受信し、現在の UI または完了のためにアプリ内の重い処理に関連するインテントを残すことができます。
このセッションの後半では、カスタム インテントのエクスペリエンスの品質について説明します。iOS 14 では、曖昧さ回避リストに字幕と画像を含めることができ、Siri の音声リストのページネーションが可能になり、ユーザーが入力した検索用語をサポートする動的オプションが可能になり、パラメータを設定可能および解決可能な次元に分割できるようになります。これは別の種類の問題を扱っています。ユーザーはすでにショートカットや Siri を使用してアクションをトリガーすることに積極的ですが、パラメーターのリスト、候補、および移行戦略が混乱することはありません。
したがって、これは単に「Siri へのアクセス方法」についてのセッションではありません。その中心となるのは、どのインテントを軽量拡張機能に引き続き配置する必要があり、どのインテントをアプリに移動する必要があるかという決定を分割することです。構成中にどのパラメータを選択する必要があり、実行時に Siri によってどのパラメータを尋ねられるべきか。どの古いインテントを非推奨にする必要があるか、どの UI インテントを非 UI インテントとは別に維持する必要があるか。
詳細
1. まず 10 秒の予算を計算します
(02:00) ユーザーがインテントを操作するたびに、解決、確認、処理のいずれの段階であっても、インテント ハンドラーはリクエストを完了するまでに 10 秒かかります。システムが内線に接続すると、タイミングが開始されます。拡張機能がまだ実行されていない場合は、起動時間も含まれます。
SiriKit request lifecycle:
1. User request initiates a connection to the handler.
2. System launches the Intents extension when needed.
3. The process loads linked frameworks and runs +load/static initializers.
4. Handler performs resolve, confirm, or handle business logic.
5. Each interaction phase must finish within 10 seconds.
キーポイント:
- 10 秒は純粋なビジネス ロジック時間ではありません。プロセスの起動、フレームワークの読み込み、
+loadそして静的初期化がそれを占有します。 - インテント拡張機能は独立したプロセスであり、使用するメモリが少ないため、通常、完全なアプリよりも軽量です。
- Apple は、拡張機能が本当に必要なフレームワークに対してのみリンクすることを推奨します。リンクが多いほど、Siri の待ち時間は長くなります。
- インテントが拡張機能内で完了できる場合は、拡張機能に最初に処理させます。これにより、起動時間を最適化することが容易になります。
2. アプリ内でどのインテントを処理するかを決定する
(03:57) iOS 14 では、アプリ内インテント処理が導入されています。アプリは、SiriKit のリクエストの解決、確認、処理を直接処理するインテント ハンドラーを追加できます。講演で紹介される一般的なシナリオには、メディア再生制御、ワークアウトの開始、画面上のリアルタイム UI に影響する操作、拡張メモリの制限によって影響を受ける写真やビデオの処理などが含まれます。
Use in-app intent handling when:
- The action starts or controls media playback.
- The action starts a workout.
- Handling changes UI that is already live on screen.
- The work needs memory that is inconvenient for an extension.
- Existing app structure cannot easily move logic into an extension.
キーポイント:
- メディアとワークアウトを分割する以前の一般的な方法は、解決/確認として拡張機能を使用し、ハンドルとしてアプリを使用することでした。 iOS 14 では、リンク全体をアプリ プロセスに配置できます。
- インテントの結果が現在の画面コンテンツを変更することである場合、アプリ内処理は現在の UI 状態に直接アクセスできます。
- 写真やビデオの処理などのタスクは、拡張機能のメモリコンフォートゾーンを超える可能性があるため、アプリ内処理の評価に適しています。
- アプリの起動時間も 10 秒の予算にカウントされます。アプリに移行しても、起動時のパフォーマンスを無視できるわけではありません。
3. アプリ内処理には UIScene とディスパッチャーが必要です
(05:34) アプリ内でインテント処理を実装する場合、最初のステップは、アプリが複数のウィンドウをサポートし、UIScene ライフサイクルを採用していることを確認することです。SiriKit がアプリの起動をリクエストしたとき、アプリにはまだ UIScene が接続されていない可能性があります。次に、アプリターゲットのサポートされるインテント領域にアプリで処理されるインテントをリストし、アプリデリゲートに実装します。handlerForIntent:。
func application(_ application: UIApplication, handlerFor intent: INIntent) -> Any? {
if intent is ShowDirectionsIntent {
return IntentHandlerStore.shared.currentHandler
}
return nil
}
キーポイント:
handlerForIntent:トランスクリプトでディスパッチャーとして定義されます。受信したインテントを、そのインテントを処理できるオブジェクトにマップします。- 返されるオブジェクトは、対応する処理プロトコルを使用する必要があります。たとえば、そのスピーチは、
ProcessPhotoIntent養子縁組に戻る必要があるProcessPhotoIntentHandling物体。 - Recipe Assistant の例では、アプリ
ShowDirectionsIntentサポートされているインテントに参加します。 - スピーカーは現在のハンドラーをシングルトンに保存し、それを各ビュー コントローラーに追加します。
viewDidAppear画面上の現在のページが「次のステップ」に応答するように更新します。
4. UI が必要な場合は、 continueInApp を使用してユーザーをフロントデスクに戻します
(06:37) インテントの処理でユーザーがアプリ内のインターフェイスを表示する必要がある場合、ハンドラーは関連する UI がすでに画面上にあることを確認する必要があります。アプリがバックグラウンドにあるとき、ハンドラーを使用できます。continueInApp応答コードは、システムにアプリを開くように要求します。Recipe Assistant の例では、ユーザーが Siri を使用して「次のステップ」と言うと、アプリはレシピの次のステップに進みます。
ShowDirectionsIntent handling flow:
1. resolve recipe parameter.
2. If recipe is missing, ask for disambiguation.
3. If recipe exists, return success.
4. In handle, make sure the app is in the foreground.
5. If the app is in the background, respond with continueInApp.
6. SceneDelegate continues the user activity.
7. Current view controller runs nextStep().
キーポイント:
- このプロセスは、講義内の Recipe Assistant デモからのものです。インテント名は次のとおりです。
ShowDirections。 continueInAppハンドル ステージに表示され、フロントエンド UI を必要とするインテントを処理するために使用されます。SceneDelegate実装する必要があるwillConnectToSessionそしてcontinueUserActivity、引き受けるcontinueInAppユーザーのアクティビティをもたらしました。NextStepProvidingこれはデモのプロトコルであり、各ビュー コントローラーを公開するために使用されます。nextStep能力。
5. 明確な曖昧さ回避により、候補者の選択が容易になります
(12:55) iOS 14 では、豊富な曖昧さ回避機能が追加されています。開発者は、ショートカット アプリの曖昧さ回避リストと動的オプションで、カスタム タイプの字幕文字列と字幕を提供できます。INImage写真。Siri の音声によってトリガーされた場合、一度に読み上げる項目の数や、その後のページング プロンプトも設定できます。
Rich disambiguation data:
- title: custom type display value
- subtitle: String
- image: INImage
Siri voice-only pagination:
- maximum number of items spoken at once
- subsequent introduction spoken by Siri
キーポイント:
- サブタイトルと画像の両方が実行時に提供され、カスタム タイプの候補が提供されます。
- この情報は、ユーザーが構成したインテントの動的オプションに表示され、曖昧さ回避が必要なダイアログ リストにも表示されます。
- ページネーションは、ユーザーが「Hey Siri」音声で呼び出した場合に曖昧さを解消する目的でのみ使用されます。
- Xcode のインテント エディターでは、Siri ダイアログ領域で発話される単語とその後のプロンプトの最大数を設定できます。
6. 動的検索は大規模なディレクトリパラメータに適しています
(14:44) iOS 13 はすでに動的オプションをサポートしています。iOS 14 では、この API を拡張してシナリオを検索します。ユーザーがショートカット アプリでインテントを構成するときに検索語を入力すると、システムは繰り返し呼び出します。searchTermコード生成されたメソッド。空の検索語はデフォルト値を返すことができ、空ではない検索語は大きなディレクトリの検索に使用されます。
Dynamic options with searchTerm:
1. User edits an intent parameter in Shortcuts.
2. Shortcuts passes the current searchTerm to the provider method.
3. Empty searchTerm returns default values.
4. Non-empty searchTerm returns matching catalog results.
5. Completion returns an INObjectCollection.
キーポイント:
- この講演では、動的検索は大規模なカタログの検索にのみ適していると明確に述べられています。
- ショートカット アプリはデフォルトでフィルタリングをサポートしているため、小さな静的コレクションはこの機能にアクセスする必要はありません。
- 完了ハンドラーは新しいものを受け取ります
INObjectCollection。 INObjectCollection動的オプションは、オプションでインデックス付き照合順序を使用して、タイトル付きのセクションにグループ化できます。
7. パラメーター、非推奨、コード生成は個別に管理する必要があります
(15:57) iOS 14 では、パラメータをそれぞれ設定可能および解決可能としてマークできます。設定可能とマークされたパラメータを使用すると、ユーザーはショートカットの設定中に入力できます。解決可能とマークされたパラメータは、実行時に Siri またはショートカットによって解析されます。実行時に解析されるパラメータはなく、Siri ダイアログを提供する必要もありません。
(17:01) カスタム インテントに対応する関数がオフラインになっているか、新しいインテントに置き換えられている場合、Xcode 12 はその関数を非推奨としてマークできます。ショートカット アプリは、このアクションが今後使用できなくなる可能性があることを既存のユーザーに通知し、アクション リストから非表示にします。
Intent definition maintenance checklist:
- Mark each parameter configurable when users should set it in Shortcuts.
- Mark each parameter resolvable only when runtime resolution is needed.
- Use the Deprecated checkbox for removed or replaced custom intents.
- Use Custom Class inspector for generated class names and prefixes.
- Put non-UI intents in a separate intent-definition file when needed.
- Choose the intent code-generation language in build settings.
キーポイント:
- 構成可能と解決可能を分離することで、パラメータ設計が実行時ダイアログ設計と同じになるように強制されることがなくなりました。
- クラス接頭辞をインテントエディターの型名に書き込んではなりません。カスタムクラスインスペクターまたはプロジェクトドキュメントインスペクターで設定することをお勧めします。
- Intents UI 拡張機能のターゲットにインテント定義ファイルが含まれている場合、Xcode はファイル内のインテントを UI 拡張機能でサポートされるインテントとして自動的にリストします。
- UI のないカスタム インテントは別のインテント定義ファイルに入れることができ、インテント UI 拡張ターゲットは追加されません。
重要ポイント
1. 現在のページの音声制御機能を作成します。
対処方法: アプリ ページが開いているときに、ユーザーが Siri を使用して「次へ」、「一時停止」、「続行」、「完了としてマーク」などのアクションをトリガーできるようにします。
実行する価値がある理由: このデモのレシピ アシスタントはこのモードです。インテントは画面上の現在の UI に影響し、アプリ内のインテント処理は現在のビュー コントローラーに直接接続できます。
開始方法: まず、アプリで複数のウィンドウと UIScene をサポートさせます。ターゲットのカスタム インテントをアプリ ターゲットのサポートされるインテントに追加し、使用しますhandlerForIntent:現在のページに対応するハンドラーを返します。
2. SiriKit のパフォーマンス監査を行う
対処方法: Intents 拡張機能がリンクされているフレームワークを確認し、インテントの処理に必要のない依存関係を削除します。
実行する価値がある理由: 拡張機能のフレームワークの読み込み、+loadおよび静的初期化は両方とも 10 秒のバジェットにカウントされます。起動が遅いほど、Siri の対話が遅れているように見える可能性が高くなります。
開始方法: 最も一般的に使用されるインテントから始めて、解決、確認、処理に実際に必要なモジュールをリストします。拡張機能に残すことができる軽量のロジックは引き続き拡張機能に残り、UI または高メモリを必要とするタスクはアプリ内で再評価され、処理されます。
3. 検索可能なショートカット パラメーター セレクターを作成する
対処方法: プレイリスト、製品、ファイル、場所などの大きなディレクトリ パラメータの動的検索にアクセスします。
実行する価値がある理由: iOS 14 はユーザーの入力を受け付けますsearchTerm動的オプションを渡してメソッドを提供することにより、開発者は長いリストを一度にポップアウトするのではなく、入力に基づいて一致を返すことができます。
開始方法: インテント エディターでパラメーターの入力時に検索を有効にします。検索語が空の場合は、最近使用された値またはデフォルト値が返されます。空ではない検索語はディレクトリを照会し、INObjectCollection戻るにはセクションを押してください。
4. より明確な候補者リストを作成する
内容: 曖昧さ回避の候補に字幕と画像を追加し、ユーザーが Siri やショートカットで類似のオブジェクトをより迅速に区別できるようにします。
価値がある理由: iOS 14 の豊富な曖昧さ回避機能は、字幕とINImage。これにより、同様のレシピ、連絡先、ルーム、プレイリストについての繰り返しの質問を減らすことができます。
開始方法: まず、ユーザーが誤って選択することが多いパラメーターを見つけます。タイトルは短くし、サブタイトルを使用して違いを書きます。画像が識別に直接役立つ場合にのみ画像を追加してください。
5. インテント定義ファイルを整理する
対処方法: オフライン カスタム インテントを非推奨としてマークし、UI のないインテントとメンテナンスのためにインテント UI が必要なインテントを分離します。
実行する価値がある理由: 古いインテントがクリーンアップされないと、ユーザーのショートカット設定に残り、失敗したエントリが作成されます。UI インテントなしでインテント UI 拡張ターゲットを混合すると、メンテナンス範囲も拡大されます。
開始方法: インテント定義ファイルを 1 つずつ確認します。置き換えられたインテントは非推奨としてチェックされます。 UI を必要としないインテントは別のファイルに移動されます。カスタム クラス名とプレフィックスは、カスタム クラスまたはプロジェクト ドキュメント インスペクターに配置されます。
関連セッション
- SiriKit とショートカットの新機能 — iOS 14 の SiriKit、ショートカット、コンパクトな Siri UI、豊富な会話エクスペリエンス、およびシステム ポータルへの変更の概要。
- ショートカット アプリでアクションを特集する — アプリのインテント アクションをショートカット アプリ、自動提案、システム推奨ポータルに入力させる方法について説明します。
- 一般的な Siri エラーの解読と対処 — Siri エラーとデバッグの観点から、インテント統合における一般的なエラーの特定方法を補足します。
- watchOS でショートカットを使用したクイック インタラクションを作成する - Apple Watch でのショートカットの操作、追加機能のエントリ、およびインテント ルーティングについて説明します。
- アプリの音声インタラクションを評価して最適化する — 設計の観点から Siri テクノロジーをいつ使用するかを判断し、アプリの音声インタラクション プロセスを最適化します。
コメント
GitHub Issues · utterances