Миграция с LoginSDK на Yandex Pay Kit

Гайд для проектов, которые сейчас интегрированы напрямую с com.yandex.android:authsdk (LoginSDK) и переходят на двойную авторизацию через Yandex Pay Kit.

Примечание

Полное описание сценария авторизации — см. Авторизация в Yandex Pay Kit.

Что меняется

Аспект LoginSDK Yandex Pay Kit
Зависимость com.yandex.android:authsdk com.yandex.pay:auth
Точка входа YandexAuthSdk.create(...) per-instance YPay.init(...) глобально в Application
Client ID Один (YANDEX_CLIENT_ID) Два (YANDEX_CLIENT_ID + YANDEX_PAY_CLIENT_ID)
Результат В лямбде registerForActivityResult В Flow YPay.auth.authResultEvents

Важно

Главное отличие: в лямбду контракта теперь всегда приходит Unit. Результат логина получается через подписку на события authResultEvents. Подробнее — в шаге 4.

Шаг 1. Зависимости

  • Было

    dependencies {
        implementation("com.yandex.android:authsdk:<version>")
    }
    
  • Стало

    dependencies {
        implementation("com.yandex.pay:auth:<LATEST_VERSION>")
    }
    

Зависимость com.yandex.android:authsdk нужно удалить полностью — Yandex Pay Kit сам подтягивает нужные компоненты.

Шаг 2. manifestPlaceholders

  • Было

    android {
        defaultConfig {
            manifestPlaceholders = [YANDEX_CLIENT_ID: "<YOUR_CLIENT_ID>"]
        }
    }
    
  • Стало

    android {
        defaultConfig {
            manifestPlaceholders["YANDEX_CLIENT_ID"] = "<YOUR_CLIENT_ID>"
            manifestPlaceholders["YANDEX_PAY_CLIENT_ID"] = "<YOUR_PAY_CLIENT_ID>"
        }
    }
    
Ключ Описание
YANDEX_CLIENT_ID Тот же, что был в LoginSDK. Используйте имеющийся.
YANDEX_PAY_CLIENT_ID Новый, выдается командой Яндекс Пэй. Если еще нет — запросите.

Шаг 3. Инициализация

  • Было

    Инстанс создавался по месту использования, обычно во Fragment/Activity.

    val sdk = YandexAuthSdk.create(YandexAuthOptions(requireContext()))
    
  • Стало

    Глобальная инициализация один раз в Application.onCreate().

    class MyApp : Application() {
        override fun onCreate() {
            super.onCreate()
            YPay.init(
                context = this,
                flows = listOf(
                    authFlow(merchantId = "<YOUR_MERCHANT_ID>"),
                    // другие флоу
                ),
            ) {
                environment = YPayEnvironment.PRODUCTION
                theme = YPayTheme.SYSTEM
                locale = YPayLocale.SYSTEM
            }
        }
    }
    

После этого в любом месте приложения доступна точка входа YPay.auth.

Важно

merchantId — UUID магазина, создается при регистрации магазина и получается через Настройки → Merchant ID . Не путать с YANDEX_CLIENT_ID, который нужен для авторизации через OAuth (см. Создание OAuth Client ID).

Шаг 4. Запуск авторизации

Самое существенное изменение: результат приходит через Flow, а не в лямбду контракта. Токен приходит тот же самый, что ранее, и его можно использовать как раньше.

  • Было

    class LoginFragment : Fragment() {
    
        private val launcher = registerForActivityResult(sdk.contract) { result ->
            handleResult(result) // ← результат тут
        }
    
        private fun handleResult(result: YandexAuthResult) = when (result) {
            is YandexAuthResult.Success -> onSuccess(result.token)
            is YandexAuthResult.Failure -> onError(result.exception)
            YandexAuthResult.Cancelled -> onCancel()
        }
    
        private fun onLoginClick() {
            launcher.launch(YandexAuthLoginOptions())
        }
    }
    
  • Стало

    class LoginFragment : Fragment() {
    
        private val authLauncher = registerForActivityResult(
            YPay.auth.getAuthContract(),
        ) {} // ← Unit, результат сюда НЕ приходит (теперь он в `YPay.auth.authResultEvents`)
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            viewLifecycleOwner.lifecycleScope.launch {
                repeatOnLifecycle(Lifecycle.State.STARTED) {
                    YPay.auth.authResultEvents.collect(::handleResult) // ← результат тут
                }
            }
        }
    
        private fun handleResult(result: YPayAuthResult) = when (result) {
            is YPayAuthResult.Success -> onSuccess(result.token)
            is YPayAuthResult.Failure -> onError(result.message)
            YPayAuthResult.Cancel -> onCancel()
        }
    
        private fun onLoginClick() {
            authLauncher.launch()
        }
    }
    

Совет

Необходимо подписаться на события авторизации YPay.auth.authResultEvents раньше, до запуска самого флоу авторизации через authLauncher.launch.

Карта типов

LoginSDK Yandex Pay Kit
YandexAuthSdk YPay.auth (YPayAuth)
sdk.contract YPay.auth.getAuthContract()
YandexAuthLoginOptions Unit (опций нет)
YandexAuthResult YPayAuthResult
Success.token Success.token
Failure.exception Failure.message: String?
Cancelled Cancel

Логаут

  • Было

    Ручная очистка токена на стороне приложения.

  • Стало

    Ручная очистка токена на стороне приложения. Дополнительно нужно вызвать метод SDK logout для разлогина пользователя во всех флоу Яндекс Пэй.

    YPay.auth.logout()
    

Чек-лист миграции

  • Удалена зависимость com.yandex.android:authsdk
  • Добавлена зависимость com.yandex.pay:auth
  • Получен YANDEX_PAY_CLIENT_ID от команды Яндекс Пэй
  • Прописаны manifestPlaceholders (YANDEX_CLIENT_ID, YANDEX_PAY_CLIENT_ID)
  • YPay.init(...) вызван в Application.onCreate()
  • YandexAuthSdk.create(...) удален из Activity/Fragment
  • Результат ожидается через YPay.auth.authResultEvents, а не из лямбды контракта
  • launch(loginOptions) заменен на launch()
Предыдущая