Бесшовный переход на сайт партнера
Сбер ID SDK позволяет обеспечить бесшовный переход пользователей между вашим мобильным приложением и сайтом партнера. Пользователи могут легко переключаться между сервисами, сохраняя статус аутентификации.
Получение AppToken
AppToken — это специальный токен, необходимый для авторизации пользователя. Для его получения добавьте в запрос на авторизацию дополнительный параметр mapp_sso.
let verifier = SIDUtils.createVerifier()
let challenge = SIDUtils.createChallenge(verifier)
let challengeMethod = SIDAuthRequest.challengeMethod
let request = SIDAuthRequest(scope: "openid profile email mapp_sso",
state: "random_state",
nonce: "random_nonce",
redirectUri: "myapp://callback",
codeChallenge: challenge,
codeChallengeMethod: challengeMethod)
После успешной авторизации, мы сохраним токен в защищенном хранилище и он будет валиден на протяжении определенного времени. По умолчанию — один день. Если хотите изменить время, в течение которого токен должен быть валиден, обратитесь в поддержку.
Проверка AppToken на валидность
Перед переходом проверьте валидность AppToken и обновите его при необходимости.
let result = SIDManager.checkAppTokenIsValid()
switch result {
case .success(let isValid):
if isValid {
// Токен валиден, можно осуществлять переход
} else {
// Токен невалиден - следует его обновить
}
case .failure(let error):
// Получена ошибка, следует обработать ее опираясь на код ошибки
}
Обновление AppToken
При провале проверки на валидность токена, обновите его. Новый токен будет автоматичски перезаписан в случае успешного запроса.
let verifier = SIDUtils.createVerifier()
let challenge = SIDUtils.createChallenge(verifier)
let challengeMethod = SIDAuthRequest.challengeMethod
let request = SIDAuthRequest(scope: "openid profile email mapp_sso",
state: "random_state",
nonce: "random_nonce",
redirectUri: "myapp://callback",
codeChallenge: challenge,
codeChallengeMethod: challengeMethod)
SIDManager.refreshAppToken(request: request) { [weak self] result in
guard let self = self else { return }
switch result {
case .success(let response):
guard let authCode = response.authCode,
let state = response.state else { return }
// При успешном ответе требуется перезаписать authCode, AppToken мы сохраним для вас сами
case .failure(let error):
// Получена ошибка, следует обработать ее опираясь на код ошибки
}
}
Переход на сайт партнера
Для перехода используйте метод goToPartnerSSO
с необходимыми параметрами:
- partnerWebLink - Ссылка на сайт партнера;
- partnerClientId - Уникальный идентификор партнера, использующего Сбер ID;
- partnerColor? - Предпочтительный цвет для лоадера и окраса SafariViewController;
- openIn - Тип контроллера для открытия страницы партнера
SIDOpenInType.webview
илиSIDOpenInType.browser
.
if let error = SIDManager.goToPartnerSSO(partnerWebLink: "https://partner.ru",
partnerClientId: "partherClientId",
partnerColor: .red,
openIn: SIDOpenInType.webview) {
// Если приходит ошибка, то ее можно обработать, ориентируясь на тип ошибки.
} else {
// Открылось webView с сайтом партнера
}
Удаление AppToken
При выходе пользователя из системы не забудьте удалить AppToken.
SIDManager.deleteAppToken()
Типы ошибок и их обработка
SIDError
- объект отвечающий за все возможные ошибки при работе с SDK. Он содержит в себе:
- type - Тип ошибки. При построении логики обработки ошибок, ориентируйтесь прежде всего на него;
- message - Текст детального описания ошибки.
В данной таблице представлены все вариации типа SIDError
и инструкция по их обработке.
Тип ошибки | Значение | Обработка |
---|---|---|
serviceNotAvailable | Сервис временно не доступен | Продолжить работу приложения в обычном режиме |
serviceError | Ошибка работы сервера | Продолжить работу приложения в обычном режиме |
requiredRelogin | Часть функционала ограничена, для снятия ограничений - рекомендуется перелогинить пользователя | Разлогинить пользователя или продолжить работу с частичным функционалом |
linkIsNotValid | Невалидная ссылка | Проверить ссылку |
unknown | Неизвестная ошибка | Продолжить работу приложения в обычном режиме |