Использование

Для получения токенов выполните действия:

Шаг 1. Инициализация

  1. Для инициализации LoginSDK добавьте в AppDelegate код:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
       // some code
       do {
          try YXLSdk.shared.activate(withAppId: "идентификатор приложения_clientID")
       } catch {
          // process error
       }
       // some other code
    }
    
    @available(iOS 8.0, *)
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
       YXLSdk.shared.processUserActivity(userActivity)
       return true
    }
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
       return YXLSdk.shared.handleOpen(url, sourceApplication: sourceApplication)
    }
    
    @available(iOS 9.0, *)
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
       return YXLSdk.shared.handleOpen(url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String)
    }
    
  2. Если вы используете UIScene, то методы для открытия URL работают через протокол UISceneDelegate.

    Для передачи URL в YXLSdk используйте соответствующий метод SceneDelegate:

    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>)
    {
       URLContexts.forEach({ context in
          if YXLSdk.shared.isUrlRelated(toSdk: context.url) {
                YXLSdk.shared.handleOpen(context.url, sourceApplication: nil)
          }
       })
    }
    
  3. Внутри YandexLoginSDK можно передавать скоупы (права доступа для приложения). Для этого у объекта YXLSdk настраиваются параметры прав доступа:

    • scopes — обязательные;
    • optionalScopes — опциональные.

    Права должны запрашиваться из перечня, определенного при регистрации приложения. Узнать допустимые права можно по ссылке https://oauth.yandex.ru/client/<client_id>/info, указав вместо <client_id> идентификатор приложения.

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

Шаг 2. Авторизация

  1. Для запуска авторизации пользователя используйте метод:

    YXLSdk.shared.authorize()
    

    По умолчанию пользователь будет перенаправлен для авторизации в браузер (внешнее приложении).

    Для версий iOS 13 и выше существует возможность авторизации при помощи ASWebAuthenticationSession. Для этого необходимо передать параметр parentController, в котором будет показан контроллер для авторизации:

    YXLSdk.shared.authorize(withUid: 0, login: nil, phone: nil, firstName: nil, lastName: nil, customValues: nil, parentController: viewController)
    

    Для того чтобы процесс авторизации проходил через приложение, до начала авторизации выставьте специальный флаг:

    UserDefaults.standard.setValue(true, forKey:"blockBrowser")
    
    [[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"blockBrowser"];
    
  2. Чтобы получать события с результатами авторизации, необходимо добавиться observer-ом:

    YXLSdk.shared.add(observer: self)
    
  3. При получении успешного результата авторизации будет вызван метод с параметром result, содержащим токены:

    func loginDidFinish(with result: YXLLoginResult) {
       // use result.token and result.jwt
    }
    
  4. В случае ошибки будет вызван:

    func loginDidFinishWithError(_ error: Error) {
       // process error
    }
    
    • errorошибка с доменом kYXLErrorDomain и кодом YXLErrorCode.

Шаг 3. Получение информации о пользователе

Полученный токен можно обменять на информацию о пользователе.

Шаг 4. Выход

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

YXLSdk.shared.logout()