README.md

RU EN

Пример внедрения RuStore SDK Pay

Документация SDK Pay

Оглавление

Условия работы платежей

Для работы проведения платежей необходимо соблюдение следующих условий.
1. Пользователь и приложение не должны быть заблокированы в RuStore.
2. Для приложения включена возможность покупок в системе RuStore Консоль.

Сервис имеет некоторые ограничения на работу за пределами РФ.

Подготовка требуемых параметров

Для корректной настройки примера приложения вам следует подготовить:
1. console_app_id_value - код приложения из консоли разработчика RuStore (пример: https://console.rustore.ru/apps/123456), тут console_app_id_value = 123456
2. applicationId - из приложения, которое вы публиковали в консоль RuStore, находится в файле build.gradle вашего проекта

 android {
    defaultConfig {
        applicationId = "ru.rustore.sdkpayexample"
    }
 }
  1. productsIds - разовые покупки, доступные в вашем приложении
  2. release.keystore - подпись, которой было подписано приложение, опубликованное в консоль RuStore.
  3. release.properties - в этом файле должны быть указаны параметры подписи, которой было подписано приложение, опубликованное в консоль RuStore. Как работать с ключами подписи APK-файлов

Настройка примера приложения

Для проверки работы приложения вы можете воспользоваться функционалом тестовых платежей.

  1. В AndroidManifest.xml добавить атрибут meta-data с названием console_app_id_value. В качестве значения (value) указать идентификатор своего приложения из консоли RuStore:

    <meta-data
         android:name="console_app_id_value"
         android:value="id_вашего_приложения" />
    
  2. Замените applicationId, в файле build.gradle, на applicationId apk-файла, который вы публиковали в консоль RuStore:

    android {
       defaultConfig {
           applicationId = "ru.rustore.sdkpayexample"
       }
    }
    
  3. В директории cert замените сертификат release.keystore - сертификатом своего приложения, так же в release.properties выполните настройку параметров key_alias, key_password, store_password. Подпись release.keystore должна совпадать с подписью, которой было подписано приложение, опубликованное в консоль RuStore. Убедитесь, что используемый buildType (например, debug) использует такую же подпись, что и опубликованное приложение (например, release).
  4. В ProductsViewModel в методе loadProducts() для productsRepository в аргументе productsIds перечислите идентификаторы продуктов, которые доступны в вашем приложении:

    productsRepository.get(listOf("productId1", "productId2", "productId3"))
    
  5. Запустите проект и проверьте работу приложения

Сценарий использования

Проверка доступности работы с платежами

На Главном экране есть текстовое поле, которое отображает доступность покупки. Для этого выполняется проверка доступности работы с платежами.

Проверка доступности работы с платежами

Получение списка продуктов

Нажатие на кнопку “Начать покупки” выполняет переход на экран Продукты (ProductsScreen), на котором отображается список продуктов, полученный по идентификаторам, переданным в productsRepository.

Получение списка продуктов

Покупка продукта

Нажатие на элемент списка продуктов выполняет отображение диалога с предложением выбрать один из трёх сценариев покупки.

Сценарии покупки
После выбора сценария покупки запускается шторка SDK Pay, на которой отображаются информация о продукте и варианты оплаты.

Начало покупки продукта в SDK Pay
Если покупка совершена успешно, то далее выполняется подтверждение покупки. Покупку также можно отменить в зависимости от требуемого сценария конечного приложения.
ВНИМАНИЕ
Подтверждение или отмена покупки необходима только для покупок в 2 стадии (см. Покупка продукта, раздел Двухстадийная оплата (с холдированием средств)). В примере для упрощения подтверждение выполнено для любой покупки (см. код ProductsViewModel#updatePaidPurchases()).

Получение списка покупок

На Главном экране (MainScreen) при нажатии на кнопку “Посмотреть покупки” выполняется переход на экран Покупки. На нём отображается список покупок.

Список покупок

Получение подписок от SDK Billing Client

В SDK Pay возможно получить подписки как от самого SDK Pay, так и от предыдущего SDK - SDK Billing Client.
Для этого в примере есть метод getBillingSubscriptions() у PurchasesRepository.
В самом приложении-примере явного использования нет, реализация остаётся на усмотрение пользователя SDK Pay.

Обработка deeplink

Приложение-пример уже настроено для работы с deeplink. Это требуется для корректной обработки оплаты через сторонние приложения (например, СБП). Для этого необходимо указать в AndroidManifest.xml intent-filter с scheme вашего проекта.

  1. В файле AndroidManifest.xml в параметре data android:scheme укажите URL-адрес для использования deeplink (должен совпадать с атрибутом sdk_pay_scheme_value из пункта 2)

    <activity
       android:name=".MainActivity">
    
       <intent-filter>
           <action android:name="android.intent.action.VIEW" />
    
           <category android:name="android.intent.category.DEFAULT" />
    
           <data android:scheme="rustore.sdk.pay.example.scheme" /> // Заменить на свой deeplink
       </intent-filter>
    </activity>
    
  2. Указать deeplinkScheme своего приложения в AndroidManifest.xml, в атрибуте meta-data, параметр sdk_pay_scheme_value:

    <meta-data
             android:name="sdk_pay_scheme_value"
             android:value="rustore.sdk.pay.example.scheme" />
    
  3. Далее в Activity, в которую необходимо вернуться после совершения оплаты (ваша страница магазина), нужно добавить:

    class MainActivity: AppCompatActivity() {
       private val payClient: RuStorePayClient = YourDependencyInjection.getPayClient()
       override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            if (savedInstanceState == null) {
                payClient.getIntentInteractor().proceedIntent(intent, sdkTheme = SdkTheme.LIGHT)  // Опциональная тема
            }
       }
       override fun onNewIntent(intent: Intent) {
            super.onNewIntent(intent)
            payClient.getIntentInteractor().proceedIntent(intent, sdkTheme = SdkTheme.LIGHT)  // Опциональная тема
       }
    }
    
  4. Для восстановления состояния вашего приложения при возврате с deeplink добавьте в AndroidManifest.xml android:launchMode=“singleTop”

    <activity
      android:name=".MainActivity"
      android:launchMode="singleTop">
    

Условия распространения

Данное программное обеспечение, включая исходные коды, бинарные библиотеки и другие файлы распространяется под лицензией MIT. Информация о лицензировании доступна в документе MIT-LICENSE.txt

Техническая поддержка

Если появились вопросы по интеграции SDK платежей, обратитесь по ссылке.

Описание
Пример интеграции SDK Pay в мобильное приложение на Kotlin
Конвейеры
0 успешных
0 с ошибкой
Разработчики