Общая информация

В версии 2.1.0 платежей был значительно изменен публичный API с целью дальнейшего удобства и гибкости использования SDK.

Для перехода на новую версию используйте данную инструкцию по миграции.

Обновление зависимости

Для обновления зависимости поднимите версию у billingclient в блоке dependencies вашего build.gradle:

build.gradle
dependencies {    
    implementation 'ru.rustore.sdk:billingclient:2.1.0'
}

Создание инстанса

Теперь для обращения к RuStoreBillingClient его нужно создать, используя RuStoreBillingClientFactory.create():

Создание RuStoreBillingClient
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:

RuStoreBillingClient с DI
@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 может выглядеть так:

RuStoreBillingClient с DI
@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 может быть переделана следующим образом:

onNewIntent в активити платежей
@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():

RuStoreBillingClient как синглтон
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 и могут быть удалены в следующих версиях.

Обновлено 9 июня 2023 г.
Was this information helpful?