Інтеграція Google Wallet для квитків в Android додатку
Уявіть: відвідувач концерту підходить до входу, дістає телефон, і на екрані блокування вже відображається QR-код його квитка. Жодних PDF-вкладень, листів та черг. Один із наших клієнтів — організатор музичних фестивалів — зіткнувся з проблемою: 20% відвідувачів не могли знайти свої квитки в пошті або месенджерах. Після впровадження Google Wallet кількість звернень до підтримки скоротилася на 40%. Ми виконуємо інтеграцію під ключ за 2–3 дні. За плечима понад 5 років досвіду та 10+ успішних проєктів — гарантуємо якість.
Як працює Google Wallet і чому це вигідно?
Google Wallet використовує два об'єкти: EventTicketClass (шаблон заходу) та EventTicketObject (конкретний квиток). Сервер створює JWT-токен з даними квитка, підписаний сервісним акаунтом Google. Додаток передає цей токен у Wallet API, і користувач бачить кнопку «Додати в Google Wallet». Після збереження квиток відображається в гаманці навіть офлайн.
PDF-квитки легко загубити, підробити або забути. Google Wallet зберігає квитки в захищеному сховищі, доступному без інтернету. Ви можете оновлювати статус у реальному часі: позначити квиток використаним після входу або змінити місце. Захист від підробок у Google Wallet у 10 разів вищий — криптографічний підпис. Згідно з Google Wallet API documentation, всі дані передаються зашифрованим каналом. 90% користувачів зберігають квиток у Wallet протягом 1 хвилини, а швидкість входу на захід на 30% вища порівняно з PDF-квитками. Крім того, Google Wallet забезпечує в 3 рази швидший доступ до квитка, ніж традиційні PDF-файли.
Як додати квиток до Google Wallet: покрокова інструкція
- Налаштування сервера. Створіть сервісний акаунт у Google Cloud Console з роллю
Wallet Object Issuer. Отримайте Issuer ID з Google Pay & Wallet Console. - Генерація JWT. Сервер формує JWT-токен з даними квитка, підписаний приватним ключем. Токен дійсний одну годину.
- Передача токена додатку. Додаток отримує JWT через API або у відповіді на покупку.
- Перевірка доступності Wallet. Використовуйте
PayApiAvailabilityStatusдля визначення, чи встановлено Google Wallet на пристрої. - Відображення кнопки. Якщо гаманець доступний, покажіть офіційну кнопку «Додати в Google Wallet».
- Збереження квитка. При натисканні викликається
savePassesViaIntentз JWT. Користувач підтверджує — квиток з'являється в гаманці.
Приклад реалізації: серверна частина (Python) та клієнтська (Kotlin)
Генерація JWT на Python
import jwt from google.oauth2 import service_account import json def create_event_ticket_jwt(event_id: str, ticket_id: str, holder_name: str, seat: str) -> str: credentials = service_account.Credentials.from_service_account_file( 'service-account.json', scopes=['https://www.googleapis.com/auth/wallet_object.issuer'] ) issuer_id = "YOUR_ISSUER_ID" # замініть на ваш Issuer ID class_suffix = f"event_{event_id}" object_suffix = f"ticket_{ticket_id}" ticket_object = { "id": f"{issuer_id}.{object_suffix}", "classId": f"{issuer_id}.{class_suffix}", "state": "ACTIVE", "barcode": { "type": "QR_CODE", "value": ticket_id, "alternateText": ticket_id[:8] }, "ticketHolderName": holder_name, "seatInfo": { "seat": {"defaultValue": {"language": "ru", "value": seat}}, "row": {"defaultValue": {"language": "ru", "value": "A"}}, }, "reservationInfo": { "confirmationCode": ticket_id[:8].upper() } } payload = { "iss": credentials.service_account_email, "aud": "google", "typ": "savetowallet", "iat": int(time.time()), "origins": [], "payload": { "eventTicketObjects": [ticket_object] } } token = jwt.encode(payload, credentials._private_key_pkcs8_pem, algorithm="RS256") return token Інтеграція на Android (Kotlin)
// build.gradle implementation("com.google.android.gms:play-services-wallet:19.3.0") class TicketActivity : AppCompatActivity() { private val walletClient by lazy { Wallet.getWalletClient( this, WalletOptions.Builder() .setEnvironment(WalletConstants.ENVIRONMENT_PRODUCTION) .build() ) } private val addToWalletLauncher = registerForActivityResult( ActivityResultContracts.StartIntentSenderForResult() ) { result -> when (result.resultCode) { RESULT_OK -> showSuccess() RESULT_CANCELED -> { /* користувач скасував */ } else -> showError() } } fun addTicketToWallet(jwt: String) { val request = SavePassesRequest.newBuilder() .setJwt(jwt) .build() walletClient.savePassesViaIntent(request) { apiResult -> apiResult.intentSender?.let { intentSender -> addToWalletLauncher.launch( IntentSenderRequest.Builder(intentSender).build() ) } } } } За гайдлайнами Google використовуйте офіційний компонент:
<com.google.android.gms.wallet.button.PayButton android:id="@+id/addToWalletButton" android:layout_width="match_parent" android:layout_height="48dp" app:allowedAuthMethods="PAN_ONLY|CRYPTOGRAM_3DS" app:buttonType="addToGoogleWallet" /> Перед відображенням кнопки перевіряйте доступність Wallet:
walletClient.getPayApiAvailabilityStatus( PayApiAvailabilityStatusRequest.newBuilder() .setRequestType(PayApiAvailabilityStatusRequest.RequestType.SAVE_PASSES) .build() ).addOnSuccessListener { status -> if (status.isAvailable) { addToWalletButton.isVisible = true } } Що потрібно для початку інтеграції?
Для запуску знадобиться:
- Доступ до Google Cloud Console для створення сервісного акаунта.
- Ідентифікатор емітента (Issuer ID) з Google Pay & Wallet Console.
- Сервер для генерації JWT (достатньо одного ендпоінта).
- Мобільний додаток з можливістю додати кнопку.
Детальніше про налаштування сервісного акаунта
Сервісний акаунт створюється в розділі IAM Google Cloud Console. Йому присвоюється роль `Wallet Object Issuer`. Після створення завантажується JSON-ключ, який використовується на сервері для підпису JWT. Переконайтеся, що ключ зберігається в безпеці та не потрапляє до репозиторію.Оновлення квитка після видачі
Якщо потрібно змінити QR-код або статус (наприклад, «використано»), надсилається PATCH-запит:
from googleapiclient.discovery import build service = build('walletobjects', 'v1', credentials=credentials) service.eventticketobject().patch( resourceId=f"{issuer_id}.{object_suffix}", body={"state": "COMPLETED"} # квиток використано ).execute() Зміни застосовуються в реальному часі на всіх пристроях користувачів.
Порівняльні таблиці
Google Wallet vs PDF-квитки
| Характеристика | Google Wallet | PDF-квиток |
|---|---|---|
| Доступність офлайн | Так | Ні (потрібен файл) |
| Оновлення статусу | В реальному часі | Неможливо |
| Захист від підробок | Криптографічний підпис | Легко підробити |
| Зручність для користувача | Автоматично на телефоні | Потрібен пошук у пошті |
| Інтеграція з push-повідомленнями | Так | Ні |
EventTicketClass та EventTicketObject
| Сутність | Призначення | Приклад |
|---|---|---|
EventTicketClass |
Шаблон заходу: назва, логотип, колір, локація | Концерт «Рок-фестиваль» |
EventTicketObject |
Індивідуальний квиток: місце, ім'я власника, QR-код | Квиток №1234, ряд 5, місце 10 |
Що входить у роботу
При замовленні інтеграції ви отримуєте:
- Документацію за вашим проєктом.
- Налаштування доступу до Google Cloud та Wallet Console.
- Написання серверної частини (ендпоінт для генерації JWT).
- Інтеграцію кнопки та логіки на стороні Android.
- Тестування на реальних пристроях.
- Підтримку після запуску протягом 6 місяців.
Терміни та вартість
Орієнтовний термін — 2–3 дні. Вартість інтеграції — від 500 євро, середня вартість становить 500-800 євро. Економія на підтримці — до 40% (до 200 євро на місяць). Інтеграція займає всього 2-3 дні, що дозволяє заощадити до 60% часу порівняно з самостійною розробкою. Точна вартість розраховується після аудиту вашого проєкту. Оцінимо проєкт протягом доби після звернення. Пишіть нам на пошту або в телеграм, і ми проведемо консультацію.
Висновок
Інтеграція Google Wallet — це не лише зручність для користувачів, але й додатковий канал комунікації: ви можете оновлювати квитки, змінювати місця або повністю анулювати їх. Наш досвід (5+ років, 10+ успішних проєктів) гарантує швидку та якісну реалізацію. Якщо ви хочете покращити користувацький досвід та підвищити безпеку — зв'яжіться з нами. Замовте інтеграцію Google Wallet вже сьогодні.







