Миграция до платежей версии 2.1.0
Общая информация
В версии 2.1.0 платежей был значительно изменен публичный API с целью дальнейшего удобства и гибкости использования SDK.
Для перехода на новую версию используйте данную инструкцию по миграции.
Обновление зависимости
Для обновления зависимости поднимите версию у billingclient в блоке dependencies вашего build.gradle:
dependencies { implementation( "ru.rustore.sdk:billingclient:2.1.0" ) } |
Создание инстанса
Теперь для обращения к RuStoreBillingClient его нужно создать, используя RuStoreBillingClientFactory.create():
val billingClient: RuStoreBillingClient = RuStoreBillingClientFactory.create( context = app, consoleApplicationId = "111111" , deeplinkScheme = "yourappscheme" ) |
- context — контекст android. Можно передать любой контекст, внутри используется контекст приложения.
- consoleApplicationId — код приложения из консоли разработчика RuStore (пример: https://console.rustore.ru/apps/111111).
- deeplinkScheme — cхема deeplink, необходимая для возврата в ваше приложение после оплаты через стороннее приложение (например, SberPay или СБП). SDK генерирует свой хост к данной схеме.
Таким образом, RuStoreBillingClient.init() заменен на RuStoreBillingClientFactory.create().
Вследствие этого изменения ответственность за хранение платежного клиента переходит к разработчику. Вы можете сами выбирать, когда потребуется создать RuStoreBillingClient и когда отказаться от него, экономя ресурсы.
Предлагаем создавать RuStoreBillingClient через Dependency Injection. К примеру, через Hilt:
@Module @InstallIn (SingletonComponent:: class ) abstract class PaymentsModule { companion object { @Provides @Singleton fun ruStoreBillingClient( @ApplicationContext context: Context): RuStoreBillingClient { return RuStoreBillingClientFactory.create( context = context, consoleApplicationId = "111111" , deeplinkScheme = "yourappscheme" ) } } } |
Получение RuStoreBillingClient с использованием Hilt может выглядеть так:
@AndroidEntryPoint class MainActivity : AppCompatActivity() { @Inject lateinit var billingClient: RuStoreBillingClient override fun onCreate(savedInstanceState: Bundle?) { super .onCreate(savedInstanceState) } } |
Обработка deeplink и рефакторинг обращения к RuStoreBillingClient
Учитывая рефакторинг получения RuStoreBillingClient, вам также потребуется поправить все обращения к RuStoreBillingClient. К примеру, обработка deeplink с использованием Hilt может быть переделана следующим образом:
@AndroidEntryPoint class MainActivity : AppCompatActivity() { @Inject lateinit var billingClient: RuStoreBillingClient override fun onCreate(savedInstanceState: Bundle?) { super .onCreate(savedInstanceState) if (savedInstanceState == null ) { billingClient.onNewIntent(intent) } } override fun onNewIntent(intent: Intent?) { super .onNewIntent(intent) billingClient.onNewIntent(intent) } } |
Проверка доступности платежей
Теперь вы можете проверить доступность платежей без создания экземпляра RuStoreBillingClient.
RuStoreBillingClient.checkPurchasesAvailability(context) .addOnSuccessListener { result -> when (result) { is FeatureAvailabilityResult.Available -> { // Handle purchases available } is FeatureAvailabilityResult.Unavailable -> { // Handle purchases unavailable } } } .addOnFailureListener { throwable -> // Handle error } |
Благодаря этому, вы можете принять решение об использовании платежей RuStore в runtime, без необходимости лишний раз создавать платёжный клиент.
Обратная совместимость с singleton
Чтобы дальше пользоваться платежным клиентом RuStore как синглтоном, сначала замените RuStoreBillingClient.init() на RuStoreBillingClientFactory.init(), а инстанс получайте через RuStoreBillingClientFactory.getSingleton():
class App : Application() { override fun onCreate() { super .onCreate() RuStoreBillingClientFactory.init( application = this , consoleApplicationId = "111111" , deeplinkScheme = "yourappscheme" ) val billingClient: RuStoreBillingClient = RuStoreBillingClientFactory.getSingleton() } } |
Для Kotlin предлагается использовать функции extension.
Импортируйте необходимые функции из пакета ru.rustore.sdk.billingclient.utils.pub:
import ru.rustore.sdk.billingclient.utils.pub.init import ru.rustore.sdk.billingclient.utils.pub.onNewIntent import ru.rustore.sdk.billingclient.utils.pub.products import ru.rustore.sdk.billingclient.utils.pub.purchases class App : Application() { override fun onCreate() { super .onCreate() RuStoreBillingClient.init( application = this , consoleApplicationId = "111111" , deeplinkScheme = "yourappscheme" ) val products: ProductsUseCase = RuStoreBillingClient.products val purchases: PurchasesUseCase = RuStoreBillingClient.purchases RuStoreBillingClient.onNewIntent(intent) } } |
Перечисленные выше методы помечены как deprecated и могут быть удалены в следующих версиях.