Сбер ID SDK позволяет обеспечить бесшовный переход пользователей между вашим мобильным приложением и сайтом партнера. Пользователи могут легко переключаться между сервисами, сохраняя статус аутентификации.
Настройка AppToken
Чтобы AppToken заработал нужно провести ряд настроек в проекте:
- Добавить в Keychain Sharing новую Keychain Group с параметром "ru.sid.iphone.shared"
- Добавить в info.plist настройку параметра AppIdentifierPrefix
<key>AppIdentifierPrefix</key>
<string>$(AppIdentifierPrefix)</string> - Проверить добавились ли новые entitlements в проект
- Удалить и установить заново приложение на симулятор
Получение 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 = SID.login.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)
SID.login.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
с необходимыми параметрами:
class YourViewController: UIViewController, SIDWebViewDelegateProtocol {
func goToPartnerSSO() {
/// Открывает сайт партнера
/// - Parameters:
/// - partnerWebLink: Ссылка на сайт партнера
/// - partnerClientId: Уникальный идентификатор партнера, использующего Сбер ID
/// - partnerColor: Предпочитаемый цвет для UI элементов при переходе
/// - openIn: Тип контроллера для открытия страницы партнера `SIDOpenInType.webView` или `SIDOpenInType.browser`.
/// - delegate: Обработчик событий webview
/// - Returns: Ошибка
if let error = SID.login.goToPartnerSSO(partnerWebLink: "https://partner.ru",
partnerClientId: "partnerClientId",
partnerColor: .red,
openIn: SIDOpenInType.webView,
delegate: self) {
// Если приходит ошибка, то ее можно обработать, ориентируясь на тип ошибки.
} else {
// Открылось webView с сайтом партнера
}
}
func webViewReject() {
// Обработка закрытия webView
}
}
Удаление AppToken
При выходе пользователя из системы не забудьте удалить AppToken.
SID.login.deleteAppToken()
Типы ошибок и их обработка
SIDError
- объект отвечающий за все возможные ошибки при работе с SDK. Он содержит в себе:
- type - Тип ошибки. При построении логики обработки ошибок, ориентируйтесь прежде всего на него;
- message - Текст детального описания ошибки.
В данной таблице представлены все вариации типа SIDError
и инструкция по их обработке.
Тип ошибки | Значение | Обработка |
---|---|---|
serviceNotAvailable | Сервис временно не доступен | Продолжить работу приложения в обычном режиме |
serviceError | Ошибка работы сервера | Продолжить работу приложения в обычном режиме |
requiredRelogin | Часть функционала ограничена, для снятия ограничений - рекомендуется перелогинить пользователя | Разлогинить пользователя или продолжить работу с частичным функционалом |
linkIsNotValid | Невалидная ссылка | Проверить ссылку |
unknown | Неизвестная ошибка | Продолжить работу приложения в обычном режиме |
clientIdNotFound | ClientId не найден | Передать через настройки clientId и попробовать снова или продолжить работу приложения в обычном режиме |