Настройте пропуска Google Wallet

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

Прежде чем начать, обязательно ознакомьтесь с документацией по конкретному REST API для вашего типа пароля, чтобы увидеть полный список доступных полей.

Фонд: cardTemplateOverride

Основной инструмент для настройки макета пропуска — это объект classTemplateInfo.cardTemplateOverride , который определяется в ресурсе Class пропуска (например, EventTicketClass , LoyaltyClass ). Этот объект позволяет структурировать пропуск, определяя строки и элементы внутри них, предоставляя вам контроль над тем, как отображается информация.

Вы можете ссылаться на данные как из ресурса Class (для информации, общей для всех пользователей), так и из ресурса Object (для сведений, специфичных для каждого пользователя).

1. Настройка с помощью предопределенных полей кошелька.

Предопределенные поля — это стандартные свойства, доступные в API Google Wallet для определенного типа пропуска. Эти поля имеют определенные имена и отображаются Wallet единообразным образом. Примеры включают штрихкод, название события, номер рейса или баланс подарочной карты.

Используя параметр fieldPath этих предопределенных полей, вы можете расположить их в любом месте вашего прохода.

Пример: Отображение штрихкода и сведений, относящихся к конкретному паролю.

В этом примере проездного билета есть «Верхняя строка» и 3 поля данных во второй строке. Первый элемент отображает конкретные значения пользователя из Object , такие как баллы или номер места, специфичные для пользователя. Второй элемент отображает подробности из Class , такие как название мероприятия или уровень программы лояльности, а третий снова отображает конкретные значения пользователя из Object , такие как дополнительный балл или номер секции/автобуса.

Predefined Fields

Определение класса:

...
"classTemplateInfo": {
      "cardTemplateOverride": {
        "cardRowTemplateInfos": [
          {
            "twoItems": {
              "startItem": {
                "firstValue": {
                  "fields": [
                    {
                    "fieldPath": "object.accountName",
                    }
                  ]
                }
              },
              "endItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "object.secondaryLoyaltyPoints.label"
                    },
                    {
                      "fieldPath": "object.secondaryLoyaltyPoints.balance"
                    }
                  ]
                }
              }
            }
          },
          {
            "twoItems": {
              "startItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "object.loyaltyPoints.label"
                    },
                    {
                      "fieldPath": "object.loyaltyPoints.balance"
                    }
                  ]
                }
              },
              "endItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "class.rewardsTierLabel"
                    },
                    {
                      "fieldPath": "class.rewardsTier"
                    }
                  ]
                }
              }
            }
          },
        ]
      }
    }
...
"rewardsTier": "Gold",
"rewardsTierLabel": "Tier",
...

Определение объекта

...
"accountName": "Camille Walsh",
"loyaltyPoints": {
    "balance": {
        "string": "1500"
    },
    "label": "Points"
},
"secondaryLoyaltyPoints" : {
    "balance": {
        "money": {
            "micros" : "35050000",
            "currencyCode": "USD",
        }
    },
    "label": "Balance"
}
...

Форматирование полей даты и времени

Для любого поля даты или времени в поддерживаемых пропусках можно указать пользовательский формат с помощью свойства dateFormat . Это позволяет управлять отображением даты в пропуске, например, показывать только время, полную дату и время или только дату. Если dateFormat не указан, будет использоваться формат по умолчанию.

"fields": [
  {
    "fieldPath": "object.validTimeInterval.start.date",
    "dateFormat": "DATE_ONLY"
  }
]

Полный список доступных форматов см. в документации DateFormat .

2. Настройка с помощью полей, определяемых разработчиком.

Для максимальной гибкости Google Wallet позволяет создавать собственные пользовательские поля данных с помощью textModulesData . Это идеально подходит для отображения уникальной информации, которая не помещается в предопределенные поля, например, краткие заметки, преимущества для участников или сведения, относящиеся к конкретному местоположению.

Вы определяете элемент textModulesData с уникальным id в Object или Class , а затем ссылаетесь на этот id в cardTemplateOverride .

Структурные ряды карточек

Вы можете создать проход с одним, двумя или тремя элементами данных на проход, что позволит вам логически организовать информацию. Строгих ограничений на количество добавляемых строк нет, но для удобства пользователя следует учитывать, что наиболее важно отобразить на лицевой стороне карточки.

  • Рекомендация: Для получения дополнительной информации используйте нижнюю часть пропуска или другие функции Wallet, такие как messages , linksModuleData или linkedOfferIds . Это позволит сохранить основной вид пропуска свободным от лишних элементов.

Пример: строка из трех элементов с пользовательскими данными.

