README.md

Пример внедрения SDK платежей RuStore

Документация SDK платежей

Readme English Version

Требуемые условия

Для корректной работы SDK необходимо соблюдать следующие условия:

  • Задан правильно consoleApplicationId в create():
 private static RuStoreBillingClient ruStoreBillingClient = RuStoreBillingClientFactory.INSTANCE.create(
                app,
                "184050",
                "rustoresdkexamplescheme",
                null,
                null,
                null,
                true
        );
  • ApplicationId, указанный в build.gradle, совпадает с applicationId apk-файла, который вы публиковали в консоль RuStore:
android {
    defaultConfig {
        applicationId = "ru.rustore.sdk.billingexample" // Зачастую в buildTypes приписывается .debug
    }
}
  • Подпись keystore должна совпадать с подписью, которой было подписано приложение, опубликованное в консоль RuStore. Убедитесь, что используемый buildType (пр. debug) использует такую же подпись, что и опубликованное приложение (пр. release).

Потребление и отмена покупки

RuStore Billing SDK требует правильно обрабатывать состояния покупки, чтобы предоставить наилучший сценарий использования. Так, купленные потребляемые товары необходимо потребить, а незаконченные покупки - отменять, чтобы иметь возможность заново начать новую. Подробнее о потреблении и отмене.

При открытии вашего экрана товаров, необходимо получить список товаров с помощью getPurchases() и обработать товары следующим образом:

public void getPurchases() {
    PurchasesUseCase purchasesUseCase = billingClient.getPurchases();

    purchasesUseCase.getPurchases().addOnSuccessListener(purchases -> {
        PurchaseAdapter purchaseAdapter = new PurchaseAdapter(purchases);

        purchasesList.setAdapter(purchaseAdapter);
        purchasesList.setLayoutManager(new LinearLayoutManager(getContext()));

        purchases.forEach(purchase -> {
            String purchaseId = purchase.getPurchaseId();
            if (purchaseId != null) {
                assert purchase.getDeveloperPayload() != null;
                if (purchase.getPurchaseState() != null) {
                    if (purchase.getPurchaseState() == PurchaseState.CREATED ||
                            purchase.getPurchaseState() == PurchaseState.INVOICE_CREATED )
                    {
                        deletePurchase(purchaseId);
                    } else if (purchase.getPurchaseState() == PurchaseState.PAID) {
                        confirmPurchase(purchaseId);
                    }
                } else {
                    Log.e("RuStoreBillingClient", "PurchaseState is null")
                }
            }
        });
    }).addOnFailureListener(throwable ->
        Log.e("RuStoreBillingClient", "Error calling getPurchases cause: " + throwable)
    );
}

Пример взят из StartFragment.java.

Использовать синхронные await() методы не обязательно.

Обработать результат покупки необходимо следующим образом:

public void purchaseProduct(String productId) {
        PurchasesUseCase purchasesUseCase = billingClient.getPurchases();

        purchasesUseCase.purchaseProduct(productId, null, 1, developerPayload)
                .addOnSuccessListener(this::handlePaymentResult)
                .addOnFailureListener(throwable ->
            // Process error
        );
}

private void handlePaymentResult(PaymentResult paymentResult) {
        if (paymentResult instanceof PaymentResult.Success) {
            confirmPurchase(((PaymentResult.Success) paymentResult).getPurchaseId());
        } else if (paymentResult instanceof PaymentResult.Failure) {
            deletePurchase(((PaymentResult.Failure) paymentResult).getPurchaseId());
        }
}

Пример взят из StartFragment.java.

Есть вопросы

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

Описание

Пример внедрения SDK платежей RuStore

Конвейеры
0 успешных
0 с ошибкой