Вход в Flutter Web Google не работает в мобильных браузерах

#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