Использование
Для получения токенов выполните действия:
Шаг 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) }
-
Если вы используете 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) } }) }
-
Внутри
YandexLoginSDK
можно передавать скоупы (права доступа для приложения). Для этого у объектаYXLSdk
настраиваются параметры прав доступа:scopes
— обязательные;optionalScopes
— опциональные.
Права должны запрашиваться из перечня, определенного при регистрации приложения. Узнать допустимые права можно по ссылке https://oauth.yandex.ru/client/<client_id>/info, указав вместо <client_id> идентификатор приложения.
Если пользователь уже авторизован и запрашиваются дополнительные права доступа, для которых пользователь еще не давал разрешения, то будет отображен экран запроса для новых доступов.
Шаг 2. Авторизация
-
Для запуска авторизации пользователя используйте метод:
YXLSdk.shared.authorize()
По умолчанию пользователь будет перенаправлен для авторизации в браузер (внешнее приложении).
Для версий iOS 13 и выше существует возможность авторизации при помощи
ASWebAuthenticationSession
. Для этого необходимо передать параметрparentController
, в котором будет показан контроллер для авторизации:YXLSdk.shared.authorize(withUid: 0, login: nil, phone: nil, firstName: nil, lastName: nil, customValues: nil, parentController: viewController)
Для того чтобы процесс авторизации проходил через приложение, до начала авторизации выставьте специальный флаг:
SwiftObjective-CUserDefaults.standard.setValue(true, forKey:"blockBrowser")
[[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"blockBrowser"];
-
Чтобы получать события с результатами авторизации, необходимо добавиться observer-ом:
YXLSdk.shared.add(observer: self)
-
При получении успешного результата авторизации будет вызван метод с параметром
result
, содержащим токены:func loginDidFinish(with result: YXLLoginResult) { // use result.token and result.jwt }
-
result.token
— OAuth-токен для использования в запросах к API сервисов Яндекса. -
result.jwt
— JSON Web Token.
-
-
В случае ошибки будет вызван:
func loginDidFinishWithError(_ error: Error) { // process error }
error
— ошибка с доменомkYXLErrorDomain
и кодомYXLErrorCode
.
Шаг 3. Получение информации о пользователе
Полученный токен можно обменять на информацию о пользователе.
Шаг 4. Выход
Для удаления локально сохраненных токенов используйте метод:
YXLSdk.shared.logout()