Обзор классов и объектов в приложении "Кошелек"

Почти все карты, которые вы можете выпустить для сохранения в Google Кошельке, состоят из двух компонентов: класса и объекта. Чтобы выпустить карту для пользователя, вам понадобятся экземпляры класса и объекта Passes. Они сообщают Google Wallet API, какой тип карты нужно создать, и содержат информацию, которая будет на ней показана, например номинал подарочной карты или имя владельца билета.

Google Wallet API предоставляет набор классов и объектов карт, на основе которых вы можете создавать экземпляры карт, например GiftCardClass и GiftCardObject, GenericClass и GenericObject, а затем выпускать их для пользователей.

Каждый экземпляр класса и объекта Passes определяется как объект 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, которое вы указываете. Этот идентификатор класса действует как уникальный идентификатор, на который вы будете ссылаться всякий раз, когда используете его для создания нового экземпляра объекта Passes.

Объекты Passes API

Если экземпляр класса Passes Class определяет набор общих свойств, которые будут использоваться в одной или нескольких картах, то объект Passes Object определяет уникальные сведения о конкретной карте, выпущенной для конкретного пользователя.

Например, когда с помощью 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 Object требуется указать свойство id. Этот идентификатор объекта действует как уникальный идентификатор, на который вы будете ссылаться при выдаче карты пользователю.

Как классы билетов и карт работают с объектами билетов и карт

Объекты Passes должны расширять экземпляр класса Passes, ссылаясь на его идентификатор или включая полное определение класса Passes. Благодаря такой связи между экземплярами класса и объекта вы можете задавать и обновлять свойства, общие для всех выпущенных карт, через экземпляр класса, а уникальные свойства – через экземпляр объекта.

Например, на схеме ниже показано, как поля, определенные в общем объекте EventTicketClass, и поля для конкретного билета, определенные в объекте EventTicketObject, объединяются для создания окончательного выпущенного билета. Обратите внимание, что на идентификатор класса карты есть ссылка в свойстве classId объекта карты.

Изменения, внесенные в экземпляр класса карт и билетов, сразу же распространяются на все экземпляры объектов карт и билетов, которые на него ссылаются. Все изменения, внесенные в экземпляр класса карт, будут отражены на карте в приложении "Google Кошелек" при следующей синхронизации.

Добавление карты в Google Кошелек пользователя.

Чтобы добавить карту в Google Кошелек пользователя, создайте веб-токен JSON (JWT), содержащий утверждения, которые вы (эмитент) делаете в отношении экземпляра объекта Passes, который будет сохранен в Google Кошельке пользователя. Самое важное – это идентификатор экземпляра объекта Passes, который вы выпускаете для пользователя. Затем JWT передается пользователю с помощью кнопки Добавить в Google Кошелек или ссылки Добавить в Google Кошелек.

Когда пользователь нажимает кнопку или ссылку, чтобы добавить выпущенную карту в Google Кошелек, ссылка на экземпляр объекта карты, закодированный в JWT, связывается с аккаунтом Google этого пользователя. Это означает, что, когда пользователь нажмет кнопку ещё раз, ссылка на объект уже будет существовать, поэтому в кошелек не добавится дубликат.

Если пользователь удаляет карту из приложения "Google Кошелек", связь между ним и экземпляром объекта Passes Object автоматически разрывается, но сам экземпляр не удаляется. Это означает, что пользователь может нажать кнопку Добавить в Google Кошелек или ссылку ещё раз, чтобы сохранить карту без необходимости создавать новый экземпляр объекта карт или JWT.