Прежде чем приступить к работе с Android SDK, убедитесь, что вы выполнили все необходимые условия .
Android SDK позволяет добавлять карты Pass в Google Wallet. Когда вы добавите кнопку Google Wallet в свое приложение, ваши пользователи получат простой и приятный опыт добавления своих пропусков в Google Wallet.
Следуйте инструкциям, чтобы добавить кнопку Google Wallet в приложение для Android:
1. Создайте объект Passes
Примечание. Для создания объекта Passes требуется класс Passes. Если вы еще не создали его, следуйте инструкциям по созданию класса пропусков . Определите соответствующий GiftCardObject
, включая следующие обязательные атрибуты:
-
classId
: идентификатор класса Passes, созданного в предварительных условиях . -
id
: уникальный идентификатор объекта.
-
cardNumber
: идентификатор, связанный с картой.
-
state
: Это поле используется для определения того, как отображается объект. Например, неактивный объект перемещается в раздел «Просроченные пропуска».
Обратитесь к шаблону макета для получения дополнительной информации о том, как эти атрибуты представлены в подарочной карте.
Вот определение образца подарочной карты:
JSON
{
"id": "ISSUER_ID.OBJECT_ID",
"classId": "ISSUER_ID.CLASS_ID",
"cardNumber": "1234567890",
"state": "ACTIVE"
}
2. Создайте неподписанный JWT с объектом
КогдаGiftCardObject
создан, оберните его неподписанным JWT с атрибутом payload.GiftCardObjects
, как показано в следующем фрагменте:JSON
{
"iss": "OWNER_EMAIL_ADDRESS",
"aud": "google",
"typ": "savetowallet",
"iat": "UNIX_TIME",
"origins": [],
"payload": {
"giftcardObjects": [ NEW_OBJECT ]
}
}
3. Включите кнопку Google Wallet в свой пользовательский интерфейс.
Google Wallet предоставляет знакомую кнопку, которую вы можете использовать для запуска процесса добавления в Google Wallet в своем приложении. Векторные ресурсы для кнопки доступны в Руководстве по кнопкам .
Вы можете импортировать векторные активы в Android Studio в File > New > Vector Asset
. Выберите «Локальный файл» в мастере, добавьте имя (например: add_to_google_wallet_button.xml
) и найдите файл на локальном диске, чтобы импортировать его.
Теперь вы можете использовать импортированный чертеж, чтобы добавить кнопку в свой пользовательский интерфейс:
<ImageButton
android:id="@+id/addToGoogleWalletButton"
android:layout_width="match_parent"
android:layout_height="48dp"
android:minWidth="200dp"
android:clickable="true"
android:src="@drawable/add_to_google_wallet_button" />
Кнопка имеет layout_height
48 dp и должна быть не менее 200 dp в ширину.
4. Проверьте, доступен ли API Google Wallet на целевом устройстве.
Перед сохранением нового объекта убедитесь, что API Google Wallet доступен на целевом устройстве, вызвав метод getPayApiAvailabilityStatus
в классе PayClient
. Начните с добавления переменной-члена в действие, где вы будете показывать кнопку, и создайте ее экземпляр при создании действия:
Котлин
import com.google.android.gms.pay.PayClient
private lateinit var walletClient: PayClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
walletClient = Pay.getClient(this)
// Additional logic in your onCreate method
}
Джава
import com.google.android.gms.pay.PayClient;
private final PayClient walletClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
walletClient = Pay.getClient(application);
// Additional logic in your onCreate method
}
Теперь используйте клиент, чтобы проверить, доступен ли API:
Котлин
import com.google.android.gms.pay.PayApiAvailabilityStatus
private fun fetchCanUseGoogleWalletApi() {
walletClient
.getPayApiAvailabilityStatus(PayClient.RequestType.SAVE_PASSES)
.addOnSuccessListener { status ->
if (status == PayApiAvailabilityStatus.AVAILABLE) {
// The API is available, show the button in your UI
} else {
// The user or device is not eligible for using the Pay API
}
}
.addOnFailureListener {
// Hide the button and optionally show an error message
}
}
Джава
import com.google.android.gms.pay.PayApiAvailabilityStatus;
private void fetchCanAddPassesToGoogleWallet() {
walletClient
.getPayApiAvailabilityStatus(PayClient.RequestType.SAVE_PASSES)
.addOnSuccessListener(status -> {
if (status == PayApiAvailabilityStatus.AVAILABLE) {
// The API is available, show the button in your UI
} else {
// The user or device is not eligible for using the Pay API
};
})
.addOnFailureListener(exception -> {
// Google Play Services is too old, or API availability not verified
// Hide the button and optionally show an error message
});
}
Наконец, вызовите метод, определенный выше, в своем приложении, когда вам нужно определить доступность API.
5. Добавьте объект в Google Wallet
GiftCardObject
можно добавить, передав неподписанный JWT из шага 2 в метод savePasses
. Вы можете начать операцию добавления в результате нажатия кнопки Google Wallet:Котлин
import android.os.Bundle
import android.view.View
import com.google.android.gms.samples.wallet.databinding.ActivityCheckoutBinding
private val addToGoogleWalletRequestCode = 1000
private lateinit var layout: ActivityCheckoutBinding
private lateinit var addToGoogleWalletButton: View
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Use view binding to access the UI elements
layout = ActivityCheckoutBinding.inflate(layoutInflater)
setContentView(layout.root)
addToGoogleWalletButton = layout.addToGoogleWalletButton
addToGoogleWalletButton.setOnClickListener {
walletClient.savePasses(newObjectJson, this, addToGoogleWalletRequestCode)
}
// Additional logic in your onCreate method
}
Джава
import android.os.Bundle;
import android.view.View;
import com.google.android.gms.samples.wallet.databinding.ActivityCheckoutBinding;
private static final int ADD_TO_GOOGLE_WALLET_REQUEST_CODE = 999;
private ActivityCheckoutBinding layout:
private View addToGoogleWalletButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Use view binding to access the UI elements
layout = ActivityCheckoutBinding.inflate(getLayoutInflater());
setContentView(layout.getRoot());
addToGoogleWalletButton = layout.addToGoogleWalletButton;
addToGoogleWalletButton.setOnClickListener(v -> {
walletClient.savePasses(newObjectJson, this, ADD_TO_GOOGLE_WALLET_REQUEST_CODE);
});
// Additional logic in your onCreate method
}
Метод savePasses
запускает процесс сохранения и вызывает метод onActivityResult
после завершения процесса сохранения. Реализация onActivityResult
должна быть похожа на следующую:
Котлин
import android.content.Intent
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == addToGoogleWalletRequestCode) {
when (resultCode) {
RESULT_OK -> {
// Pass saved successfully
}
RESULT_CANCELED -> {
// Save operation canceled
}
PayClient.SavePassesResult.SAVE_ERROR -> data?.let { intentData ->
val errorMessage = intentData.getStringExtra(PayClient.EXTRA_API_ERROR_MESSAGE)
// Handle error
}
else -> {
// Handle unexpected (non-API) exception
}
}
}
}
Джава
import android.content.Intent;
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ADD_TO_GOOGLE_WALLET_REQUEST_CODE) {
switch (resultCode) {
case RESULT_OK: {
// Pass saved successfully
break;
}
case RESULT_CANCELED: {
// Save operation canceled
break;
}
case PayClient.SavePassesResult.SAVE_ERROR: {
if (data != null) {
String apiErrorMessage = data.getStringExtra(PayClient.EXTRA_API_ERROR_MESSAGE);
// Handle error
}
break;
}
default: {
// Handle unexpected (non-API) exception
}
}
}
}
Когда проход успешно добавлен, resultCode
содержит значение Activity.RESULT_OK
.
[ТОЛЬКО ТЕСТ] проходит успешно
Когда вы все еще находитесь в демонстрационном режиме, все созданные вами пропуска будут иметь дополнительный текст «[ТОЛЬКО ТЕСТ]» в названии вашего пропуска. Это делается для того, чтобы отличить демонстрационные проходы от живых пропусков. После того, как вы получите разрешение от нашей команды, эти проходы в демонстрационном режиме больше не будут содержать дополнительный текст, когда пользователь повторно открывает приложение кошелька на подключенном устройстве.
Следующие шаги
- Оцените варианты использования подарочных карт и внедрите те, которые соответствуют потребностям бизнеса.
- Настройте внешний вид своих подарочных карт, следуя рекомендациям бренда.
- Отправьте свой UX-процесс на окончательную проверку в разделе «Google Wallet API» в Google Pay и Wallet Console.
- Проверьте свою интеграцию и запустите!
- Остались вопросы? Пожалуйста, ознакомьтесь с нашими часто задаваемыми вопросами .