ym88659208ym87991671
Бесшовный переход из вашего приложения на сайт партнера | Документация для разработчиков

Бесшовный переход из вашего приложения на сайт партнера

Обновлено 26 ноября 2024

Сбер ID SDK позволяет обеспечить бесшовный переход пользователей между вашим мобильным приложением и сайтом партнера. Пользователи могут легко переключаться между сервисами, сохраняя статус аутентификации.

Получение AppToken

AppToken — это специальный токен, необходимый для авторизации пользователя. Для его получения добавьте в запрос на авторизацию дополнительный параметр mapp_sso.

val uri = SID.Login.createUriForLogin(
clientId = "clientId вашего сервиса", // на данный момент необходимо дублировать параметр
scope = "openid mapp_sso", // добавьте все необходимые вам scope
state = "random_state",
nonce = "random_nonce",
redirectUrl= "partner://redirect",
codeChallenge: "code_challenge",
codeChallengeMethod: PkceUtils.getCodeChallengeMethod()
)

Для сохранения необходимо вызвать метод SID.Login.getIDAuthResult(intent: Intent) для проверки результата авторизации. Без данного метода appToken не сохранится.

val resultModel = SID.Login.getIDAuthResult(intent)

После успешной авторизации, мы сохраним токен в защищенном хранилище и он будет валиден около трех месяцев. По умолчанию токен обновляется каждый день. Если вам нужно изменить частоту обновления токена, пожалуйста, свяжитесь с нашей службой поддержки.

Проверка AppToken на валидность

Проверку AppToken на валидность следует выполнять при каждом запуске вашего приложения, после инициализации SDK Сбер ID.

//Подпишитесь на получение событий.
SID.AppToken.subscribeToEvents(this) { tokenEvents ->
when(tokenEvents){
...
AppTokenEvents.HasExpire -> {
//Необходимо обновить токен
}
AppTokenEvents.IsValid -> {
// Токен валиден
}
...
}
}

//Старт проверки токена на проверку
SID.AppToken.checkAppTokenForValid()

Стоит отметить, что методы, работающие с AppToken, используют общую шину SID.AppToken.subscribeToEvents(this) для всех ответов. Это означает, что вам достаточно подписаться на события один раз, и вы сможете обрабатывать все запросы, связанные с AppToken, в одном месте. Такой подход позволяет упростить и централизовать обработку событий, связанных с AppToken, что делает код более чистым и поддерживаемым.

Во всех последующих примерах будут указаны только необходимые AppTokenEvents для соответствующих шагов. Полное описание можно найти в конце статьи.

Обновление AppToken

При провале проверки на валидность токена, обновите его. Новый токен будет автоматичски перезаписан в случае успешного запроса.


SID.AppToken.subscribeToEvents(this) { tokenEvents ->
when(tokenEvents){
...
AppTokenEvents.HasExpire -> {
updateAppToken() // Запускаем обновление
}
...
}

private fun updateAppToken() {
val codeVerifide = PkceUtils.generateRandomCodeVerifier(SecureRandom())
val codeChallenge = PkceUtils.deriveCodeVerifierChallenge(codeVerifide)
val oidcParams = OIDCParams(
clientId = "clientId вашего сервиса", // на данный момент необходимо дублировать параметр
scope = "openid mapp_sso", //+добавьте все необходимые вам scope
redirectUrl = "partner://redirect",
state = "random_state",
nonce = "random_nonce",
codeChallenge = codeChallenge,
codeChallengeMethod = PkceUtils.getCodeChallengeMethod()
)

SID.AppToken.updateAppToken(oidcParams)
}

Переход на сайт партнера

Для перехода используйте метод goToPartnerSSO с необходимыми параметрами:

  • webLink — Ссылка на сайт партнера;
  • clientId — Уникальный идентификор партнера, использующего Сбер ID;
  • partnerColorInt? — Предпочтительный цвет для лоадера и окраса UI элементов;
  • openIn — Тип контроллера для открытия страницы партнера SIDOpenInType.webview или SIDOpenInType.browser.
val activity = requireActivity()
val color: Int? = kotlin.runCatching {
Color.parseColor(appTokenColor?.text.toString())
}.getOrNull()

val info = LinkInformation(
webLink = "https://partner.ru/sso_auth",
clientId = "сlientId партнера",
partnerColorInt = color ?: Color.GREEN,
openIn = OpenInConstants.WEB_VIEW / OpenInConstants.BROWSER,
)

SID.AppToken.subscribeToEvents(this) { tokenEvents ->
when(tokenEvents){
...
AppTokenEvents.Success -> Unit //Удачный переход на партнера
...
}
}

SID.AppToken.goToPartnerSSO(currentActivity = activity, linkInformation = info)

Удаление AppToken

При выходе пользователя из системы не забудьте удалить AppToken.

SID.Login.logout()

События и их обработка

Все события при работе с AppToken обрабатываются в одном месте, необходимо подписаться на событие SID.AppToken.subscribeToEvents(this) и обработать получившийся tokenEvents.

SID.AppToken.subscribeToEvents(this) { tokenEvents ->
when(tokenEvents){
AppTokenEvents.HasExpire -> {
//Необходимо обновить токен
}
AppTokenEvents.IsValid -> {
// Отлично, все валидно!
}
AppTokenEvents.RequiredRelogin -> {
// Разлогинить пользователя или продолжить работу с частичным функционалом
}
AppTokenEvents.Success -> Unit
AppTokenEvents.ServiceError -> Unit
AppTokenEvents.ServiceNotAvailable -> Unit
AppTokenEvents.LinkIsNotValid -> Unit
}
}
Тип ошибкиЗначениеОбработка
HasExpireТокен невалиден, срок годности истекает или уже вышелОбновить токен SID.AppToken.updateAppToken
IsValidТокен валиденПродолжить работу приложения в обычном режиме
RequiredReloginЧасть функционала ограничена, для снятия ограничений - рекомендуется перелогинить пользователяРазлогинить пользователя или продолжить работу с частичным функционалом
SuccessТокен обновлен или вход на партнера успешенПри желании тут можно добавить бизнес логику, событие не является обязательным
ServiceErrorОшибка работы сервераПродолжить работу приложения в обычном режиме
ServiceNotAvailableСервис временно не доступенПродолжить работу приложения в обычном режиме
LinkIsNotValidНевалидная ссылка на партнера webLink, ошибка для отладки функционалаПроверьте что ссылка валидна и может открыться в браузере
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.