패스 클래스 및 객체 개요

최종 사용자가 Google 월렛에 저장하기 위해 발급할 수 있는 대부분의 패스는 패스 클래스와 패스 객체라는 두 가지 구성요소로 정의됩니다. 사용자에게 패스를 발급할 때마다 Google Wallet API에 구성할 패스 유형과 패스에 표시할 세부정보(예: 기프트 카드 가격 또는 티켓 소지자 이름)를 알려주는 패스 클래스 및 패스 객체의 인스턴스가 모두 필요합니다.

Google Wallet API는 개발자가 인스턴스를 생성한 다음 GiftCardClass, GiftCardObject, GenericClass, GenericObject 등 사용자에게 발급되는 패스를 만드는 데 사용할 수 있는 사전 정의된 패스 클래스 및 패스 객체 집합을 제공합니다.

각 패스 클래스 및 패스 객체 인스턴스는 JSON 객체로 정의되며, 이 객체에는 패스 유형의 특정 사용 사례에 해당하는 필수 및 선택적 속성 집합이 있습니다.

패스 클래스

패스 클래스는 사용자에게 발급할 하나 이상의 패스를 만드는 데 사용되는 공유 템플릿이라고 생각하면 됩니다. 패스 클래스는 이를 참조하는 모든 패스에 포함될 공통 속성 집합을 정의합니다.

예를 들어 다음 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"
}
  

패스 클래스의 각 인스턴스에는 지정하는 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": ""
  }
}
  

패스 객체의 각 인스턴스에는 id 속성이 필요하며 이를 지정해야 합니다. 이 객체 ID는 사용자에게 패스를 발행할 때 참조하는 고유 식별자 역할을 합니다.

패스 클래스가 패스 객체와 작동하는 방식

패스 객체는 클래스 ID를 참조하거나 전체 패스 클래스 정의를 포함하여 패스 클래스의 인스턴스를 확장해야 합니다. 패스 클래스와 패스 객체 인스턴스의 관계는 패스 클래스 인스턴스를 통해 발급된 모든 패스에 공통적인 속성과 패스 객체 인스턴스의 개별 패스에 고유한 속성을 설정하고 업데이트할 수 있다는 것을 의미합니다.

예를 들어 간단한 이벤트 티켓 패스의 다음 다이어그램은 공유 EventTicketClass에 정의된 필드와 EventTicketObject에 정의된 특정 티켓의 필드가 결합되어 최종 발급된 패스를 구성하는 방법을 보여줍니다. 패스 객체의 classId 속성에서 패스 클래스의 ID를 참조하는 방법에 유의하세요.

패스 클래스 인스턴스 인스턴스의 변경사항은 해당 인스턴스를 참조하는 모든 패스 객체 인스턴스에 즉시 전파됩니다. 패스 클래스 인스턴스에 대한 변경사항은 다음에 사용자가 동기화할 때 Google 월렛 앱에서 패스에 반영된 것을 사용자가 확인할 수 있습니다.

사용자의 Google 월렛에 패스 추가

사용자의 Google 월렛에 패스를 추가하려면 발급기관이 패스 객체 인스턴스에 대해 제기하는 클레임을 포함하는 JSON 웹 토큰 (JWT)을 만듭니다. 이 클레임은 사용자의 Google 월렛 (가장 중요하게는 사용자에게 발급하는 패스 객체 인스턴스의 객체 ID)에 저장됩니다. JWT는 Google 월렛에 추가 버튼 또는 Google 월렛에 추가 링크를 통해 사용자에게 전송됩니다.

사용자가 발급된 패스를 Google 월렛에 추가하기 위해 버튼이나 링크를 클릭하면 JWT로 인코딩된 패스 객체 인스턴스가 해당 사용자의 Google 계정에 연결됩니다. 즉, 사용자가 버튼을 다시 클릭하면 해당 패스 객체에 대한 링크가 이미 존재하므로 사용자의 월렛에 중복 사본이 추가되지 않습니다.

사용자가 Google 월렛 앱에서 패스를 삭제하면 해당 패스 객체 인스턴스와 사용자의 연결이 자동으로 해제되지만 삭제되지는 않습니다. 즉, 사용자는 Google 월렛에 추가 버튼이나 링크를 다시 클릭하여 새 패스 객체 인스턴스 또는 JWT를 만들 필요 없이 패스를 저장할 수 있습니다.