ym88659208ym87991671
Файл iOS SDK | Документация для разработчиков

Файл iOS SDK

Обновлено 4 апреля 2024
ВерсияОписание измененийФайлДата
3.6.0iOS-sdk-v3.6.0.zip04.04.2024

Переход на актуальную версию 3.4.2

Бесшовный переход на сайт партнера

В версии SDK 3.2.0 была добавлена возможность бесшовного перехода в ЕЛК (Единый личный кабинет) и на сайты других партнеров, использующих Сбер ID. Для применения данной фичи в приложении - необходимо сперва получить AppToken, так как именно благодаря ему и будет осуществляться переход по SSO.

Получение AppToken

Для полуения AppToken необходимо при авторизации пользователя по Сбер ID добавить в поле scope параметр mapp_sso.

// Параметры для поддержки PKCE
let verifier = SIDUtils.createVerifier()
let challenge = SIDUtils.createChallenge(verifier)


let request = SIDAuthRequest()
request.nonce = "your nonce"
request.scope = "your scope mapp_sso" //Перечисление scope через пробел
request.state = "your state"
request.redirectUri = "myapp://sberidauth"
request.codeChallenge = challenge //Необязательный параметр
request.codeChallengeMethod = SIDUtilsCodeChallengeMethod //Необязательный параметр

После успешной авторизации, AppToken будет сохранен в защищенном хранилище. Следует отметить, что AppToken будет валиден на протяжении определенного времени. По дефолту - это 1 день, но данный параметр, связавшись с поддержкой, можно попросить изменить под ваши нужды. Поэтому, прежде чем осуществлять бесшовный переход на партнера необходимо выполнить ряд действий:

  • Проверить AppToken на валидность
  • Обновить AppToken в случае если он истек
  • Осуществить непосредственно переход на партнера

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

Для проверки валидности следует вызвать в SDK метод checkAppTokenIsValid()

// Результат выполнения проверки токена на валидность
let result = SIDManager.checkAppTokenIsValid()

switch result {
// В случае если токен был получен, вырентся успешный ответ типа Bool
case .success(let isValid):
if isValid {
// Если токен валиден, то в данном случае его обновление не требуется и пункт обновления AppToken можно пропустить
} else {
// Если токен НЕ валиден - следует его обновить
}
case .failure(let error):
// Если приходит ошибка, то ее можно обработать, ориентируясь на тип ошибки.
}

Обновление AppToken

Обновление токена происходит через вызов метода refreshAppToken(request: SIDAppTokenRequest, completion: @escaping (Result<SIDAppTokenResponse, SIDError>) -> Void), в аргументы которого передается сформированная модель с OIDC параметрами и обработчик ответа в виде completion. Токена будет автоматичски перезаписан в случа успешного запроса.

// Параметры для поддержки PKCE
// Параметры для поддержки PKCE
let verifier = SIDUtils.createVerifier()
let challenge = SIDUtils.createChallenge(verifier)

let request = SIDAppTokenRequest()
request.nonce = "your nonce"
request.scope = "your scope mapp_sso" //Перечисление scope через пробел
request.state = "your state"
request.redirectUri = "myapp://sberidauth"
request.codeChallenge = challenge //Необязательный параметр
request.codeChallengeMethod = SIDUtilsCodeChallengeMethod //Необязательный параметр

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 на новый пришедший
case .failure(let error):
// Если приходит ошибка, то ее можно обработать, ориентируясь на тип ошибки.
}
}

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

Для пользования данной фичей в полной мере, необходимо иметь 4 параметра:

  • partnerWebLink: ссылка на сайт партнера (Обязательный)
  • partnerClientId: уникальный идентификор партнера, использующего Сбер ID. (Обязательный для SSO)
  • partnerColor: предпочтительный цвет для лоадера и SafariViewController (Необязательный)
  • openIn: тип контроллера для открытия страницы партнера (Необязательный)

