Плагин для интеграции Yandex Login SDK (Авторизация через Яндекс) в приложения на Flutter. Поддерживает Android (нативный SDK) и iOS (через Swift Package Manager).
Для начала зарегистрируйте ваше приложение в Яндекс OAuth и получите Client ID.
- В файл
android/app/build.gradleдобавьтеmanifestPlaceholdersс вашим Client ID внутри блокаdefaultConfig:
android {
defaultConfig {
// ...
manifestPlaceholders += [YANDEX_CLIENT_ID: "ВАШ_CLIENT_ID"]
}
}Important
На iOS схема в CFBundleURLSchemes обязательно должна начинаться с префикса yx перед вашим ID клиента!
- В
Info.plistвашего Runner добавьте настройки:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>YandexLoginSDK</string>
<key>CFBundleURLSchemes</key>
<array>
<string>yxВАШ_CLIENT_ID</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>primaryyandexloginsdk</string>
<string>secondaryyandexloginsdk</string>
<string>yandexauth</string>
<string>yandexauth2</string>
<string>yandexauth4</string>
</array>
<key>YAClientId</key>
<string>ВАШ_CLIENT_ID</string>Note
Плагин автоматически перехватывает URL-адреса через систему делегатов Flutter. Никаких ручных правок в AppDelegate.swift или SceneDelegate.swift делать не нужно.
- Дополнительно для универсальных ссылок (Universal Links):
В настройках Xcode добавьте Capability: Associated Domains и впишите домен (заменив
ВАШ_CLIENT_ID):
applinks:yxВАШ_CLIENT_ID.oauth.yandex.ru
Вызовите метод signIn() для запуска процесса авторизации. Метод возвращает
Future<YandexAuthResult> с токеном при успехе либо выбрасывает типизированное
исключение при неудаче.
import 'package:yandex_auth/yandex_auth.dart';
final _yandexAuth = YandexAuth();
Future<void> loginWithYandex() async {
try {
final result = await _yandexAuth.signIn();
final String token = result.token;
final int? expiresIn = result.expiresIn; // На iOS может быть null
print('Токен успешно получен: $token, истекает через: $expiresIn сек.');
} on YandexAuthCancelledException {
// Пользователь отменил авторизацию — штатная ситуация
print('Авторизация отменена пользователем');
} on YandexAuthFailedException catch (e) {
// Сбой активации SDK, ошибка сети, нет Activity и т.п.
print('Ошибка (${e.code.value}): ${e.message}');
if (e.details != null) print('Детали: ${e.details}');
}
}Плагин выбрасывает исключения из семейства YandexAuthException:
| Исключение | Когда |
|---|---|
YandexAuthCancelledException |
Пользователь закрыл экран входа / нажал «Отмена» |
YandexAuthFailedException |
Прочие ошибки (см. code ниже) |
YandexAuthFailedException.code принимает значения YandexAuthErrorCode:
| Код | Значение |
|---|---|
activation |
Не задан/пуст YAClientId или не удалось активировать SDK |
concurrent |
Повторный вызов signIn() поверх уже идущего |
no_activity |
Activity (Android) / root view controller (iOS) недоступны |
sdk_error |
Ошибка Yandex Login SDK (сеть, невалидный config и т.п.) |
cancelled |
Отмена пользователем (только в виде YandexAuthCancelledException) |
unknown |
Неизвестная/нестандартная ошибка |
Коды стандартизованы и совпадают на Android и iOS.