🤖 Настройка Android
Подробное руководство по настройке CloudPayments SDK для Android платформы.
📋 Требования
- Android API Level: 21 (Android 5.0) или выше
- Target SDK: 34 (Android 14)
- Compile SDK: 34
- Java: 8 или выше
- Kotlin: 1.8.0 или выше
CardIO поддержка
На Android платформе CardIO сканер банковских карт поддерживается полностью и работает на всех устройствах с API Level 21+.
⚙️ Настройка проекта
1. Обновление android/build.gradle
android/build.gradle
buildscript {
ext {
buildToolsVersion = "34.0.0"
minSdkVersion = 21
compileSdkVersion = 34
targetSdkVersion = 34
ndkVersion = "25.1.8937393"
kotlinVersion = "1.8.0"
}
dependencies {
classpath("com.android.tools.build:gradle:8.1.1")
classpath("com.facebook.react:react-native-gradle-plugin")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
}
}
2. Настройка android/app/build.gradle
android/app/build.gradle
android {
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
applicationId "com.yourcompany.yourapp"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
// Другие зависимости...
}
🔐 Настройка безопасности
1. Network Security Config
Создайте файл android/app/src/main/res/xml/network_security_config.xml
:
android/app/src/main/res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">api.cloudpayments.ru</domain>
<domain includeSubdomains="true">widget.cloudpayments.ru</domain>
</domain-config>
<!-- Для тестирования в debug режиме -->
<debug-overrides>
<trust-anchors>
<certificates src="system"/>
<certificates src="user"/>
</trust-anchors>
</debug-overrides>
</network-security-config>
2. Обновление AndroidManifest.xml
android/app/src/main/AndroidManifest.xml
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme"
android:networkSecurityConfig="@xml/network_security_config">
<!-- Разрешения для интернета -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Разрешения для CardIO сканера карт -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- Камера необязательна для работы приложения -->
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<!-- Основная активность -->
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
💳 Google Pay
1. Настройка Google Pay
Добавьте в android/app/src/main/AndroidManifest.xml
:
android/app/src/main/AndroidManifest.xml
<application>
<!-- Google Pay -->
<meta-data
android:name="com.google.android.gms.wallet.api.enabled"
android:value="true" />
</application>
2. Зависимости для Google Pay
android/app/build.gradle
dependencies {
implementation 'com.google.android.gms:play-services-wallet:19.2.1'
}
3. Настройка в коде
// Проверка доступности Google Pay
import { PaymentService } from '@lmapp/react-native-cloudpayments';
const checkGooglePay = async () => {
try {
const isAvailable = await PaymentService.isGooglePayAvailable();
console.log('Google Pay доступен:', isAvailable);
} catch (error) {
console.log('Google Pay недоступен:', error);
}
};
📷 CardIO - Сканер банковских карт
Полная поддержка на Android
CardIO сканер банковских карт полностью поддерживается на Android платформе и предоставляет богатые возможности кастомизации.
Разрешения
Убедитесь, что в AndroidManifest.xml
добавлены необходимые разрешения (уже включены выше):
android/app/src/main/AndroidManifest.xml
<!-- Обязательные разрешения -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- Опциональные возможности -->
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
Основное использование
import {
ECardIOLanguage,
ECardIOColorScheme
} from '@lmapp/react-native-cloudpayments';
import type { ICardIOConfig, IPaymentData } from '@lmapp/react-native-cloudpayments';
const cardScannerConfig: ICardIOConfig = {
// Поля карты
requireExpiry: true,
requireCVV: false, // НЕ РЕКОМЕНДУЕТСЯ по соображениям безопасности
requirePostalCode: false,
requireCardholderName: false,
// Интерфейс
hideCardIOLogo: true,
usePayPalLogo: false,
suppressManualEntry: false,
// Кастомные цвета для Android
actionBarColor: ECardIOColorScheme.MATERIAL_BLUE,
guideColor: ECardIOColorScheme.MATERIAL_GREEN,
// Локализация
language: ECardIOLanguage.RUSSIAN,
// Дополнительные настройки
suppressConfirmation: false, // Вибрация при сканировании
suppressScan: false, // Звук при сканировании
keepApplicationTheme: true // Использовать тему приложения
};
const paymentData: IPaymentData = {
publicId: 'pk_test_1234567890abcdef',
amount: '1000.00',
currency: 'RUB',
description: 'Тестовый платеж',
enableCardScanner: true,
cardScannerConfig: cardScannerConfig
};
Проверка разрешений
import { PermissionsAndroid, Platform } from 'react-native';
const requestCameraPermission = async (): Promise<boolean> => {
if (Platform.OS !== 'android') return true;
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.CAMERA,
{
title: 'Разрешение на использование камеры',
message: 'Приложению требуется доступ к камере для сканирования банковских карт',
buttonNeutral: 'Спросить позже',
buttonNegative: 'Отмена',
buttonPositive: 'OK',
}
);
return granted === PermissionsAndroid.RESULTS.GRANTED;
} catch (err) {
console.warn('Ошибка запроса разрешения камеры:', err);
return false;
}
};
// Использование перед запуском платежа
const handlePayment = async () => {
const hasCameraPermission = await requestCameraPermission();
const paymentData: IPaymentData = {
// ... базовые поля
enableCardScanner: hasCameraPermission, // Включаем только при наличии разрешения
cardScannerConfig: hasCameraPermission ? {
requireExpiry: true,
language: ECardIOLanguage.RUSSIAN
} : undefined
};
await presentPaymentForm(paymentData);
};
Кастомизация под бренд приложения
// Пример для корпоративного стиля
const corporateConfig: ICardIOConfig = {
hideCardIOLogo: true,
actionBarColor: '#1565C0', // Корпоративный синий
guideColor: '#FFC107', // Корпоративный желтый
language: ECardIOLanguage.RUSSIAN,
keepApplicationTheme: true,
suppressManualEntry: false // Оставить выбор пользователю
};
// Минималистичный стиль
const minimalConfig: ICardIOConfig = {
hideCardIOLogo: true,
actionBarColor: '#FFFFFF',
guideColor: '#000000',
suppressConfirmation: true, // Без вибрации
suppressScan: true, // Без звука
keepApplicationTheme: true
};
Отладка CardIO на Android
// Проверка поддержки CardIO
const checkCardIOSupport = () => {
if (Platform.OS !== 'android') {
console.log('CardIO полностью поддерживается только на Android');
return false;
}
// На Android всегда поддерживается (API 21+)
return true;
};
// Логирование конфигурации
const debugConfig: ICardIOConfig = {
requireExpiry: true,
language: ECardIOLanguage.RUSSIAN,
actionBarColor: ECardIOColorScheme.MATERIAL_BLUE
};
console.log('CardIO конфигурация:', JSON.stringify(debugConfig, null, 2));
Производительность
CardIO на Android оптимизирован для:
- Быстрое распознавание: Обычно 1-3 секунды для четкого изображения карты
- Низкое энергопотребление: Эффективное использование камеры и процессора
- Поддержка всех устройств: Работает на устройствах с API Level 21+
- Автофокус: Автоматическая фокусировка для лучшего качества сканирования