최종 사용자가 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"
}
Passes Class의 각 인스턴스에는 사용자가 지정하는 id 속성이 필요합니다. 이 클래스 ID는 새 Passes 객체 인스턴스를 만드는 데 사용할 때마다 참조하는 고유 식별자 역할을 합니다.
객체 전달
패스 클래스의 인스턴스는 하나 이상의 패스에서 사용할 공유 속성 집합을 지정하는 반면, 패스 객체는 특정 사용자에게 발급된 특정 패스의 고유한 세부정보를 지정합니다.
예를 들어 Google 월렛 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가 참조되는 방식을 확인하세요.
Passes Class 인스턴스를 변경하면 이를 참조하는 모든 Passes Object 인스턴스에 즉시 전파됩니다. 사용자가 다음에 동기화할 때 Google 월렛 앱의 패스에 패스 클래스 인스턴스에 적용한 변경사항이 반영됩니다.
사용자의 Google 월렛에 패스 추가
사용자의 Google 월렛에 패스를 추가하려면 사용자의 Google 월렛에 저장될 패스 객체 인스턴스에 관해 발급자가 주장하는 내용이 포함된 JSON 웹 토큰(JWT)을 만듭니다. 가장 중요한 것은 사용자에게 발급하는 패스 객체 인스턴스의 객체 ID입니다. 그런 다음 JWT는 Google 월렛에 추가 버튼 또는 Google 월렛에 추가 링크를 통해 사용자에게 전달됩니다.
사용자가 발급된 패스를 Google 월렛에 추가하는 버튼이나 링크를 클릭하면 JWT로 인코딩된 패스 객체 인스턴스가 해당 사용자의 Google 계정에 연결됩니다. 즉, 사용자가 버튼을 다시 클릭하면 해당 패스 객체로 연결되는 링크가 이미 있으므로 중복 사본이 사용자의 월렛에 추가되지 않습니다.
사용자가 Google 월렛 앱에서 패스를 삭제하면 해당 패스 객체 인스턴스가 사용자로부터 자동으로 연결 해제되지만 삭제되지는 않습니다. 즉, 사용자가 Google 월렛에 추가 버튼이나 링크를 다시 클릭하여 새 Passes 객체 인스턴스나 JWT를 만들지 않고도 패스를 저장할 수 있습니다.