Обзор классов и объектов Passes

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

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

Каждый экземпляр класса Passes и объекта 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"
}
  

Для каждого экземпляра класса Passes требуется указанное вами свойство id . Этот идентификатор класса действует как уникальный идентификатор, на который вы будете ссылаться всякий раз, когда будете использовать его для создания нового экземпляра объекта Passes.

Передаёт объекты

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

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

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

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

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

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

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

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

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

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