Flutter Web:google_sign_in_web:适用于桌面和 iOS。在 Android Chrome 上失败
Posted
技术标签:
【中文标题】Flutter Web:google_sign_in_web:适用于桌面和 iOS。在 Android Chrome 上失败【英文标题】:Flutter Web: google_sign_in_web: Works on desktop and iOS. Fails on Android Chrome 【发布时间】:2021-01-04 20:58:34 【问题描述】:链接到 Firebase 的简单身份验证代码。该代码在移动 ios Safari 和桌面浏览器上运行良好。在 android Chrome 上登录失败(停止)。
简单代码sn-p:
final GoogleSignIn googleSignIn = GoogleSignIn();
Future loginGoogle() async
try
Print('AAA');
await googleSignIn.signIn();
print('BBB');
catch (error)
print(error);
//Listener initialized at creation of this class.
googleSignInListener()
return googleSignIn.onCurrentUserChanged.listen((account) async
handleSignIn(account);
, onError: (err) => print('Error signing in: $err'));
当谷歌登录弹出选项卡在 Android 上打开时,Flutter 似乎停止了。一旦 google 选项卡通过身份验证并自动关闭,flutter 选项卡就会恢复但什么也不做。在 Android Chrome 上,控制台输出仅显示“AAA”。如果我在第一次尝试失败后再次尝试登录,则输出相同,只有“AAA”且没有 google 登录弹出窗口。
控制台也不会打印任何错误。
此代码在桌面浏览器和 iOS Safari 浏览器上运行良好。
Android 是否会在后台 Chrome 选项卡中停止应用程序?
【问题讨论】:
【参考方案1】:我能够得到这个工作。事实证明,您必须在两个位置告知 google 网站 Uri 的身份验证来自哪里以及成功的身份验证可以重定向到哪里。一个位置在 google 控制台中,另一个位置在 firebase 控制台身份验证下。
但是,我无法让 google_sign_in_web 包继续工作。我使用了 firebase_auth 包并在身份验证请求中设置了谷歌提供程序。这很好用。这是使用 firebase_auth 调整和工作的代码的 sn-p
import 'package:firebase_auth/firebase_auth.dart' as FA;
//...
class Auth with ChangeNotifier
final FA.FirebaseAuth firebaseAuth = FA.FirebaseAuth.instance;
FA.GoogleAuthProvider googleAuthProvider = FA.GoogleAuthProvider();
StreamSubscription<FA.User> authListener;
//...
Auth()
authListener = signInListener();
//...
Future loginGoogle() async
await firebaseAuth.setPersistence(FA.Persistence.LOCAL);
auth = await firebaseAuth.signInWithPopup(googleAuthProvider);
signInListener()
return firebaseAuth.authStateChanges().listen((_user) async
//Auth state changed...
);
//...
【讨论】:
以上是关于Flutter Web:google_sign_in_web:适用于桌面和 iOS。在 Android Chrome 上失败的主要内容,如果未能解决你的问题,请参考以下文章