パスのクラスとオブジェクトの概要

エンドユーザーが Google ウォレットに保存するために発行できるパスのほとんどは、パス クラスとパス オブジェクトという 2 つのコンポーネントで定義されます。ユーザーにパスを発行するたびに、Passes Class と Passes Object の両方のインスタンスが必要になります。これにより、Google Wallet API は、作成するパスの種類と、パスに表示する詳細(ギフトカードの金額やチケット所有者の名前など)を把握できます。

Google Wallet API には、インスタンスを作成してユーザーに発行するパス(GiftCardClassGiftCardObjectGenericClassGenericObject など)の作成に使用する、事前定義されたパス クラスとパス オブジェクトのセットが用意されています。

各パス クラスとパス オブジェクトのインスタンスは JSON オブジェクトとして定義されます。このオブジェクトには、そのパスタイプが想定する特定のユースケースに対応する一連の必須プロパティと省略可能なプロパティがあります。

パスのクラス

パスのクラスは、ユーザーに発行する 1 つ以上のパスの作成に使用される共有済みテンプレートと考えることができます。パス クラスは、それを参照するすべてのパスに含まれる共通のプロパティのセットを定義します。

たとえば、次の EventTicketClass のインスタンスは、今後のイベント(会場、イベント名、発行者、日時)のすべての発行済みチケットに共通するフィールドを定義します。

{
  "id": "ISSUER_ID.EVENT_CLASS_ID",
  "issuerName": "[TEST ONLY] Heraldic Event",
  "localizedIssuerName": {
    "defaultValue": {
      "language": "en-US",
      "value": "[TEST ONLY] Heraldic Event"
    }
  },
  "eventName": {
    "defaultValue": {
      "language": "en-US",
      "value": "Google Live"
    }
  },
  "venue": {
    "name": {
      "defaultValue": {
        "language": "en-US",
        "value": "Shoreline Amphitheater"
      }
    },
    "address": {
      "defaultValue": {
        "language": "en-US",
        "value": "ADDRESS_OF_THE_VENUE"
      }
    }
  },
  "dateTime": {
    "start": "2023-04-12T11:30"
  },
  "reviewStatus": "UNDER_REVIEW"
}
  

Passes クラスの各インスタンスには、指定する id プロパティが必要です。このクラス ID は、新しいパス オブジェクト インスタンスを作成する際に参照する一意の識別子として機能します。

パス オブジェクト

パスクラスのインスタンスは、1 つ以上のパスで使用される共有プロパティのセットを指定しますが、パス オブジェクトは、特定のユーザーに発行される特定のパスの一意の詳細を指定します。

たとえば、Google Wallet API でイベント チケット パスを作成する場合、発行されるチケットごとに値が異なるため、EventTicketObject インスタンスにはそのチケットに割り当てられた座席のプロパティが含まれます。

{
  "id": "ISSUER_ID.OBJECT_ID",
  "classId": "ISSUER_ID.EVENT_CLASS_ID",
  "state": "ACTIVE",
  "seatInfo": {
    "seat": {
      "defaultValue": {
        "language": "en-us",
        "value": "9"
      }
    },
    "row": {
      "defaultValue": {
        "language": "en-us",
        "value": "L"
      }
    },
    "section": {
      "defaultValue": {
        "language": "en-us",
        "value": "45"
      }
    },
    "gate": {
      "defaultValue": {
        "language": "en-us",
        "value": "7C"
      }
    }
  },
  "barcode": {
    "type": "BARCODE_TYPE_UNSPECIFIED",
    "value": "BARCODE_VALUE",
    "alternateText": ""
  }
}
  

Passes オブジェクトの各インスタンスには、指定する id プロパティが必要です。このオブジェクト ID は、ユーザーにパスを発行する際に参照する一意の識別子として機能します。

パス クラスとパス オブジェクトの連携

パス オブジェクトは、クラス ID を参照するか、パス クラスの完全な定義を含めることで、パス クラスのインスタンスを拡張する必要があります。パスクラスとパス オブジェクト インスタンスのこの関係により、発行されたすべてのパスに共通するプロパティをパスクラス インスタンスで設定して更新し、個々のパスに固有のプロパティをパス オブジェクト インスタンスで設定できます。

たとえば、次のシンプルなイベント チケット パスの図は、共有 EventTicketClass で定義されたフィールドと、EventTicketObject で定義された特定のチケットのフィールドが組み合わされて、最終的に発行されるパスが構成される様子を示しています。パス オブジェクトの classId プロパティでパス クラスの ID がどのように参照されているかに注目してください。

パスクラス インスタンスに対する変更は、それを参照するすべてのパス オブジェクト インスタンスにすぐに反映されます。パス クラス インスタンスに対する変更は、ユーザーが次に同期したときに Google ウォレット アプリのパスに反映されます。

ユーザーの Google ウォレットにパスを追加する

パスをユーザーの Google ウォレットに追加するには、ユーザーの Google ウォレットに保存されるパス オブジェクト インスタンスに関して発行者が作成したクレームを含む JSON Web Token(JWT)を作成します。最も重要なのは、ユーザーに発行するパス オブジェクト インスタンスのオブジェクト ID です。JWT は、[Google ウォレットに追加] ボタンまたは [Google ウォレットに追加] リンクを介してユーザーに配信されます。

ユーザーがボタンまたはリンクをクリックして発行されたパスを Google ウォレットに追加すると、JWT でエンコードされた Passes オブジェクト インスタンスへのリンクがそのユーザーの Google アカウントにリンクされます。つまり、ユーザーがボタンを再度クリックしたとき、そのパス オブジェクトへのリンクはすでに存在するため、重複したコピーがユーザーのウォレットに追加されることはありません。

ユーザーが Google ウォレット アプリからパスを削除すると、対応する Passes オブジェクト インスタンスはユーザーとのリンクが自動的に解除されますが、削除はされません。つまり、ユーザーが [Google ウォレットに追加] ボタンまたはリンクをもう一度クリックすると、新しいパス オブジェクト インスタンスや JWT を作成しなくてもパスを保存できます。