사용 사례

다음 패스 카테고리 중 하나를 선택하여 사용 방법을 자세히 알아보세요.


Google Pay API for Passes를 사용하면 이벤트 티켓을 통해 사용자와 소통하며 참여를 유도할 수 있습니다. 이 가이드에는 저장된 이벤트 티켓의 기능을 보다 잘 이해할 수 있도록 개념이 설명되어 있습니다.

이벤트 티켓을 구현하려면 클래스 및 객체를 미리 삽입하는 메서드인 JWT POST 요청 메서드 또는 '스키니' JWT 링크를 사용하세요.

다음 사용 사례는 이벤트 티켓 카테고리에만 해당합니다.

패스 업데이트

생성된 패스에 변경사항이 있는 경우 REST API를 사용하여 변경사항을 사용자에게 전달합니다. 이 변경사항이 클래스에만 영향을 줄 경우 Google Pay 판매자 센터를 사용할 수도 있습니다. 패스 업데이트는 사용자와 소통하는 중요한 방법입니다.

장소의 주소를 변경하는 등 특정 이벤트의 모든 이벤트 티켓에 대한 필드를 업데이트하려면 EventTicketClassupdate 또는 patch하거나 Google Pay 판매자 센터를 사용하면 됩니다. Google이 이 정보를 업데이트된 EventTicketClass와 연결된 모든 EventTicketObject에 전달합니다. 이는 EventTicketClass 수준에서 정의된 모든 필드에 적용됩니다.

티켓 소유자 한 명의 좌석 번호를 변경하는 등 패스 하나를 업데이트하는 경우에는 EventTicketObject 하나를 update 또는 patch해야 합니다. 이는 EventTicketObject 수준에서 정의된 모든 필드에 적용됩니다.

때로는 변경사항이 언제 발생하는지, 아니면 update 또는 patch 요청을 언제 트리거해야 할지 모를 수도 있습니다. 이러한 경우에는 각 클래스 및 객체에 대한 update 또는 patch 요청을 주기적으로 예약합니다. EventTicketClasslist 메서드를 호출하면 특정 발급기관 계정의 모든 클래스를 찾을 수 있습니다. EventTicketObjectlist 메서드를 호출하면 특정 클래스의 모든 객체를 찾을 수 있습니다.

여러 패스를 저장하는 버튼 만들기

패스를 여러 장 구매한 사용자가 모든 패스를 Google Pay에 저장할 가능성이 높다면 사용자가 Google Pay에 저장 버튼 또는 링크 클릭 한 번으로 여러 객체를 저장할 수 있도록 하는 것이 좋습니다. JSON 웹 토큰(JWT)에 서명할 때 여러 객체 또는 클래스를 정의할 수 있습니다.

JWT를 만들 때는 다음 형식 중 하나를 사용해야 합니다.

  • 미리 삽입된 클래스 및 객체만 사용합니다.
  • JWT에 완전하게 정의된 객체 및 클래스 리소스만 사용합니다.

여러 패스의 버튼을 만드는 방법에 대한 예는 여러 참석자 저장 버튼을 참조하세요.

패스의 UI 표현에 대한 자세한 내용은 그룹 이벤트 티켓을 참조하세요.

그룹 이벤트 티켓

개별 객체가 아니라 그룹에서 사용될 경우 작동 방식이 달라지는 기능이 있습니다. 예를 들어 사용자 인터페이스에서 저장된 여러 패스의 상태 알림 또는 구성이 그러한 기능에 해당합니다.

EventTicketObject가 한 그룹으로 간주되는 조건은 class.eventID 속성이 정의되어 있는지 여부에 달려 있습니다.

class.eventId를 사용한 그룹화

class.eventId 속성은 다른 속성과 관계없이 티켓을 그룹화할 수 있습니다. 예를 들어 두 개의 EventTicketObject 객체가 class.eventId = "foo"를 갖고 있으면 class.eventNameclass.dateTime.start가 서로 다르더라도 두 객체 모두 한 그룹에 속하는 것으로 간주됩니다.

class.eventID가 사용되는 경우 객체가 한 그룹으로 간주되기 위해서는 다음 속성만 일치하면 됩니다.

  • 발급기관 ID(Google Pay API for Passes 판매자 센터에서 제공)
  • class.eventId

