В настоящее время я пытаюсь реализовать вход в Google и аутентификацию в моем приложении. Я настроил проект и создал приложение в Firebase, поместил в приложение google-services. json, добавил необходимый плагин для build.gradle и установил ключ SHA-1 в firebase. Аутентификация электронной почты работает отлично, однако аутентификация Google вызывает проблемы.
Вся аутентификация выполняется из пакета «аутентификации», который я создал. Он содержит страницу аутентификации и выполняет все аутентификационные логи c. Запущенное приложение 'main' flutter импортирует этот пакет для использования. Файлы build.gradle этого «основного» проекта содержат дополнения для плагина служб Google (com.google.gms:google-services:4.3.2
). Как только основной проект запущен, он проверяет, вошел ли пользователь в данный момент. Если нет, он передает управление пакету аутентификации для отображения экрана аутентификации и обработки входа в систему.
Проблема возникает после выбора учетная запись Google, с которой я хочу войти. После выбора учетной записи диалоговое окно выбора учетной записи закрывается, и после этого ничего не происходит. Пользователь не аутентифицирован (подтверждено в Firebase), не выдается никаких исключений, и триггер-ловушка, окружающая все, не перехватывает никаких исключений. Кажется, что все выполнение функции останавливается. Я все еще могу перемещаться по приложению, но метод входа никогда не заканчивает выполнение.
Вы можете увидеть метод входа ниже. После выполнения строки final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
выполнение по какой-то причине не продолжается.
///
Future<String> _signUpWithGoogle() async {
bool isLoggedIn = await _firebaseAuth.isLoggedIn();
if (!isLoggedIn) {
googleSignIn = GoogleSignIn();
final GoogleSignInAccount googleSignInAccount =
await googleSignIn.signIn();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
final AuthResult authResult =
await _firebaseAuth.signInWithCredential(credential);
final FirebaseUser user = authResult.user;
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _firebaseAuth.getUser();
assert(user.uid == currentUser.uid);
return 'signInWithGoogle succeeded: $user';
} else {
FirebaseUser user = await _firebaseAuth.getUser();
return 'signInWithGoogle succeeded: $user';
}
}
Я бы подумал, что PlatformException должен вернуться, если что-то пошло не так, но в первый раз никакие исключения не возвращаются. Если я снова активирую метод входа в Google, я получаю исключение PlatformException, которое говорит:
PlatformException(error, Concurrent operations detected: signIn, signIn, null)
Ниже вы также можете найти зависимости для «основного» приложения и пакета «аутентификации»:
зависимости «основного» приложения
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
permission:
intl_translation:
flutter_svg:
sqflite:
path:
path_provider:
uuid:
qr_flutter:
vibration:
reflectable:
provider:
launcher_module:
path: ../modules/launcher_module
individual:
path: ../modules/individual
common:
path: ../packages/common
persistence:
path: ../packages/persistence
resources:
path: ../packages/resources
authentication:
path: ../packages/authentication
screen:
flutter_screen_scaler: ^0.0.1
page_indicator:
toast: ^0.1.5
rxbus: ^0.0.2
shared_preferences:
зависимости пакета «аутентификации»
dependencies:
flutter:
sdk: flutter
firebase_auth: ^0.15.3+1
google_sign_in: ^4.1.1
flutter_facebook_login:
shared_preferences:
common:
path: "../common"
toast: ^0.1.5
Я также попытался переместить все логи аутентификации c в основное приложение и удалил ссылку на пакет «аутентификация». Тем не менее, происходит то же самое.
Есть ли что-то, что я делаю неправильно или отсутствует во всем этом?