Общая информация
В версии 2.1.0 платежей был значительно изменен публичный API с целью дальнейшего удобства и гибкости использования SDK.
Для перехода на новую версию используйте данную инструкцию по миграции.
Обновление зависимости
Для обновления зависимости поднимите версию у billingclient в блоке dependencies вашего build.gradle:
dependencies { implementation 'ru.rustore.sdk:billingclient:2.1.0' } |
Создание инстанса
Теперь для обращения к RuStoreBillingClient его нужно создать, используя RuStoreBillingClientFactory.create():
final Context context = getContext(); final String consoleApplicationId = "111111" ; final String deeplinkScheme = "yourappscheme" ; RuStoreBillingClient billingClient = RuStoreBillingClientFactory.INSTANCE.create( context, consoleApplicationId, deeplinkScheme ); |
- 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 ) public class PaymentsModule { @Provides @Singleton public static RuStoreBillingClient ruStoreBillingClient( @ApplicationContext Context context ) { final String consoleApplicationId = "111111" ; final String deeplinkScheme = "yourappscheme" ; return RuStoreBillingClientFactory.INSTANCE.create( context, consoleApplicationId, deeplinkScheme ); } } |
Получение RuStoreBillingClient с использованием Hilt может выглядеть так:
@AndroidEntryPoint public class MainActivity extends AppCompatActivity { @Inject RuStoreBillingClient billingClient; @Override public void onCreate( @Nullable Bundle savedInstanceState) { super .onCreate(savedInstanceState); } } |
Обработка deeplink и рефакторинг обращения к RuStoreBillingClient
Учитывая рефакторинг получения RuStoreBillingClient, вам также потребуется поправить все обращения к RuStoreBillingClient. К примеру, обработка deeplink с использованием Hilt может быть переделана следующим образом:
@AndroidEntryPoint public class MainActivity extends AppCompatActivity { @Inject RuStoreBillingClient billingClient; @Override public void onCreate( @Nullable Bundle savedInstanceState) { super .onCreate(savedInstanceState); if (savedInstanceState == null ) { billingClient.onNewIntent(getIntent()); } } @Override protected void onNewIntent(Intent intent) { super .onNewIntent(intent); billingClient.onNewIntent(intent); } } |
Проверка доступности платежей
Теперь вы можете проверить доступность платежей без создания экземпляра RuStoreBillingClient.
RuStoreBillingClientExtKt.checkPurchasesAvailability(RuStoreBillingClient.Companion, getContext()) .addOnSuccessListener(result -> { if (result instanceof FeatureAvailabilityResult.Available) { // Hanlde purchases available } else { RuStoreException exception = ((FeatureAvailabilityResult.Unavailable) result).getCause(); // Hanlde purchases unavailable } }) .addOnFailureListener(error -> { // Handle error }); |
Благодаря этому, вы можете принять решение о использовании платежей RuStore в runtime без необходимости лишний раз создавать платёжный клиент.
Обратная совместимость с singleton
Чтобы дальше пользоваться платежным клиентом RuStore как синглтоном, сначала замените RuStoreBillingClient.init() на RuStoreBillingClientFactory.init(), а инстанс получайте через RuStoreBillingClientFactory.getSingleton():
class App extends Application { @Override public void onCreate() { super .onCreate(); final Application app = this ; final String consoleApplicationId = "111111" ; final String deeplinkScheme = "yourappscheme" ; RuStoreBillingClientFactory.INSTANCE.init( app, consoleApplicationId, deeplinkScheme ); RuStoreBillingClient billingClient = RuStoreBillingClientFactory.INSTANCE.getSingleton(); } } |
Перечисленные выше методы помечены как deprecated и могут быть удалены в следующих версиях.