Чтобы посмотреть примеры использования, выберите категорию.
С Google Pay API for Passes вы можете использовать специальные предложения для взаимодействия с пользователями. Из этого руководства вы узнаете, как это делать.
В этом разделе описаны примеры использования, применимые только к специальным предложениям.
- Обновление информации о специальных предложениях
- Настройка уведомлений об окончании действия специального предложения
- Настройка уведомлений с учетом местоположения
- Действия со специальными предложениями, у которых истек срок действия
- Создание ссылки на сохраненное специальное предложение
- Добавление к сохраненному предложению ссылки на стороннее приложение или сайт
Обновление информации о специальных предложениях
Иногда необходимо изменить сведения о специальном предложении уже после его сохранения пользователем. Сделать это можно с помощью REST API. Если изменения затрагивают только классы, можно также использовать Google Pay Merchant Center. Обновление информации о специальном предложении – один из важных аспектов взаимодействия с клиентом.
Чтобы обновить данные о всех специальных предложениях (например, заменить логотип), необходимо только изменить с помощью метода update
или patch
класс OfferClass
или использовать Google Pay Merchant Center.
Google перенесет изменения во все объекты OfferObject
, связанные с обновленным классом OfferClass
. Это относится ко всем полям, определенным на уровне OfferClass
.
Чтобы обновить одно специальное предложение (например, изменить его срок действия), нужно изменить с помощью метода update
или patch
только один объект OfferObject
. Это относится ко всем полям, определенным на уровне OfferObject
.
Кроме того, не всегда получается предугадать, когда произойдут изменения или когда придется отправить запрос update
или patch
. В этом случае стоит периодически выполнять запросы update
или patch
для каждого класса и объекта. Посмотреть все классы в аккаунте отдельного продавца можно с помощью метода OfferClass
для list
.
Чтобы посмотреть все объекты определенного класса, вызовите метод list
для OfferObject
.
Настройка уведомлений об окончании действия специального предложения
По умолчанию пользователи получают уведомления за 48 часов до того, как закончится срок действия специального предложения. Система показывает уведомления только о тех предложениях, которые соответствуют указанным ниже критериям.
- Предложение на устройстве пользователя ранее не запускало уведомлений об окончании срока действия.
- Для предложения установлена действительная дата окончания срока действия
datetime
вvalidTimeInterval.end.date
. - Предложение было сохранено на устройстве пользователя более 12 часов назад.
- В предложении не должно быть значения
True
в заполняемом полеdisableExpirationNotification
. По умолчанию установлено значениеfalse
.
На скриншоте ниже показан пример уведомления по умолчанию, текст которого нельзя изменить.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/pay/passes/images/offer-expiration-notification.png?authuser=7&hl=ru)
- Срок действия истекает (сегодня, завтра, через [x] дн.)
class.title
class.titleImage
Заголовок уведомления об окончании срока действия специального предложения нельзя изменить.
Работа функции на устройстве в ночное время
Пользователи получат уведомление об окончании срока действия предложения до 22:00 или после 6:00 по местному времени вне зависимости от изначальных настроек.
Время отправки уведомления об окончании действия специального предложения
Время отправки уведомления об окончании действия Offer
можно изменить в message.displayInterval.start.date
в объекте OfferObjects
или классе OfferClasses
. Если время отправки изменено, уведомление активируется в соответствии со свойством message.displayInterval.start.date
, а не по стандартной логике вычисления validTimeInterval.end.date
. В примере ниже указано измененное время отправки уведомления об окончании срока действия.
{ “message”: { “messageType”: “expirationNotification”, “displayInterval”: { “start”: { “date”: datetime } } } }
Время отправки уведомления зависит от свойства displayInterval.start.date
. Можно выбрать дату не ранее 30 дней до окончания срока действия специального предложения. Если указана более ранняя дата, уведомление придет за 30 дней до окончания действия предложения. Для текста уведомления не используются поля заголовка и содержания.
Настройка уведомлений с учетом местоположения
Сервисы Google могут активировать уведомления в зависимости от объектов, которые сохранил клиент, и расстояния до указанного вами адреса.
Информацию о местоположении можно добавить двумя способами.
- При создании аккаунта Google Pay API for Passes Merchant Center используется информация о местоположении из Google Карт.
- Координаты можно добавить в объект или класс, используя REST API.
Инструкции о добавлении координат в объекты или классы находятся в разделе Использование REST API для добавления информации о местоположении.
Концепция геозонирования
Используя алгоритмы и информацию о местоположении из Google Карт, инструменты Google могут определить, когда пользователь находится в магазине или рядом с ним. При этом обнаруживаются любые классы и объекты, созданные с использованием аккаунта Google Pay API for Passes Merchant Center.
Алгоритм учитывает данные GPS, Wi-Fi, Bluetooth, информацию о передвижении и времени остановок, а также другие факторы. Когда пользователь находится рядом с определенным адресом, активируется уведомление с учетом местоположения.
Если координаты были введены в Object
вручную, уведомление с учетом местоположения активируется на расстоянии 150 метров от нужного места.
Частота уведомлений и учет предпочтений пользователя
Пользователь может получить не более четырех уведомлений в день.
Если в геозоне находится несколько сохраненных объектов, отображается одно уведомление с каруселью (на каждый аккаунт Google Pay API for Passes Merchant Center). Обнаруженные места можно просматривать по отдельности.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/pay/passes/images/geofenced-notification-example.png?authuser=7&hl=ru)
Чтобы получать уведомления с учетом местоположения, пользователь должен включить геолокацию на устройстве и Обновления о картах и билетах в настройках уведомлений приложения Google Pay.
Использование REST API для добавления информации о местоположении
Вы можете задать несколько местоположений (значений широты и долготы) в классах и объектах. Сервисы Google сверяют текущее местоположение устройства со списком мест, связанных с классом или объектом, и отправляют уведомление пользователю в тот момент, когда он находится в 150 метрах от нужного адреса. Ниже приведены примеры кода, в которых показано, как можно задать местоположения в классах и объектах.
Ресурс
{ ... //Class or Object content "locations": [{ "kind": "walletobjects#latLongPoint", "latitude": 37.422087, "longitude": -161446 }, { "kind": "walletobjects#latLongPoint", "latitude": 37.429379, "longitude": -121.12272999999999 }, { "kind": "walletobjects#latLongPoint", "latitude": 37.333646, "longitude": -122.884853 }] }
Java
List<LatLongPoint> locations = new ArrayList<LatLongPoint>(); locations.add(new LatLongPoint().setLatitude(37.422087).setLongitude( -122.161446)); locations.add(new LatLongPoint().setLatitude(37.429379).setLongitude( -121.12272999999999)); locations.add(new LatLongPoint().setLatitude(37.333646).setLongitude( -122.884853)); yourClassOrObject.setLocations(locations);
PHP
$locations = array( array( 'kind' => 'walletobjects#latLongPoint', 'latitude' => 37.442087, 'longitude' => -122.161446 ), array( 'kind' => 'walletobjects#latLongPoint', 'latitude' => 37.429379, 'longitude' => -122.12272999999999 ), array( 'kind' => 'walletobjects#latLongPoint', 'latitude' => 37.333646, 'longitude' => -121.884853 ) );
Python
offer_class_object = { # class or object content 'locations': [{ 'kind': 'walletobjects#latLongPoint', 'latitude': 37.442087, 'longitude': -122.161446 },{ 'kind': 'walletobjects#latLongPoint', 'latitude': 37.429379, 'longitude': -122.12272999999999 },{ 'kind': 'walletobjects#latLongPoint', 'latitude': 37.333646, 'longitude': -121.884853 }] }
Действия со специальными предложениями, у которых истек срок действия
На вкладке "Карты" в приложении Google Pay есть раздел "Истек срок действия". В нем собраны билеты, карты и посадочные талоны, которые были помещены в архив или стали неактивны. Специальные предложения перемещаются в этот раздел, если верно хотя бы одно из следующих условий:
-
Истек срок, указанный в
object.validTimeInterval.end.date
. Специальное предложение перемещается в раздел "Истек срок действия" в течение 24 часов после даты, указанной вobject.validTimeInterval.end.date
. - Для
object.state
указано одно из следующих значений:Expired
,Inactive
илиCompleted
.
Создание ссылки на сохраненное специальное предложение
Чтобы создать ссылку на сохраненное специальное предложение, нужно добавить в нее идентификатор objectId
.
Используйте следующий шаблон:
https://pay.google.com/gp/v/object/{<issuerId>}.{<ObjectId>}
Специальное предложение можно будет открыть в приложении Google Pay и в браузере.
Добавление к сохраненному предложению ссылки на стороннее приложение или сайт
Вы можете добавить ссылку на свой сайт или приложение непосредственно на специальное предложение. Ссылка будет отображаться в Google Pay под названием предложения, к которому она относится. Эта функция доступна для всех типов карт и билетов Google Pay.
Как запросить доступ
Запросить доступ к функции можно через эту форму. При этом следует помнить следующее:
- В форме вам нужно указать ваш идентификатор эмитента.
- В поле Issue type (Тип проблемы) следует выбрать вариант Technical/API Integration (Технические проблемы/интеграция с API).
- Далее выберите Link your app or website below the Google Pay pass (Ссылка на сайт или приложение под специальным предложением в Google Pay).
Как добавить ссылку
URI приложения или сайта указывается в appLinkData
для определенного специального предложения в Google Pay. 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 } } } } … … … }