Создайте строку для отображения пользовательских данных. Для карты лояльности это могут быть баллы, уровень и баланс. Для билета на мероприятие это могут быть «Секция», «Ряд» и «Место».

Custom and Predefined Fields

Определение класса: Класс cardTemplateOverride ссылается на три уникальных идентификатора: detail1 , detail2 и detail3 .

...
"classTemplateInfo": {
      "cardTemplateOverride": {
        "cardRowTemplateInfos": [
        {
            "twoItems": {
              "startItem": {
                "firstValue": {
                  "fields": [
                    {
                    "fieldPath": "object.accountName",
                    }
                  ]
                }
              },
              "endItem": {
                "firstValue": {
                  "fields": [
                    {
                     "fieldPath": "object.textModulesData['mem_since']",
                    }
                  ]
                }
              }
            }
          },
          {
            "twoItems": {
              "startItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "object.loyaltyPoints.label"
                    },
                    {
                      "fieldPath": "object.loyaltyPoints.balance"
                    }
                  ]
                }
              },
              "endItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "class.rewardsTierLabel"
                    },
                    {
                      "fieldPath": "class.rewardsTier"
                    }
                  ]
                }
              }
            }
          },
          {
            "twoItems": {
              "startItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "object.secondaryLoyaltyPoints.label"
                    },
                    {
                      "fieldPath": "object.secondaryLoyaltyPoints.balance"
                    }
                  ]
                }
              },
              "endItem": {
                "firstValue": {
                  "fields": [
                    {
                      "fieldPath": "object.textModulesData['visits']",
                    }
                  ]
                }
              }
            }
          },
        ]
      }
    }
...
"rewardsTier": "Gold",
"rewardsTierLabel": "Tier",

Определение объекта: Object предоставляет данные и соответствующие идентификаторы для каждого поля.

...
"accountName": "Camille Walsh",
"loyaltyPoints": {
    "balance": {
        "string": "1500"
    },
    "label": "Points"
},
"secondaryLoyaltyPoints" : {
    "balance": {
        "money": {
            "micros" : "28250000",
            "currencyCode": "USD",
        }
    },
    "label": "Balance"
},
"textModulesData": [
{
    "header": "Visits",
    "body": "17",
    "id": "visits"
  },
  {
    "header": "Member since",
    "body": "Mar 01, 2024",
    "id": "mem_since"
  },
]
...

Данные о классах и объектах для вариаций

Вы можете комбинировать данные на уровне класса и объекта для создания динамических, персонализированных проходов. Это полезно для создания различных версий одного и того же прохода.

  • Класс textModulesData : Используйте это для отображения одинаковых данных для группы пользователей (например, сообщение «Добро пожаловать в VIP» для всех обладателей VIP-билетов).
  • textModulesData на уровне объекта: Используйте это для указания сведений, относящихся к конкретному пользователю (например, «Джейн, ваше место имеет ограниченный обзор»).

Пример: Отображение пропусков, специфичных для каждого уровня.

Вы можете создавать различные ресурсы Class для разных вариантов пропусков, например, «Общий вход» против «VIP» для мероприятия или «Эконом» против «Бизнес» для рейса. Каждый класс может иметь уникальный дизайн (изображение в качестве главного элемента, цвет) и текст по умолчанию.

Участник серебряного уровняУчастник получил золотой статус.Участник уровня Diamond
Участник, начинающий с Серебряного уровня. Участник получил золотой статус. Ещё один участник уровня Diamond.

Содержимое нижней части пропуска

Поля из linksModuleData и imageModulesData не отображаются при их использовании в cardTemplateOverride . Этот контент автоматически отображается в нижней части пропуска , обеспечивая пользователям более удобный доступ к ссылкам на службу поддержки клиентов, рекламным изображениям, условиям использования и другой дополнительной информации.

3. Помимо внешнего вида карты: другие варианты переопределения шаблона

Объект classTemplateInfo предлагает больше возможностей, чем просто cardTemplateOverride . Вы можете настроить другие элементы интерфейса Google Wallet, чтобы обеспечить более удобное и интуитивно понятное отображение ваших пропусков.

Для получения полной информации обо всех доступных переопределениях обратитесь к справочной документации ClassTemplateInfo .

  • listTemplateOverride : Настраивает расположение строк в главном списке приложения Google Wallet, позволяя выделить наиболее важные поля еще до того, как пользователь откроет свой пропуск.
  • detailsTemplateOverride : Структурирует строки и макет нижней части прохода, предоставляя гибкое пространство для дополнительной информации, ссылок и текста.
  • cardBarcodeSectionDetails : Позволяет настроить раздел штрихкода на пропуске.