ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Siriのイベント提案を統合する
Siriは、ユーザーが知りたいことを最適なタイミングで賢く表示してくれます。iOS 13ではこの機能が拡張され、Appから予約の完了をSiriに認識させることで、Siriが適切なタイミングでチェックインのリマインダーを行えるようになります。また、Siriがマップで予約の場所への経路案内をしたり、カレンダーにイベントを追加したりすることができます。このセッションでは、Siriのイベント提案機能をAppに追加する方法を紹介します。
リソース
関連ビデオ
WWDC20
-
ダウンロード
(音楽)
(拍手) こんにちは Siri Event Suggestionsとの 一体化についてお話しします Siriのフレームワーク担当の ソフィアンです 後ほどマグナスも登場します 今日は新しい機能について お話しできるのを うれしく思います
Siriはバーチャルアシスタントで SiriKitを使い 様々なことを可能にします メッセージ送信や配車サービスの利用 ショートカットから 特定の機能も使えます Appleプラットフォームと一体化し インテリジェンス機能を提供します
カレンダーでは 予約を把握し計画の手助けをします 予約に関する情報を基に システム全体に提案もします 交通状況に応じ ロック画面で出発時間を知らせ マップでも提案します タップすれば目的地への道順が 表示されます 到着後は“おやすみモード”を勧められ 目の前のことに集中できます システムが あらゆる予約を把握し すべての提案を行います レンタカー予約のメール レストラン予約のメッセージ Safariで予約したフライトなど iOS 13では新しいAPIを導入し 直接エコシステムに一体化します (拍手) 例えアプリケーションで フライトの予約を見たら システムに その情報を提供します Siriは自動的に通知を提示し カレンダーに予定を加えます そして 時間や場所に合わせて 提案を表示していきます すべてデバイス上で機能します 更に今年は広範囲にわたり システムを一体化させ アプリケーションとの連携が 良くなりました チェックイン機能がある場合は ロック画面に表示されます ユーザをアプリケーションへ導きます
またiOS 13では 適切な時間にマップを見ると フライトについて 最新の情報も見られます ゲートへの行き方まで示してくれます
Siriは予約をする時から 現地に着くまでサポートしてくれます とても便利な機能だと思いますが その仕組みは?
APIを内蔵したSiriKitを使うことで 様々なことができるのです 今日紹介するのは intents.frameworkの一部です
レストランや チケット制のイベントなど あらゆる種類の予約をサポートします それらの予約の詳細を表せるように 新しいクラスを導入しました クラスはINReservationから 受け継ぎます 例えばレストランの予約には INRestaurantReservationの オブジェクトを作ります
SiriKitを使っていれば INInteractionのAPIはお分かりですね ショートカットの提供にも使います ユーザが予約を見たら インタラクションを システムに提供します IntentとIntentResponseで 構成されるのが ユーザインタラクションです
新しいINGetReservationDetailsは ユーザ予約の詳細情報を 取得するものです アプリケーションが Siriと情報を共有できます IntentResponseにあるのは― INReservationの オブジェクトリストです 例えばINLodgingReservationを作り IntentResponseに付加し ホテルの詳細を示します
Siri Event Suggestionsや Siriショートカットで使うには インタラクションをシステムに 提供するだけです
このあとは素晴らしい機能を使うために 3つのことをお話しします まずインタラクションの作成と提供方法 次にチェックインの ショートカット機能を利用するための 新しい予約APIの使い方 最後はアプリケーションの起動方法を 指定します 様々なシナリオを交え お話しします ここからはマグナスが APIについてお話しします マグナス (喝采と拍手) どうも ソフィアン
こんにちは 僕はマグナス Siri Event Suggestionsについて お話しします まずAPIの使い方を見て 詳細についてお話しします デモを始めます
My Flightsというアプリケーションを 開いてみましょう
僕のフライトの予定です タップすると詳細が表示されます
Siri Event SuggestionsのAPIを利用し 予約の詳細をシステムに提供します
Xcodeを使います
ViewControllerとServerで アプリケーションが構成されています 予約の詳細を提供したいので ReservationDetailsViewControllerを 見ましょう
このViewControllerは Serverから詳細を入手します ServerはINReservationの オブジェクトを戻します “TODO”部分にコードを加えていきます
オブジェクトの構成を Serverで確認します
createFlightReservationという メソッドは ViewControllerから アクセスできるように予約を作ります ここにINFlightReservationの オブジェクトを作ります
このオブジェクトには 予約の詳細が すべて含まれています
プロパティを見ましょう
まずitemReference 予約を表す識別子です 表示する予約を識別するのに使います
reservationNumberは このフライト固有なので vocabularyIdentifierに使います
画面に表示されるspokenPhraseは 分かりやすくFlight XX 815としました
reservationNumberや reservationHolderの名前は すべての予約で使われます
フライト情報も取得したいので createFlightメソッドを使います 実装してみましょう
flightNumberやairlineなど INFlightのオブジェクトが すべての詳細を表します
では航空会社と空港の情報も 追加していきましょう
航空会社や出発と到着の時刻を 表しています このフライトは サンフランシスコからパリまで
航空会社や空港は iataCodeとicaoCodeで識別され 空港に関しては実際にある場所も 分かります
出発ゲートとターミナルの情報も 加えました 到着は分からないのでnilです
次に出発と到着の時刻も指定します
INDateComponentsRangeを使います 最高のユーザエクスペリエンスのため 出発地と到着地の時間帯を 現地時刻にします
これで必要な情報が すべて設定されました 戻って他の部分を見ましょう
チェックインを快適にするため 新しいショートカット機能を 使います CheckInActionが必要なので createCheckInActionのメソッドを 見ます
このメソッドで作った INReservationActionは typeとvalidDurationと userActivityで構成されています
typeはcheckIn オンラインでチェックインできる時間が validDuration
userActivityが ショートカットで表示されます
まずNSUserActivityを作ります
activityTypeを付加すると アプリケーションが checkInActivityだと認識します
TitleはCheck in for Flight xx 815 ショートカット用に 短く正確に入れてください
次にアプリケーションの起動時に 開始するように userInfoとrequiredUserInfoKeysの プロパティに詳細を足します
webpageURLにも加えます これでショートカット機能は 使えますが―
validDurationにも手を加えます
endDateComponentsを使い validDurationの始めと終わりを 示します チェックインの始まりは出発の24時間前 終わりは出発の1時間前です
ショートカットに必要なのは以上です 今の作業を要約しましょう
予約の詳細とフライト情報 CheckInActionを すべて入力しました ReservationDetailsViewControllerに 戻り コードを加えます
ViewControllerは 今作った予約のことを把握しています 予約を提供するため メソッドを設定し コードを加えましょう
見やすいように ナビゲータを非表示に
まずはIntent ユーザに表示する予約を Siriに知らせます パラメータは ContainerReferenceと itemReferenceです ContainerReferenceは予約を 1つとして識別します 今回はフライトの予約しかないので itemReferenceを ContainerReferenceとして使います ホテルやフライトなど 複数の予約がある場合は 新しくContainerReferenceを作り 1つの予約とします
reservationItemReferencesの プロパティをnilに ここはアプリケーションの起動時 システムが入れます
IntentResponseにも予約を加えます これで表示される予約が Siriに伝わります
最後にINInteractionに IntentとIntentResponseを加え システムに提供します
コードは書き終えましたが 最後に1つ確認してください
INGetReservationDetailsIntentと checkInActivityが サポートされるように info.plistに加えます この手順は済ませたので省きます
要約します
すべての情報を含んだ INFlightReservationを提供したので
Siriは予約を把握し 事前に提案が行えます
INReservationActionも加えたので 的確なタイミングで ユーザをサポートします
体験してみましょう
アプリケーションに戻りました 再びパリへのフライトを見ます
イベントをカレンダーに加えたと 通知がありました (拍手) どうも (拍手) 通知をタップしてみます
提供した情報を基に Siri Suggestionsカレンダーに イベントが作成されました
更にリンクをタップすれば アプリケーションに戻れます 素晴らしい しかしカレンダーで見られた詳細が 表示されないので Xcodeで起動方法を見ます
指定するためにAppDelegateへ
起動にはNSUserActivityを使うので continue userActivityを実装します
2つのactivityTypeをサポートします 1つ目は INGetReservationDetailsIntent ユーザが特定の予約の詳細を 見たことを表します
handleShowReservationメソッドを 呼ぶと― 該当の予約を表示します
2つ目はチェックイン用のactivityで ロック画面のショートカットや 検索機能で使われます
handleCheckInメソッドで チェックインを開始させます
実際に両方を見てみましょう
カレンダーに戻り “Show in My Flights”をタップ
アプリケーションが詳細を表示しました 良くなりましたね (拍手) チェックイン機能にも サポートを加えました 明日出発するので すでに開いているはずです どうでしょうか?
ロック画面と検索UIにあります タップすればそのまま開始します いいですね (拍手)
まとめましょう 予約を作り提供しました CheckInActionを提供し アプリケーションの起動方法を 指定しました これがSiri Event SuggestionsのAPIを 利用する方法です システムを一体化し 使い勝手を良くます 更にAPIの話をします
ショートカットのSuggestionsや カレンダーで Siriが与えられた情報を どう使うのか話します
アプリケーションは ショートカットの前面中央にあります アプリケーション名と アイコンも表示されます NSUserActivityに設定したTitleが 使われるので 正確で明快な情報にしましょう
Siriはエンドツーエンド暗号を使い デバイス間で情報を同期化します アプリケーションがないデバイスでも ショートカットが表示されます
webpageURLのプロパティを使い Safariで表示します
ショートカットは以上です 今度はカレンダー
一番上はTitleです 予約の詳細を基に Siriが自動的に決めます Titleはローカライズされています
予約のtypeにより 異なる情報が使われます このことを考慮し すべての情報を入力してください
次はLocation Locationはユーザエクスペリエンスの 要となります 出発時間の通知やマップとの統合など システムの一体化を担います 位置を示すため CLPlacemarkクラスが使われます CLPlacemarkのオブジェクトは 作れますが MapKitのアイテムも利用できます
オブジェクトを作る場合は 空港名と住所を必ず入れてください
座標が分からず 00を設定すれば Siriは住所だけを使います
次は予約の開始と終了の時間 ユーザの現在や 予約の時間帯に基づき― 開始時刻と終了時刻を表します
ですから出発地の時間帯を設定するか UTCを使ってください
フライトなど 時間が明確な場合は 出発と到着の予定時間を それぞれ指定します 宿泊はチェックインや チェックアウトの時刻を使います
はっきりしない場合nilを入れれば Siriはtypeを基に フィルタを適用しません
次はNotes Siriは予約番号や座席の情報など 便利だと思われる情報を Notesに表示します 表示されることを想定し すべて入力しましょう
最後にアプリケーションへのリンクです タップするとアプリケーションが 詳細を表示します
この操作について見ていきます
まずは先ほど何を提供したか 思い出してみましょう デモでは予約を1件 提供しました
複数の場合を考えてみましょう 往復のフライトなら
予約番号1つに予約が2件あります
つまり 予約番号で 固有の予約を認識できません
そのため itemReferenceという 追加の識別子が必要です
各予約アイテムに1つずつ必要です 識別できるのであれば どう構成しても構いません
この例では 共通の予約番号と固有のフライト番号の 組み合わせです
INGetReservationDetails IntentResponseに加えたら INGetReservationDetailsIntentも 作ります
ユーザがどの予約を見たかを Siriに伝えるために
reservationContainerReferenceで 示します
今回はフライトのアイテムを 2つ提供します 1つの予約なのでContainerReferenceに 共通の番号を設定します
最後にreservationItemReferencesを nilに これはアプリケーションの 起動時のみ使います
これで完了です
アプリケーションが起動する場合は?
詳細を表示するために INGetReservationDetailsIntentを 使います
ユーザが見たい予約の詳細です この例ではユーザが知りたいのは B9C8という予約の詳細だと告げます reservationItemReferencesがnilなら 1つの予約として表示されます 先ほどの例では 両方のフライトが表示されます
ユーザは片方のフライトの内容を 見たがるかもしれません その場合reservationItemReferencesが 1つのアイテムで埋められます INReservationのオブジェクトに 設定したItemReferenceです アプリケーションは その予約だけの 詳細を表示します
アプリケーションの起動前にIntentを INInteractionとNSUserActivityの オブジェクトでラップします activityTypeと一緒に Intentの名前を設定し アプリケーションを起動します
提供された詳細をSiriがどう使い アプリケーションの起動時に どう使うのか紹介しました
変更があった場合は? 予約の変更やキャンセルは Webのページなど アプリケーションの内外で行われます 対処法について お話しします
まず 詳細を提供する 最良のタイミングは?
この例ではユーザが予約の詳細を 見ている時が いいタイミングでしょう さっきのデモのように 通知を表示させれば 予約の詳細を同時に確認できます 最良のユーザエクスペリエンスと 言えます
アプリケーションが バックグラウンドにあっても 変更は更新されるべきです 最新情報が有効になったら バックグラウンドから提供します
この場合 通知はしません
絶好のタイミングは 状況により異なります
関係のない予約を見ている時に 通知されたら
唐突すぎて ユーザは混乱するかもしれません
シームレスな経験のためには 表示すべきではありません
詳細が表示されている間に 通知すべきです
次は変更について見ていきましょう
フライトの座席を例に挙げます
この予約を提供した時には seatのプロパティをnilにしました ユーザが席を選んだので 座席情報を入れ 最新の情報を与えます 予約のライフサイクルの間 itemReferenceは変わりません
Siriがカレンダーなど 関係のある場所に情報を伝えます
キャンセルの場合は?
キャンセルは特殊な変更です この例ではStatusが confirmedの予約でした しかしユーザがキャンセルしました Statusをcancelledにし 更新した詳細を提供します
他の変更と同様 itemReferenceは変更しません
変更への対処法について 紹介しました 本日の話をまとめましょう
Siri Event SuggestionsのAPIを使えば 素晴らしいユーザエクスペリエンスを 提供できます 大切なポイントは3つ
まずアプリケーションは状況に応じ 通知することが求められます
また情報のアップデートも大切です アプリケーションの起動方法も指定し 適切なタイミングで 戻れるようにしましょう
詳しい情報やサンプルコードは 開発者用のサイトを見てください 昨年のセッションも参考になるでしょう
ご清聴ありがとうございました (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。