О практической работе
1. Введение
Обзор
API Google Кошелька позволяет взаимодействовать с пользователями с помощью различных типов пропусков: карты лояльности, предложения, подарочные карты, билеты на мероприятия, транзитные билеты, посадочные талоны и многое другое. Каждый тип прохода или класс прохода содержит поля и функции, специфичные для конкретного случая использования, которые улучшают взаимодействие с пользователем.
Однако они могут не подходить для каждого случая использования. Чтобы создать более индивидуальный подход, вы можете использовать общий тип пропуска. Вот несколько примеров использования универсального типа прохода:
- Парковочные талоны
- Членские билеты библиотеки
- Ваучеры с сохраненной стоимостью
- Членские билеты в тренажерный зал
- Бронирование
Вы можете использовать общие проходы для любого варианта использования, который может быть представлен с помощью:
- До трех строк информации
- (Необязательно) Графический штрих-код
- (Необязательно) Раздел «Подробности»
Дополнительную информацию об API Google Кошелька или добавлении кнопки «Добавить в Google Кошелек» в приложение Android см. в документации для разработчиков Google Кошелька .
Передавать классы и объекты
API Google Кошелька предоставляет методы для создания следующего:
Тип | Описание |
Пройти класс | Шаблон для отдельного объекта пропуска. Он содержит информацию, общую для всех объектов прохода, принадлежащих этому классу. |
Передать объект | Экземпляр проходного класса, уникальный для идентификатора пользователя. |
Об этой кодовой лаборатории
В этой лаборатории кода вы выполните следующие задачи.
- Создайте новую учетную запись эмитента в демо-режиме
- Создать аккаунт сервиса для выдачи пропусков
- Создайте новый класс общего пропуска.
- Создайте новый объект пропуска
- Создайте кнопку «Добавить в Google Кошелек» , чтобы сохранить пропуск.
- Отобразите кнопку в приложении Android.
- Обработка результата сохранения прохода
Предварительные условия
- Android-студия
- Гит
- Аккаунт Google с доступом к консоли Google Cloud.
- Node.js версии 10 или выше
Цели
После завершения этой лаборатории вы сможете делать следующее:
- Добавьте SDK Google Кошелька в свое приложение для Android.
- Проверьте, доступен ли API Google Кошелька на устройстве под управлением Android.
- Создайте кнопку «Добавить в Google Кошелек»
Поддерживать
Если вы застряли на каком-то этапе разработки кода, репозиторий GitHub google-pay/wallet-android-codelab содержит полное решение для справки.
2. Настраивать
На этом этапе вы создадите учетную запись эмитента в демонстрационном режиме. Это позволит вам создавать классы пропусков и объекты, которые можно добавлять в кошельки пользователей. Далее вы создадите проект и учетную запись службы Google Cloud. Они будут использоваться для программного создания проходных классов и объектов так же, как и внутренний сервер. Наконец, вы разрешите учетной записи службы Google Cloud управлять пропусками в вашей учетной записи эмитента Google Кошелька.
Зарегистрируйте учетную запись эмитента API Google Кошелька.
Учетная запись эмитента необходима для создания и распространения пропусков для Google Кошелька. Вы можете зарегистрироваться с помощью консоли Google Pay & Wallet . Изначально у вас будет доступ к созданию пропусков в демонстрационном режиме. Это означает, что только определенные тестовые пользователи смогут добавлять созданные вами проходы. Тестовыми пользователями можно управлять в консоли Google Pay & Wallet.
Дополнительную информацию о демонстрационном режиме см. в разделе «Предварительные требования для общего пропуска» .
- Откройте консоль Google Pay и Кошелька.
- Следуйте инструкциям на экране, чтобы создать учетную запись эмитента.
- Выберите API Google Кошелька.
- Подтвердите, что вы понимаете условия обслуживания и политику конфиденциальности.
- Скопируйте значение идентификатора эмитента в текстовый редактор или другое место.
- На вкладке «Управление» выберите «Настроить тестовые учетные записи».
- Добавьте все адреса электронной почты, которые вы будете использовать в этой лаборатории кода.
Включите API Google Кошелька
- Войдите в консоль Google Cloud.
- Если у вас еще нет проекта Google Cloud, создайте его сейчас (дополнительную информацию см. в разделе Создание проектов и управление ими ).
- Включите API Google Кошелька (также называемый API Google Pay for Passes) для своего проекта.
Создайте сервисную учетную запись и ключ
Для вызова API Google Кошелька необходимы учетная запись службы и ключ учетной записи службы. Учетная запись службы — это идентификатор, который вызывает API Google Кошелька. Ключ учетной записи службы содержит закрытый ключ, который идентифицирует ваше приложение как учетную запись службы. Этот ключ конфиденциальен, поэтому сохраняйте его конфиденциальность.
Создать учетную запись службы
- В консоли Google Cloud откройте Сервисные аккаунты .
- Введите имя, идентификатор и описание своей учетной записи службы.
- Выберите СОЗДАТЬ И ПРОДОЛЖИТЬ.
- Выберите ГОТОВО
Создайте ключ сервисного аккаунта
- Выберите свою учетную запись службы
- Выберите меню КЛЮЧИ.
- Выберите «ДОБАВИТЬ КЛЮЧ» , затем «Создать новый ключ».
- Выберите тип ключа JSON
- Выберите СОЗДАТЬ
Вам будет предложено сохранить файл ключа на локальной рабочей станции. Обязательно запомните его местоположение.
Установите переменную среды GOOGLE_APPLICATION_CREDENTIALS
Переменная среды GOOGLE_APPLICATION_CREDENTIALS
используется Google SDK для аутентификации в качестве учетной записи службы и доступа к различным API для проекта Google Cloud.
- Следуйте инструкциям в документации по ключам учетной записи Google Cloud Service, чтобы установить переменную среды
GOOGLE_APPLICATION_CREDENTIALS
- Убедитесь, что переменная среды установлена в новом сеансе терминала (MacOS/Linux) или командной строки (Windows) (возможно, вам придется запустить новый сеанс, если он у вас уже открыт)
echo $GOOGLE_APPLICATION_CREDENTIALS
Авторизовать учетную запись службы
Наконец, вам необходимо авторизовать учетную запись службы для управления пропусками Google Кошелька.
- Откройте консоль Google Pay и Кошелька.
- Выберите пользователей
- Выберите Пригласить пользователя.
- Введите адрес электронной почты учетной записи службы (например,
test-svc@myproject.iam.gserviceaccount.com
). - Выберите «Разработчик» или «Администратор» в раскрывающемся меню «Уровень доступа».
- Выберите Пригласить
3. Создайте общий класс пропуска
На этом этапе вы создадите базовый класс для своего пропуска. Каждый раз, когда для пользователя создается новый проход, он наследует свойства, определенные в классе прохода.
Класс пропуска, который вы создадите во время этой лабораторной работы, использует гибкость универсальных проходов для создания объекта, который работает как идентификационный значок, так и средство отслеживания очков испытаний. Когда объект прохода будет создан из этого класса, он будет выглядеть, как показано на следующем рисунке.
Классы Pass можно создавать непосредственно в консоли Google Pay & Wallet или с помощью API Google Wallet. В этой лаборатории кода вы создадите класс Generic pass с помощью API. Это соответствует процессу, который частный серверный сервер будет использовать для создания проходных классов.
- Клонируйте репозиторий google-pay/wallet-android-codelab GitHub на локальную рабочую станцию.
git clone https://github.com/google-pay/wallet-android-codelab.git
- Откройте клонированный репозиторий в терминале или командной строке.
- Перейдите в каталог
backend
(эти сценарии имитируют действия внутреннего сервера).cd backend
- Установите зависимости Node.js
npm install .
- В
backend
каталоге откройтеgeneric_class.js
- Замените значение
issuerId
на свой идентификатор эмитента из консоли Google Pay и Wallet.// TODO: Define Issuer ID
let issuerId = 'ISSUER_ID'; - В терминале или командной строке запустите сценарий
generic_class.js
.node generic_class.js
Когда ваш код запустится, он создаст новый проходной класс и выведет идентификатор класса. Идентификатор класса состоит из идентификатора эмитента, за которым следует суффикс, определенный разработчиком. В этом случае суффиксу присвоено значение codelab_class
(идентификатор класса будет выглядеть примерно так: 1234123412341234123.codelab_class
). Выходные журналы также будут включать ответ от API Google Кошелька.
4. Откройте проект в Android Studio.
Клонированный вами репозиторий GitHub содержит проект Android с пустой активностью. На этом этапе вы отредактируете это действие, включив кнопку «Добавить в Google Кошелек» на странице продукта.
- Открыть Android-студию
- Выберите «Файл» , затем «Открыть».
- Выберите каталог
android
в репозитории. - Выберите Открыть
Добавьте SDK Google Кошелька в свое приложение
- Откройте файл сборки Gradle на уровне модуля (
android/app/build.gradle
). - Добавьте SDK Google Wallet в раздел
dependencies
// TODO: Add the "com.google.android.gms:play-services-pay" dependency to
// use the Google Wallet API
implementation "com.google.android.gms:play-services-pay:16.0.3" - Сохраните файл
- Выберите «Файл» , затем «Синхронизировать проект с файлами Gradle».
5. Создайте кнопку «Добавить в Google Кошелек».
На этом этапе вы создадите кнопку «Добавить в Google Кошелек» и добавите ее к существующему действию. Ресурсы для кнопки уже включены в проект. Чтобы включить кнопку, вы создадите отдельный файл макета. После добавления кнопка будет выглядеть следующим образом.
- Создайте новый файл макета:
app/src/main/res/layout/add_to_google_wallet_button.xml
- Добавьте следующее содержимое в новый файл макета
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="48sp"
android:background="@drawable/add_to_google_wallet_button_background_shape"
android:clickable="true"
android:contentDescription="@string/add_to_google_wallet_button_content_description"
android:focusable="true">
<ImageView
android:layout_width="227dp"
android:layout_height="26dp"
android:layout_gravity="center"
android:duplicateParentState="true"
android:src="@drawable/add_to_google_wallet_button_foreground" />
</FrameLayout> - Включите макет
add_to_google_wallet_button.xml
в файл макета действий при оформлении заказа (app/src/main/res/layout/activity_checkout.xml
).<!--
TODO: Create the button under `add_to_google_wallet_button.xml`
and include it in your UI
-->
<include
android:id="@+id/addToGoogleWalletButton"
layout="@layout/add_to_google_wallet_button"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="10dp" />
6. Проверьте, доступен ли API Google Кошелька
Если пользователь открывает ваше приложение на устройстве, которое не поддерживает API Google Кошелька, это может создать негативные впечатления при попытке добавить пропуск. Если устройство пользователя не поддерживает API Google Кошелька, скрытие кнопки «Добавить в Google Кошелек» позволит избежать путаницы. Существуют различные причины, по которым API может быть недоступен, например, версии Android или Google Play Services устарели или Google Кошелек недоступен в стране пользователя.
На этом этапе вы добавите в свое приложение логику, которая проверяет, доступен ли API Google Кошелька на устройстве. Если это так, кнопка будет отображена в действии. В противном случае кнопка будет скрыта.
- Откройте файл
CheckoutActivity.kt
вapp/src/main/java/com/google/android/gms/samples/wallet/activity/
- Создайте свойство класса для экземпляра
PayClient
.// TODO: Create a client to interact with the Google Wallet API
private lateinit var walletClient: PayClient - Создайте экземпляр свойства
PayClient
в методеonCreate
// TODO: Instantiate the client
walletClient = Pay.getClient(this) - Создайте метод, который проверяет, доступны ли на устройстве SDK и API Google Кошелька, и обрабатывает результат.
// TODO: Create a method to check for the Google Wallet SDK and API
private fun fetchCanUseGoogleWalletApi() {
walletClient
.getPayApiAvailabilityStatus(PayClient.RequestType.SAVE_PASSES)
.addOnSuccessListener { status ->
if (status == PayApiAvailabilityStatus.AVAILABLE)
layout.passContainer.visibility = View.VISIBLE
}
.addOnFailureListener {
// Hide the button and optionally show an error message
}
} - Вызовите метод
fetchCanUseGoogleWalletApi
в методеonCreate
, чтобы проверить, доступен ли API Google Кошелька.// TODO: Check if the Google Wallet API is available
fetchCanUseGoogleWalletApi()
Когда вы запустите приложение, вы должны увидеть кнопку «Добавить в Google Кошелек» в пользовательском интерфейсе.
7. Создайте объект общего прохода
Теперь, когда вы убедились, что API Google Кошелька доступен, вы можете создать пароль и предложить пользователю добавить его в свой кошелек. Существует два потока создания объектов пропуска для пользователей.
Создайте объект pass на внутреннем сервере.
При таком подходе объект pass создается на внутреннем сервере и возвращается клиентскому приложению как подписанный JWT. Это лучше всего подходит для случаев, когда популярность среди пользователей высока, поскольку гарантирует, что объект существует до того, как пользователь попытается добавить его в свой кошелек.
Создайте объект pass, когда пользователь добавляет его в свой кошелек.
В этом подходе объект пропуска определяется и кодируется в подписанный JWT на внутреннем сервере. Кнопка «Добавить в Google Кошелек» затем отображается в клиентском приложении, которое ссылается на JWT. Когда пользователь нажимает кнопку, JWT используется для создания объекта пропуска. Это лучше всего подходит для случаев, когда принятие пользователем является переменным или неизвестным, поскольку это предотвращает создание и неиспользование объектов прохода. Этот подход будет использоваться в кодовой лаборатории.
- Откройте файл
backend/generic_pass.js
- Замените значение
issuerId
на свой идентификатор эмитента из консоли Google Pay и Wallet.// TODO: Define Issuer ID
let issuerId = 'ISSUER_ID'; - В терминале или командной строке запустите файл
generic_pass.js
.node generic_pass.js
- Скопируйте выходной токен в буфер обмена или текстовый редактор.
Когда ваш код запустится, он определит новый объект прохода и встроит его в JWT. Затем JWT подписывается ключом учетной записи службы, который вы создали ранее. Это аутентифицирует запрос к API Google Кошелька, поэтому учетные данные не нужно хранить в клиентском приложении.
Кроме того, в производственной среде ваша серверная система будет отвечать за создание JWT и возврат их клиентам. В этой лаборатории скрипт generic_pass.js
эмулирует это поведение и «возвращает» токен, который вы можете использовать в клиентском приложении.
8. Добавьте пропуск в Google Кошелек
Теперь, когда вы убедились, что API Google Кошелька доступен, и создали подписанный JWT, вы можете предложить пользователю добавить пропуск в свой кошелек. На этом этапе вы добавите прослушиватель к кнопке «Добавить в Google Кошелек» , который будет использовать API Google Кошелька для сохранения пропуска в кошельке пользователя.
- Откройте файл
app/src/main/CheckoutActivity.kt
- Замените значение
token
на JWT, который вы создали ранее.// TODO: Save the JWT from the backend "response"
private val token = "TOKEN" - Создайте свойство класса для хранения кода запроса.
// TODO: Add a request code for the save operation
private val addToGoogleWalletRequestCode = 1000 - Установите прослушиватель для кнопки «Добавить в Google Кошелек»
// TODO: Set an on-click listener on the "Add to Google Wallet" button
addToGoogleWalletButton = layout.addToGoogleWalletButton.
addToGoogleWalletButton.setOnClickListener {
walletClient.savePassesJwt(token, this, addToGoogleWalletRequestCode)
}
Когда пользователь нажимает кнопку «Добавить в Google Кошелек» , вызывается метод walletClient.savePassesJwt
. Этот метод предлагает пользователю добавить новый объект пропуска в свой Google Кошелек.
9. Обработка результата savePassesJwt
На последнем этапе этой лаборатории кода вы настроите свое приложение для обработки результата операции walletClient.savePassesJwt
.
- Откройте файл
app/src/main/CheckoutActivity.kt
- Переопределите метод
onActivityResult
, чтобы он содержал следующий код.// TODO: Handle the result
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == addToGoogleWalletRequestCode) {
when (resultCode) {
RESULT_OK -> {
// Pass saved successfully. Consider informing the user.
}
RESULT_CANCELED -> {
// Save canceled
}
PayClient.SavePassesResult.SAVE_ERROR ->
data?.let { intentData ->
val errorMessage = intentData.getStringExtra(PayClient.EXTRA_API_ERROR_MESSAGE)
// Handle error. Consider informing the user.
Log.e("SavePassesResult", errorMessage.toString())
}
else -> {
// Handle unexpected (non-API) exception
}
}
}
}
Теперь ваше приложение может обрабатывать следующие сценарии:
- Успешное добавление пропуска
- Отмена пользователя
- Неожиданные ошибки
Запустите приложение, чтобы убедиться, что вы можете добавить проход и обработать результат должным образом.
10. Поздравления
Поздравляем, вы успешно интегрировали API Google Кошелька на Android!
Узнать больше
Ознакомьтесь с полной интеграцией в репозитории google-pay/wallet-android-codelab на GitHub.
Создавайте пропуска и запрашивайте доступ к производству
Когда вы будете готовы выпустить собственные пропуска в рабочей среде, перейдите в консоль Google Pay & Wallet, чтобы запросить доступ к рабочей среде и авторизовать свое приложение для Android.
Дополнительную информацию см. в разделе «Предварительные требования к Android SDK» .