---
metadata:
  - name: generator
    content: Diplodoc Platform v5.44.0
alternate:
  - https://yandex.com/dev/id/doc/en/mobileauthsdk/ios/2.1.1/sdk-ios-methods.md
  - https://yandex.com/dev/id/doc/ru/mobileauthsdk/ios/2.1.1/sdk-ios-methods.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/id/doc/ru/llms.txt

# Справочник методов

## Класс YandexLoginSDK {#yandexloginsdk}

Основной класс, через который идёт всё взаимодействие с SDK. Класс является реализацией паттерна Одиночка, единственный его экземпляр — это [статическая переменная `shared`](#yandexloginsdk-statvars).

Для начала авторизации используется [метод `authorize(with:customValues:authorizationStrategy:)`](#yandexloginsdk-methods-authorizationstrategy). В него необходимо передать родительский View Controller.

Чтобы получить результат авторизации, нужно подписаться наблюдателем LoginSDK через [метод `add(observer:)`](#yandexloginsdk-methods-addobserver). Если получать уведомления от LoginSDK больше не нужно, от них можно отписаться через [метод `remove(observer:)`](#yandexloginsdk-methods-removeobserver).

Если необходимо удалить сохранённые токены или провести повторную авторизацию пользователя, используется [метод `logout()`](#yandexloginsdk-methods-removeobserver).

### **Статические переменные** {#yandexloginsdk-statvars}

* Единственный экземпляр класса `YandexLoginSDK`:

   ```swift
   static var shared: YandexLoginSDK { get }
   ```
   
   Получать значения переменных и вызывать методы нужно именно со статической переменной `shared`.

* Текущая версия LoginSDK:

   ```swift
   static var version: String { get }
   ```
   
   Соответствует формату семантического версионирования (SemVer).

### **Методы** {#yandexloginsdk-methods}

#### {#yandexloginsdk-methods-authorizationstrategy}

* Активация LoginSDK:

   ```swift
   func activate(with: String, authorizationStrategy: AuthorizationStrategy) throws
   ```
   
   Методу необходимо передать [Client ID](https://yandex.com/dev/id/doc/ru/register-client.md#app-params) и желаемую [стратегию авторизации `authorizationStrategy`](#authorizationstrategy) (значение по умолчанию `.default`). Перед активацией метод провалидирует конфигурацию приложения. Если валидация завершится неудачно, вызов метода закончится ошибкой. 

* Получение токена:

   ```swift
   func handleUserActivity(NSUserActivity) throws
   ```
   
   Метод обрабатывает аргумент [NSUserActivity](https://developer.apple.com/documentation/foundation/nsuseractivity/), пытается получить из него URL, который был передан приложению, а из него получить токены. В случае успеха у наблюдателей вызывается [метод `didFinishLogin(with:)`](#loginsdkobserver-methods) с аргументом `.success` и ассоциированным значением типа [LoginResult](#loginresult).


* Обертка метода `handleUserActivity(_:)`:

   ```swift
   func tryHandleUserActivity(NSUserActivity) –> Bool
   ```

   Выполнение метода `handleUserActivity(_:)` может заканчиваться ошибкой, в то время как `tryHandleUserActivity(_:)` вызывает его в конструкции ##do-catch## и возвращает `false`, если при выполнении возникла ошибка.

* Получение кода авторизации:

   ```swift
   func handleOpenURL(URL) throws
   ```

   Метод обрабатывает переданный URL и пытается получить из него код авторизации, затем по полученному коду запрашивает токены. Если всё проходит успешно, у наблюдателей вызывается [метод `didFinishLogin(with:)`](#loginsdkobserver-methods) с аргументом `.success` и ассоциированным значением типа [LoginResult](#loginresult).

* Обертка метода `handleOpenURL(_:)`:

   ```swift
   func tryHandleOpenURL(URL) –> Bool
   ```

   Выполнение метода `handleOpenURL(_:)` может заканчиваться ошибкой, в то время как `tryHandleOpenURL(_:)` вызывает его в конструкции ##do-catch## и возвращает `false`, если при выполнении возникла ошибка.

* Проверка URL:

   ```swift
   func isURLRelatedToSDK(URL) –> Bool
   ```

   Метод проверяет, относится ли переданный URL к LoginSDK.

#### {#yandexloginsdk-methods-addobserver}

* Добавление в список наблюдателей:

   ```swift
   func add(observer: any LoginSDKObserver)
   ```

   Метод добавляет переданный ему объект в список наблюдателей LoginSDK. Наблюдатель будет получать уведомления обо всех результатах работы SDK: об успешных авторизациях и о получении ошибок.

#### {#yandexloginsdk-methods-removeobserver}

* Удаление из списка наблюдателей:

   ```swift
   func remove(observer: any LoginSDKObserver)
   ```

   Метод убирает переданный ему объект из списка наблюдателей LoginSDK.

* Запуск процесса авторизации:

   ```swift
   func authorize(with: UIViewController, customValues: [String: String]?, authorizationStrategy: AuthorizationStrategy) throws
   ```

   Параметр [`parentViewController`](https://developer.apple.com/documentation/uikit/uiviewcontroller/) является обязательным, даже если выбрана [стратегия авторизации](#authorizationstrategy) через приложения Яндекса, так как на устройстве пользователей этих приложений может не быть и тогда SDK перейдёт к авторизации через веб. Параметр `customValues` имеет значение по умолчанию `nil`.

#### {#yandexloginsdk-methods-logout}

* Удаление токенов из хранилища:

   ```swift
   func logout() throws
   ```

   Метод может использоваться, если необходима повторная авторизация.


## Перечисление YandexLoginSDK.AuthorizationStrategy {#authorizationstrategy}

Перечисление (enum), определяющее стратегию авторизации пользователя в LoginSDK. В зависимости от установленного в [YandexLoginSDK](#yandexloginsdk) значения свойства `authorizationStrategy` LoginSDK будет определять, авторизовывать ли пользователя через приложения Яндекса или через веб.

### Значения {#authorizationstrategy-values}

* Стратегия по умолчанию:

   ```swift
   case default
   ```

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

* Стратегия авторизации через веб:

   ```swift
   case webOnly
   ```

   Если необходимо авторизовать пользователя в веб, укажите это при активации приложения в методе [`activate(with:authorizationStrategy:)`](#yandexloginsdk-methods-authorizationstrategy) экземпляра класса [YandexLoginSDK](#yandexloginsdk). В этом случае активатор не будет требовать от приложения наличия схем для перехода в приложения Яндекса в _Info.plist_.


## Структура LoginResult {#loginresult}

Структура `LoginResult` хранит в себе токены, полученные в результате авторизации. Экземпляр этой структуры передаётся наблюдателям LoginSDK в случае успешной авторизации в [методе `didFinishLogin(with:)`](#loginsdkobserver-methods).

### Переменные {#loginresult-vars}

* OAuth-токен:

   ```swift
   var token: String { get }
   ```

   Используется в запросах к API сервисов Яндекса.

* JSON Web Token:

   ```swift
   var jwt: String { get }
   ```

   Подробнее о [JSON Web Token](https://yandex.com/dev/id/doc/ru/tokens/jwt.md).

* Представление структуры в виде словаря:

   ```swift
   var asDictionary: [String: String] { get }
   ```

   Ключами и значениями словаря являются строки. Ключом для OAuth-токена является строка *“token“*, для JSON Web Token — *“jwt“*.

* Представление структуры в виде строки:

   ```swift
   var asString: String { get }
   ```


## Протокол LoginSDKObserver {#loginsdkobserver}

Протокол `LoginSDKObserver` используется LoginSDK для уведомления наблюдателей о завершении авторизации. Реализовать протокол могут только классы.

Для подписки на изменение используется [метод `addObserver(_:)`](#yandexloginsdk-methods-addobserver) класса YandexLoginSDK.

Для отписки от изменений используется [метод ` removeObserver(_:) `](#yandexloginsdk-methods-removeobserver) класса YandexLoginSDK.

### Методы {#loginsdkobserver-methods}

* Завершение авторизации:

   ```swift
   func didFinishLogin(with: Result<LoginResult, any Error>)
   ```

   Метод вызывается в двух случаях:
   * LoginSDK успешно завершил авторизацию, получил OAuth-токен и JSON Web Token.
   * LoginSDK столкнулся с ошибкой во время выполнения авторизации.
   
   Случай неудачной авторизации будет иметь в качестве связанного значения ошибку с типом, соответствующим протоколу `Error`. В частности, эта ошибка может соответствовать протоколу `YandexLoginSDKError`.


## Протокол YandexLoginSDKError {#yandexloginsdkerror}

Протокол `YandexLoginSDKError` объединяет все ошибки, которые генерирует LoginSDK. Для любой такой ошибки можно получить строковое описание через переменную `message`.

### Переменные {#yandexloginsdkerror-vars}

* Подробная информация об ошибке в виде строки:

   ```swift
   var message: String { get }
   ```