class.eventId를 사용하지 않는 그룹화

EventTicketObject 객체에 class.eventId가 설정되어 있지 않으면 해당 객체는 아래에 나열된 모든 속성이 동일한 경우에만 한 그룹으로 간주됩니다.

  • 발급기관 ID(Google Pay API for Passes 판매자 센터에서 제공)
  • class.eventName
  • class.dateTime.start

예정된 이벤트 알림 수신

Google Pay는 이벤트 3시간 전에 사용자에게 알림을 보냅니다. 이벤트 시간은 class.dateTime.start로 정의됩니다.

이 알림을 수신하려면 사용자가 알림을 사용 설정해야 합니다. 알림 수신을 원하는 사용자는 설정 > 알림으로 이동하여 패스 관련 업데이트를 사용 설정하면 됩니다.

사용자가 잠금 화면에 알림이 표시되도록 설정한 경우 알림 영역과 잠금 화면에 알림이 표시됩니다.

알림은 다음과 같이 수정 불가능한 형식으로 표시됩니다.

class.eventName
Expand for more options

사용자가 알림을 탭하고 기기의 잠금을 해제하면 Google Pay 앱에 패스가 표시됩니다.

사용자에게 패스가 여러 개 있으면 가장 빨리 사용할 수 있는 패스만 표시됩니다. 그룹 이벤트 티켓에 따라 그룹화된 패스를 저장한 경우 그룹에 속한 패스 중 하나만 알림에 표시됩니다. 하지만 알림을 탭하고 왼쪽과 오른쪽으로 스와이프하면 그룹의 다른 패스도 볼 수 있습니다.

알림은 고정되며 사용자가 알림을 열어본 후에도 자동으로 종료되지 않습니다. class.dateTime.end 후 60분이 지나면 자동으로 종료됩니다. class.dateTime.end 시간이 지정되지 않았다면 class.dateTime.start가 대신 사용됩니다.

연결 쿠폰

연결 쿠폰을 사용하면 이벤트 티켓 뷰에 기존 쿠폰을 표시하여 사용자가 관련 콘텐츠를 찾기 쉽도록 할 수 있습니다. EventTicketObject의 쓰기 가능한 목록 필드인 linkedOfferIds는 이벤트 티켓과 연결된 쿠폰을 나타냅니다.

연결 전 쿠폰 생성

연결 쿠폰의 링크를 만들려면 이벤트 티켓에 연결된 쿠폰 클래스 및 객체가 이미 생성되어 있어야 합니다. 쿠폰 생성에 대한 자세한 내용은 쿠폰을 참조하세요. 독립형 쿠폰과 달리 연결 쿠폰은 사용자가 쿠폰을 명시적으로 저장하지 않아도 됩니다. OfferObject에 있는 id 필드가 EventTicketObject를 가리키는 데 사용됩니다.

기존 쿠폰은 REST API 호출 insert 또는 update 또는 patch 또는 modifyLinkedOfferObjects를 사용하여 이벤트 티켓에 연결할 수 있습니다.

insert 호출을 사용하여 이벤트 티켓을 생성한 즉시 쿠폰을 이벤트 티켓에 연결한 경우 또는 update 호출을 사용하여 쿠폰을 기존 이벤트 티켓과 연결 및 연결 해제한 경우, linkedOfferIds 필드는 다음 형식을 사용하여 EventTicketObject의 나머지 부분과 함께 작성할 수 있습니다.

{
  "id": "2945482443380251551.ExampleObject1",
  "classId": "2945482443380251551.ExampleClass1",
  ...
  "linkedOfferIds": [
    "2945482443380251551.OfferObject1",
    "2945482443380251551.OfferObject2"
  ]
}

patch 호출을 사용하여 쿠폰을 기존 이벤트 티켓에 연결 및 연결 해제한 경우 linkedOfferIds 필드는 요청의 유일한 필드가 될 수 있습니다.

{
  "linkedOfferIds": [
    "2945482443380251551.OfferObject1",
    "2945482443380251551.OfferObject2"
  ]
}