Для вызова перехода нужно использовать метод goToPartnerSSO(partnerWebLink: String, partnerClientId: String?, partnerColor: UIColor?, openIn: SIDOpenInType?) -> SIDError?. В случае успешного сценария работы сайт партнера будет открыт бесшовно, в ином случае сайт откроется без SSO.

Аргумент SIDOpenInType можно задать через предложенные варианты enum, либо через rawValue в нижнем регистре ("webview"). Для данной функции следует обрабатывать лишь один тип ошибки - linkIsNotValid. Эта ошибка означает что вы передали невалидный partnerWebLink. Ошибки других типов - обрабатывайте на свое усмотрение.

let partnerWebLink: String = "https://partner.ru"
let partnerClientId: String? = "partherClientId"
let partnerColor: UIColor? = .red
var openIn: SIDOpenInType? = SIDOpenInType(rawValue: "webview")

if let error = SIDManager.goToPartnerSSO(partnerWebLink: partnerWebLink,
partnerClientId: partnerClientId,
partnerColor: partnerColor,
openIn: openIn) {
// Если приходит ошибка, то ее можно обработать, ориентируясь на тип ошибки.
} else {
// Открылось webView с сайтом партнера
}

Удаление AppToken

В случае если пользователь выходит из аккаунта - необходмо удалить AppToken, вызвав метод deleteAppToken().

SIDManager.deleteAppToken()

Типы ошибок и их обработка

SIDError - класс отвечающий за все возможные ошибки при работе с SDK. Класс содержит в себе две переменные:

  • type: Тип ошибки. При построении лоигики обработки ошибок, ориентир необходимо станвить на него
  • message: Текст ошибки, детально рассказывающий о проблеме.

В данной таблице представлены все вариации типа SIDError и инструкция по их обработке.

О версии 3.0.0

Новое название класса SIDManager

Наш класс SIDAuthManager стал выполнять больше функций, чем просто Auth, по-этому, соблюдая правила чистого кода, переимновали класс в SIDManager

Инициализация SDK в методе AppDelegate

При старте вашего мобильного приложения необходмо инициализировать SDK в методе AppDelegate и установить значение Client ID:

import SberIdSDK

func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
SIDManager.initSberID(clientId: "clientId")
...
return true
}

О версии 2.4.4

Передача номера на OIDC страницу

Добавлена возмость отправки номера телефона на OIDC страницу через новый параметр login_hint во время запуска авторизации.

let request = SBKAuthRequest()
request.nonce = "your nonce"
... //другие параметры
request.loginHint = "79998887766" // параметр для передачи номера телефона пользователя
... //другие параметры

О версии 2.4.0

Что нового в версии SDK 2.4.0 и на что обратить внимание - рассказываем ниже!

Шторка выбора мобильного приложения Сбербанка

С версии 2.4.0 добавлена шторка, всплывающая снизу со списком мобильных приложений Сбербанка. Она появляется только в случае, когда у пользователя установлено больше одного приложения (Например: СБОЛ и Сбербанк онлайн)

Скриншот подключения SDK

Поддержка тестовых стендов

Начиная с версии 2.4.0 для внутренних партнеров мы добавили возможность смены стендов на ИФТ и ПСИ. Для работы с переключением у вас должна быть настроена интеграция с тестовыми стендами. Для добавления на стенд можно написать в чат поддержки Сбер ID (Ваш_продукт & Сбер ID) или на почту SberId@sber.ru

Для настройки стенда нужно установить standType в SBKAuthRequest. Возможные варианты enum: prom, ift, psi, iftCloud, psiCloud, custom.

О версии 2.3.1

С версии 2.3.0 мы временно отключили MPAnalytics, если у вас она прежде была установлена, удалите MPAnalytics.xcframework и файл Media.bundle. Проверьте, что в Frameworks, Libraries, and Embedded Content больше не подключена MPAnalytics и в Build phases/CompileSources нет файла MPAnalyticsDataModel.xcdatamodeld.

ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.