Миграция с 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()