
-
ウォレットの新機能
ウォレットの最新機能と強化された機能を紹介します。新しい魅力的なデザインで搭乗券をアップデートする方法や、マルチイベントチケット用の新しい機能について説明します。また、ウォレットにパスをシームレスに追加するのに役立つAPIの変更についても解説します。
関連する章
- 0:00 - イントロダクション
- 0:51 - チケットへの今後予定のイベントの追加
- 7:08 - 搭乗券のアップグレード
- 16:18 - パスの自動追加
リソース
関連ビデオ
WWDC25
WWDC24
-
このビデオを検索
「ウォレットの新機能」へようこそ ウォレットチームのエンジニア Pavelです 本日のセッションでは ウォレットに導入予定の新機能と パスに新機能を 採用する方法について説明します まず チケットに近日開催予定の イベント情報を追加する方法を紹介します チケット購入者は チケットが対応している すべてのイベントに簡単にアクセスできます 次に 搭乗券を新しいデザインに アップグレードする方法を ご紹介します 新しいデザインには乗客の旅程で必要な すべてのフライト情報が表示されます そして最後に 新しいPKPassLibrary APIの使い方を 実演します このAPIでは ワンタイム認証後 iOSアプリでパスを自動的に ウォレットに追加できるようになります お話しすることがたくさんあるので 早速近日開催予定のイベントに移りましょう 昨年 ウォレットではまったく新しい デザインに対応するための セマンティックタグを活用した Poster Event Ticketが導入され 会場への道順が分かるマップ イベントに関する 詳しい情報が記載された イベントガイド アプリの追加サービスなど イベントに関する 有用なコンテキストを提供しました 今年のPoster Event Ticketでは 近日開催予定のイベントも サポートできるため 1枚のチケットで 複数のイベントに簡単にアクセスできます
近日開催予定のイベントをタップすると Poster Event Ticketの 構造が反映された 詳細画面が開きます この画面は イベントの 新しいアートワーク 会場情報 イベントの詳細ガイド イベントに固有の 他の情報で構成できます 近日開催予定のイベントでは iOS 18で 導入されたPoster Event Ticketの セマンティックが活用されます セマンティックの仕組みの 概要については WWDC24のセッション 「What’s new in Wallet & Apple Pay」を ぜひご覧ください 次に pass.jsonで近日開催予定のイベントを 構成する方法をお見せします 近日開催予定のイベントは新しい "upcomingPassInformation"配列で定義され ウォレットで近日開催予定の イベントリストに表示する必要のある すべてのイベントが含まれます "upcomingPassInformation"配列内の 各オブジェクトについて typeを"event"に設定し 一意の識別子 イベントの表示名 イベントの日付を 含めます
これらのフィールドは近日開催予定の イベントの詳細画面に 目立つように表示されます
近日開催予定の イベントオブジェクトは Poster Event Ticketのビルドに使用した 同じ構造に従います
イベントに関する情報を示す "semantics"オブジェクトと semanticsに含まれていないカスタム プロパティを扱う"additionalInfoFields" または"backFields"を含めます 新しい"URL"オブジェクトはイベント関連の すべてのアクションをグループ化し "images"オブジェクトはイベントに 関連付けられた画像を構成します このオブジェクトを使って近日開催予定の イベントのUIを構成する方法をお見せします ウォレットでは 近日開催予定の イベント画面の上部に イベントを表すヘッダー画像が 表示されます デフォルトでは パスの背景画像が ここに表示されます 画像の格納先のURLを指定すれば 近日開催予定のイベントに カスタムの"headerImage"を 追加することもできます
近日開催予定のイベントはiOSや watchOSデバイスに表示されるため ウォレットが表示デバイスに 最適な画像を選択できるよう 表示スケールごとに 別々の画像を 用意しておくとよいでしょう
ヘッダーの下にあるタイルに "venueName"が表示され チケット購入者はマップで この会場を表示できます ここではパスと同じセマンティック構造が 活用されています 近日開催予定のイベントの セマンティックオブジェクトでは "venueName" "venuePlaceID" "venueLocation"の各セマンティックを使って 会場情報を追加しました
このセマンティックオブジェクトには 出演者や座席情報など イベントについて説明する すべてのセマンティックを追加します これにより ウォレットは関連する場所で 詳細情報を表示できます この近日開催予定のイベントには 座席を追加しているため ウォレットの詳細画面に 座席が表示されます
会場名や座席などの一部のセマンティックは 目立つように画面に表示されます 他のほとんどの情報は iOS 18で導入された パスイベントガイドと同じように 機能する近日開催予定の イベントガイドに追加されます
近日開催予定のイベントガイドは そのイベント専用のもので 近日開催予定のイベントオブジェクトの 内容が表示され イベントガイドは よく使うアクションに 素早くアクセスするためのボタン イベントの位置セマンティックを使う 天気タイル 会場マップ 他の関連するセマンティックを 表示するよう構成できます
ここに表示されるURLを設定するために 近日開催予定のイベントに URLオブジェクトを追加し イベントで表示する アクションを含めます ここではパスイベントガイドとは異なる 別のURLのセットを指定しています 近日開催予定のイベントは パスと同じ構造ではありますが パスで定義したプロパティを 再利用しているわけではありません 近日開催予定のイベントガイドと パスイベントガイドで 同じURLを表示するには近日開催予定の イベントオブジェクトに 同じ値を含める必要があります
近日開催予定のイベントの会場マップは 先ほどヘッダー画像で 実演したように 画像の取得元となる URLを指定することで 構成できます デフォルトでは パスイベントガイドの 会場マップは再利用されませんが "reuseExisting"プロパティを trueに設定することで 同じ会場マップを再利用できます URLを指定しない場合 または "reuseExisting"をtrueに設定しない場合 ウォレットに近日開催予定のイベントの 会場マップは表示されません 近日開催予定のイベントは 保持しているチケットで参加できる すべてのイベントをチケット購入者に 知らせるための優れた方法です チケットに近日開催予定の イベントを追加する際は イベントチケットと同じ構造を 使うことを覚えておきましょう 始めるにあたって まずパスで提供している 各セマンティックやURLを 近日開催予定のイベント向けに どう変更するかを検討するとよいでしょう ウォレットのドキュメントは チケットや近日開催予定のイベントを カスタマイズする方法を模索するのに 有用なリソースです パスの作成時に 近日開催予定のイベントを 一度に定義する必要はありません あとから近日開催予定のイベントを 追加する場合は 近日開催予定の新しいイベントを含む 更新パスを送信すればよいのです 近日開催予定のイベントの "isActive"プロパティは 関係のあるイベントをウォレットが 判断する材料となるため このプロパティをイベントの開始時と 終了時に更新することが重要です イベントがキャンセルされた場合 またはチケット購入者と 関係がなくなった場合 pass.jsonから削除することを 検討しましょう
これにより 近日開催予定の イベントリストに関係のある 最新のイベントのみを表示できます では 今年公開予定の搭乗券パスの アップグレードと すべての新機能の活用方法を 見ていきましょう ウォレットの搭乗券は何百万人もの乗客が 空港の保安検査を通り フライトに搭乗する際に 役立っています 今年 搭乗券のメジャー アップグレードにより 搭乗券がこれまで以上に動的で 構成可能な新しいデザインに変わります アップグレードされる搭乗券は Appleのフライトサービスと統合され 自動的に最新の状態に保たれるため ゲートの変更や遅延があっても パスを更新する必要がなくなります まったく新しいライブアクティビティが 導入されることで 乗客は 主要なフライト情報に 簡単にアクセスでき 旅程を通して 情報を把握できます ライブアクティビティはメッセージで 共有することもできるため 友人や家族も自分のデバイスで フライトを確認できます フライト確認はアップグレードされた すべての搭乗券に組み込まれます 乗客がアップグレードされた 搭乗券を追加すると ウォレットはフライト状況に関する 最新情報にサブスクライブし フライトの変更を乗客に通知します これらの更新は搭乗券と ライブアクティビティの 両方に反映されるため 乗客はどちらからでも フライトの最新情報を確認できます
フライト確認に加えて 新しい搭乗券はマップやFindMyと 緊密にシステム統合されているため 空港への道順の確認や 荷物のトラッキングにも活用できます 航空会社のサービスと アップグレードに関する 新しいセクションでは 旅程に関する さらに詳細な情報を提供できます このセクションをタップすると 旅程中に乗客が取る すべてのアクションと これらのアクションに関連する 概要情報が表示されます これらの新機能の仕組みと アップグレードされた搭乗券を 導入する際の構成方法について 詳しく見てみましょう 搭乗券の一番上から 見ていくと ヘッダーにはフライト番号と 出発日が表示されます アップグレードされた搭乗券では pass.jsonのセマンティックを使用して フライトが識別され これらのフィールドが 常にこの場所に表示されます
搭乗券が追加されると ウォレットでは airlineCode flightNumber originalDepartureDateの セマンティックを使って Appleのフライトサービスで フライトのトラッキングが始まります コードシェア便である場合 マーケティング航空会社コードと フライト番号が表示されるのが 一般的です マーケティング航空会社コードと フライト番号の代わりに 運航便名を示しても構いません どちらを選択した場合も ウォレットは Appleのフライトサービスで 正しいフライトを見つけられます ウォレットではAppleの フライトサービスのデータを使って パスに表示される時刻が 自動的に更新されます 更新パスも送信する場合は 必ずcurrentDepartureDateまたは currentArrivalDateセマンティックを 使用します フライトのスケジュールが正式に 変更されていない限り 元の日付は 更新しないでください パスに戻ると 次のセクションには 都市名 空港コード ゲートの出発時刻と 到着時刻が表示されます 出発日と到着日のセマンティックで ゲート時刻を指定する必要があります 搭乗時刻はoriginalBoardingDateと currentBoardingDateの セマンティックに基づいており 搭乗券の別のフィールドに 目立つように表示されているためです ウォレットで出発時刻と 到着時刻が更新されると 搭乗時刻も自動的に更新され 新しい出発時刻が反映されます パスが追加または更新されると ウォレットで搭乗時刻と出発時刻の セマンティックが比較され 搭乗時間が計算されます Appleのフライトサービスで 出発時刻が変わると パスに表示される搭乗時刻も 自動的に更新され セマンティックを基に計算される 搭乗時間が維持されます そのため フライトが3時間遅れた場合 搭乗時刻も3時間延びます 新しいcurrentBoardingDateで パスを更新すると ウォレットで搭乗時間が 再計算され 必要に応じて搭乗券の時間が 更新されます 以上が セマンティックからウォレットに フライトに関するコンテキストが渡される 一例であり UIには直接結び付いていません ウォレットは 乗客に最新情報を 表示することを優先し セマンティックを使用して 搭乗券に表示されるデータの 経時的な更新方法が決定されます 次は アップグレードされた搭乗券の 他のUIにセマンティックが どう作用するのかを見てみましょう バッジは乗客やゲート係員が 搭乗券で重要な情報を 素早く特定できる新機能です pass.jsonに含める 一部のセマンティックが 搭乗者名の下に 表示されます
アップグレードされた搭乗券では 最大2行のバッジがサポートされており 乗客の航空券の運賃クラス 機内持ち込み条件 アクセシビリティリクエストなどの 情報を表示できます ウォレットでpass.jsonの セマンティックが検討され 一連の適切なバッジが 自動的に配置されます 航空会社間でバッジを標準化するため アップグレードされた搭乗券は "passengerServiceSSRs" セマンティックを介してIATAの 特別サービス要求コードをサポートしています
ほとんどのバッジのテキストは ウォレットによって定義されますが ラベルを完全に制御して 航空会社に固有の情報を表示できる セマンティックをいくつか追加しました 例を見てみましょう semanticsオブジェクトに "passengerServiceSSRs" セマンティックを使って 介助動物と機内車椅子の 特別サービス要求コードを追加しました
航空券の運賃クラスや乗客の 航空会社ステータスといった カスタムセマンティックも いくつか追加しましょう
搭乗券を再度表示してみると セマンティックに基づいた 新しいバッジが確認できます 最初の2つのバッジには私が入力した 文字列が使われていますが 特別サービス要求コードにはウォレットが 提供する文字列が表示されています バッジは セマンティックの 使われ方が分かるよい例です 私のコードでは 各フィールドで 明示的なバッジオブジェクトは定義せず 乗客に関連するコンテキストを 入力しましたが ウォレットは最も重要な情報を 優先させるバッジを 作成できました このようにセマンティックを使うことで 使いやすさを損なうことなく より多くの情報をウォレットに 含めることができます 新しいスキーマにより すべての航空会社に 一連の同じセマンティックが公開されるため 全フライトで一貫した体験を提供できます アップグレードされた搭乗券で使える セマンティックについては デベロッパ向けドキュメントを ぜひご確認ください
次に アプリにユーザーを 呼び戻すアクションを使って 航空会社のサービスとアップグレードに関する 画面を構成する方法を紹介します 航空券の管理 機内Wi-Fiの購入 座席の アップグレードなどのアクションのURLを pass.jsonに含めると アクションのボタンや そのアクションに関する 追加のコンテキストを提供する セマンティックが含まれた サービスとアップグレードの画面が ウォレットに表示されます
URLは pass.jsonで最上位の プロパティとして定義されます アップグレードされた搭乗券では 乗客がフライト前 フライト中 フライト後によく使う様々なアクションが サポートされています
搭乗券に表示するすべての アクションのURLを含め ユーザーが各アクションを 完了するための画面が 直接開くように アプリを設定します
ウォレットでは各アクションに対する 追加のコンテキストも表示されるため できるだけ多くの セマンティックを入力して この画面で充実した包括的な体験を 提供できるようにしましょう 別の例を示しましょう
ラウンジパスを購入するための ボタンを表示する "purchaseLoungeAccessURL"を指定します もう少しコンテキストを追加した方が 効果を期待できそうです "airlineLoungePlaceID" セマンティックを含めると ウォレットでラウンジの場所を示す マップのプレビューが表示されます コンテキストを追加することで ユーザー体験を大幅に向上させ UIを充実させることができました
サービスとアップグレードに関する 画面の構成方法について 簡単に説明しました 覚えておきたいポイントは ウォレットはpass.jsonのURLと セマンティックを使ってUIを 構築するということです デベロッパ向けドキュメントでは 利用可能なすべてのセマンティックや URLについてさらに詳しく 説明しているので アプリでサポートされるアクションを すべて追加できるよう ぜひご確認ください
まとめに入る前に アップグレードされた搭乗券に関する デバイスの互換性について説明すると 本日紹介した新機能はすべて 最新バージョンのiOSとwatchOSを 搭載したデバイスに対応しています アップグレードされた搭乗券のスキーマでは 既存の搭乗券のスキーマに 干渉することなく 新しいプロパティを追加できます ウォレットで新しいプロパティを使用しない 以前のOSを搭載した デバイスをお使いの乗客も いらっしゃるため アップグレードされた搭乗券を 導入するおすすめの方法は セマンティックとURLを 既存の搭乗券に追加することです そうすることでOSのバージョンに関係なく 素晴らしい体験を 提供できます ここまで ウォレットで 動的なイベントチケットや 搭乗券を作成する方法について お見せしてきました 次に 新しいPKPassLibrary APIを使って これらのパスをシームレスに ウォレットに追加する方法を ご紹介します パスをウォレットに追加するには 常にユーザーの操作が必要でした アプリでAddPassesViewControllerを 使う方法では パスのプレビューを表示し もう一度タップして パスを追加する必要があります また PKPassLibraryでaddPasses APIを 呼び出す方法では パスをウォレットに追加する前に アラートが表示されます
これらのオプションは パスをウォレットに 頻繁に追加しないユーザーにはおすすめです パスを追加するタイミングを 完全に制御できるためです アプリからパスを定期的にウォレットに 追加するユーザーもいるでしょう 頻繁に飛行機を利用する人であれば 週に数枚の搭乗券を追加する場合があり それぞれを個別に確認するのは 使い勝手が悪いかもしれません 今年の新機能では バックグラウンドでの パスの追加をリクエストできます アプリがパスをウォレットに自動的に 追加するのを許可するようユーザーに促したら
addPasses APIを使ってパスが 追加のプロンプトなしで バックグラウンドで 追加されます その後 アプリにパスが追加されたことを ユーザーに伝える通知が ウォレットから送信されます わずか数行のコードで 新しいAPIを導入できるのです プッシュ通知の送信許可を リクエストしたことがあれば なじみのある操作でしょう ここに AddPassToWalletボタンが 表示されているSwiftUIビューがあります 最初の手順では バックグラウンドでの パスの追加機能をリクエストします ボタンの完了 ハンドラを使って 次のパスを追加したあとに ユーザーにプロンプトを表示します
これは非同期呼び出しなので コードをTaskでラップし PKPassLibraryでrequestAuthorization (for: .backgroundAddPasses)を 呼び出します
ボタンで完了が実行されたら この機能をアプリに付与するよう求める プロンプトがユーザーに表示されます
これは1回限りのプロンプトであるため ユーザーが選択を行ったあとに 呼び出しても プロンプトは表示されません では 許可していることを 確認するためのコードを追加し パスを自動的に追加してみましょう
ビューが読み込まれたら PKPassLibraryで authorizationStatus(for capability:)で 許可ステータスを確認しましょう 権限があればPKPassLibrary.addPassを 呼び出して パスを追加できます
このAPIはパスの配列を 受け入れるため 一度に複数のパスを追加できます これだけです この数行のコードで アプリでパスを 自動的に追加できるようになりました 新しいAPIの仕組みをまとめましょう 新しいrequestAuthorization (for capability:) APIにより バックグラウンドでのパスの 追加機能をリクエストします 許可をリクエストできるのは 一度だけです そのため ユーザーが許可すると 確信している場合に このAPIを使用することを おすすめします
このAPIを複数回呼び出しても 現在の状態が返されるだけです 許可をリクエストすると 「設定」アプリに新しい項目が表示され ユーザーがいつでもアプリのこの機能を 切り替えられるようになります authorizationStatus(for capability:)を 呼び出せば プロンプトを表示させずに 現在の許可ステータスを確認できます バックグラウンドでのパスの 追加機能を活用するには addPasses APIを使って パスをウォレットに追加します 以上がウォレットの新機能です 今年公開される新機能により イベントチケットや搭乗券が これまで以上に動的になり iOSアプリとウォレットをシームレスに 統合できるようになります 搭乗券とイベントチケットに 新しいプロパティを導入して 新機能をご活用ください デベロッパ向けドキュメントで さらに詳しく説明しているので ぜひご確認ください 新機能ですので 以前のOSバージョンも 引き続きサポートし OSのバージョンに関係なく 優れたユーザー体験を 提供できるようにする必要があります ウォレットを頻繁に使用するユーザーが パスを追加するのに便利な APIもご用意しているので 新しいバックグラウンドでの パスの追加機能を 可能な限りご活用ください
ありがとうございました WWDCをお楽しみください
-