Интеграция Google Wallet для карт лояльности в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Интеграция Google Wallet для карт лояльности в мобильном приложении
Средний
~2-3 дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Интеграция Google Wallet для карт лояльности в мобильном приложении

Google Wallet API работает иначе, чем PassKit. Здесь нет файлового архива — карта создаётся через REST API Google, а на устройство передаётся JWT-токен с объектом. Для карт лояльности используется класс LoyaltyClass + объект LoyaltyObject. Пропустить создание LoyaltyClass — нельзя: объект без класса Google отклонит.

Настройка: Google Pay & Wallet Console

Перед кодом — три шага в console.wallet.google.com:

  1. Создать аккаунт издателя (Issuer Account)
  2. Создать LoyaltyClass — шаблон карты с логотипом, цветами, полями
  3. Получить service account credentials для серверных вызовов

issuerId — числовой идентификатор издателя, например 3388000000022142. classId формируется как {issuerId}.{classPostfix}, например 3388000000022142.loyalty_2024.

Создание LoyaltyClass через API

from google.oauth2 import service_account
from googleapiclient.discovery import build

credentials = service_account.Credentials.from_service_account_file(
    'service_account.json',
    scopes=['https://www.googleapis.com/auth/wallet_object.issuer']
)
service = build('walletobjects', 'v1', credentials=credentials)

loyalty_class = {
    "id": "3388000000022142.loyalty_2024",
    "issuerName": "YourShop",
    "reviewStatus": "UNDER_REVIEW",
    "programName": "Программа лояльности YourShop",
    "programLogo": {
        "sourceUri": { "uri": "https://yourshop.com/logo.png" },
        "contentDescription": { "defaultValue": { "language": "ru", "value": "Логотип YourShop" } }
    },
    "hexBackgroundColor": "#1E5AC8",
    "countryCode": "RU",
    "localizedIssuerName": {
        "defaultValue": { "language": "ru", "value": "YourShop" }
    }
}

service.loyaltyclass().insert(body=loyalty_class).execute()

reviewStatus: "UNDER_REVIEW" — обязательное начальное состояние. Google проверяет класс вручную (обычно 1–3 дня). До одобрения карты можно добавлять только в тестовом режиме.

Создание LoyaltyObject и JWT

Каждый пользователь — отдельный LoyaltyObject:

import jwt
import time

loyalty_object = {
    "id": f"3388000000022142.user_{user_id}",
    "classId": "3388000000022142.loyalty_2024",
    "state": "ACTIVE",
    "loyaltyPoints": {
        "label": "Баллы",
        "balance": { "int": user_points }
    },
    "barcode": {
        "type": "QR_CODE",
        "value": f"USER-{user_id}",
        "alternateText": f"USER-{user_id}"
    },
    "textModulesData": [
        {
            "header": "Уровень",
            "body": user_tier,
            "id": "tier"
        }
    ]
}

# Создаём объект через API
service.loyaltyobject().insert(body=loyalty_object).execute()

# Генерируем JWT для передачи на клиент
payload = {
    "iss": service_account_email,
    "aud": "google",
    "typ": "savetowallet",
    "iat": int(time.time()),
    "payload": {
        "loyaltyObjects": [{ "id": loyalty_object["id"] }]
    }
}

token = jwt.encode(payload, private_key, algorithm="RS256")

JWT передаётся в мобильное приложение. Срок жизни JWT — максимум 1 час.

Android: добавление карты через Google Wallet API

import com.google.android.gms.pay.Pay
import com.google.android.gms.pay.PayApiAvailabilityStatus
import com.google.android.gms.pay.PayClient

private lateinit var walletClient: PayClient

override fun onCreate(savedInstanceState: Bundle?) {
    walletClient = Pay.getClient(this)
    checkWalletAvailability()
}

private fun checkWalletAvailability() {
    walletClient
        .getPayApiAvailabilityStatus(PayClient.RequestType.SAVE_PASSES)
        .addOnSuccessListener { status ->
            if (status == PayApiAvailabilityStatus.AVAILABLE) {
                showAddToWalletButton()
            }
        }
}

private fun saveToWallet(jwt: String) {
    walletClient.savePasses(jwt, this, ADD_TO_GOOGLE_WALLET_REQUEST_CODE)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == ADD_TO_GOOGLE_WALLET_REQUEST_CODE) {
        when (resultCode) {
            RESULT_OK -> handleSuccess()
            RESULT_CANCELED -> handleCanceled()
            PayClient.SavePassesResult.SAVE_ERROR ->
                data?.let { handleError(it.getStringExtra(PayClient.EXTRA_API_ERROR_MESSAGE)) }
        }
    }
}

PayClient.RequestType.SAVE_PASSES — проверяет, что Google Wallet установлен и работает. На устройствах без GMS (Huawei) Google Wallet недоступен.

Обновление данных карты

Изменить баланс баллов — PATCH-запрос на существующий объект:

patch_body = {
    "loyaltyPoints": {
        "balance": { "int": new_points_value }
    }
}
service.loyaltyobject().patch(
    resourceId=f"3388000000022142.user_{user_id}",
    body=patch_body
).execute()

Google Wallet автоматически синхронизирует изменения на устройстве в течение нескольких минут. Push-уведомлений отправлять не нужно.

Сроки

2–3 дня: создание LoyaltyClass, серверная генерация объектов и JWT, интеграция PayClient в Android-приложение. Плюс 1–3 дня на ревью класса от Google. Стоимость рассчитывается индивидуально.