그러나 배열 처리 시 발생하는 실수를 방지하고, 추가해야 할 연결 쿠폰과 삭제해야 할 연결 쿠폰을 지정하고, 그대로 유지해야 할 연결 쿠폰을 생략할 수 있으려면, 다음 예시와 같이 modifyLinkedOfferObjects 메서드를 사용하는 것이 좋습니다.

{
  "linkedOfferObjectIds" {
    "addLinkedOfferObjectIds": [
      "2945482443380251551.OfferObject1",
      "2945482443380251551.OfferObject2"
    ],
    "removeLinkedOfferObjectIds": [
      "2945482443380251551.OfferObject3",
      "2945482443380251551.OfferObject4"
    ]
  }
}

연결 쿠폰으로 이벤트 티켓 디자인

연결 쿠폰은 이벤트 티켓 뷰에서 카드 섹션과 세부정보 섹션 사이에 다음과 같이 표시됩니다. 최대 5개의 연결 쿠폰만 캐러셀에 표시됩니다. 더 많은 쿠폰을 이벤트 티켓에 연결한 경우 캐러셀 끝에 있는 '더보기' 버튼을 클릭하여 모두 표시할 수 있습니다.

연결 쿠폰

클릭하면 연결 쿠폰이 아래와 같이 단순화된 쿠폰 디자인을 사용합니다.

연결 쿠폰 클릭

만료된 패스 처리

Google Pay 앱의 '패스' 탭에는 보관처리된 패스 또는 비활성 패스가 모두 포함된 '만료된 패스' 섹션이 있습니다. 다음 조건 중 하나 이상에 해당하는 패스는 '만료된 패스' 섹션으로 이동됩니다.

  • class.dateTime.end가 만료된 후 72시간 이상 지났습니다. class.dateTime.end가 지정되지 않은 경우 class.dateTime.start가 대신 사용됩니다. 이 패스는 class.dateTime.end 또는 class.dateTime.start가 만료된 후 72~96시간 사이에 '만료된 패스'로 이동합니다.
  • object.validTimeInterval.end.date가 만료됩니다. 이 패스는 object.validTimeInterval.end.date가 만료된 후 최대 24시간 이내에 '만료된 패스'로 이동합니다.
  • object.state 필드가 Expired, Inactive 또는 Completed로 표시되어 있습니다.

사용자가 저장한 패스가 있으면 패스에 링크를 걸기 위해 objectId를 참조합니다.

다음 링크를 사용하여 패스를 참조하세요.

https://pay.google.com/gp/v/object/{<issuerId>}.{<ObjectId>}

패스는 Google Pay 앱 또는 웹브라우저에서 확인할 수 있습니다.

저장된 Google Pay 패스의 헤더 아래에서 앱 또는 웹사이트에 연결할 수 있습니다. 이 기능은 모든 유형의 Google Pay 패스에서 사용할 수 있습니다.

액세스 요청

오프라인 판매자용 지원 양식을 사용하여 액세스를 요청하세요. 다음 사항에 유의하세요.

  • 양식에서 발급기관 ID를 공유해야 합니다.
  • Issue type(발급 유형)에서 'Technical/API Integration(기술/API 통합)'을 선택합니다.
  • Link your app or website below the Google Pay pass(Google Pay 패스 아래에 앱 또는 웹사이트 연결)를 선택합니다.

지정된 Google Pay 패스에 대해 appLinkData를 정의하여 앱 또는 웹사이트의 URI를 설정합니다. URI의 형식은 자유롭지만 동적 링크를 사용하는 것이 좋습니다.

appLinkData 필드의 형식 및 컨텍스트는 다음 소스 코드에서 볼 수 있습니다.

{
  "id": string,
  "classId": string,
  …
  …
  …
  "appLinkData": {
    "androidAppLinkInfo": {
      "appLogoImage": {
        "sourceUri": {
          "uri": string
        }
      },
        "title": {
          "defaultValue": {
            "language": string,
              "value": string
          }
        },
          "description": {
            "defaultValue": {
              "language": string,
                "value": string
            }
          },
            "appTarget": {
              "targetUri": {
                "uri": string,
                  "description": string
              }
            }
    }
  }
  …
  …
  …
}