#firebase #google-signin #flutter-web
#firebase #google-вход #флаттер-веб
Вопрос:
Возможно, это очень специфический случай, но я заметил, что мое веб-приложение не работает на определенных мобильных устройствах через веб-браузер. Код отлично работает в собственных мобильных приложениях и в браузерах для настольных компьютеров, но некоторые мобильные браузеры работают не так, как ожидалось.
Обычно, когда кто-то пытается войти в систему, открывается всплывающее окно, в котором пользователь либо выбирает свою учетную запись, либо входит в систему автоматически, но что я заметил на некоторых мобильных устройствах, так это то, что процесс всплывающего окна / входа в систему никогда не происходит. Есть ли способ заставить веб-приложение Flutter открывать вход в Google через перенаправление вместо всплывающего окна? Или, может быть, какое-то другое решение, о котором я не знаю?
Вот мой код, который я использую:
Widget _googleSignInButton() {
return FlatButton(
minWidth: 300,
color: Colors.white60,
onPressed: () async {
setState(() {
isLoading = true;
});
await signInWithGoogle().then((user) {
if (user != null) {
Navigator.of(context).pop();
Navigator.pushNamed(context, DashboardRoute);
}
}).catchError((onError) {
setState(() {
isLoading = false;
});
});
},...
Future<String> signInWithGoogle() async {
final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
final UserCredential authResult =
await _auth.signInWithCredential(credential);
final User user = authResult.user;
// Checking if email and name is null
assert(user.email != null);
assert(user.displayName != null);
assert(user.photoURL != null);
userID = user.uid;
newUser = authResult.additionalUserInfo.isNewUser;
if (newUser) {
userData['name'] = user.displayName;
userData['email'] = user.email;
userData['photo'] = 'assets/images/userIcon.png';
await createUser();
} else {
await getUserData();
}
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final User currentUser = _auth.currentUser;
assert(user.uid == currentUser.uid);
return 'signInWithGoogle succeeded: $user';
}
Ответ №1:
Проблема возникает из-за отключения сторонних файлов cookie, что не позволяет методу .signin() открывать новое окно. Это вызывает исключение PlatformException и, насколько я знаю, не может быть обнаружено dart