链接到firebase的简单身份验证代码。该代码在移动iOS Safari和桌面浏览器上运行良好。Android Chrome上的登录失败(暂停(。
简单代码片段:
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'));
}
当谷歌登录弹出标签在安卓系统上打开时,Flutter似乎暂停了。一旦谷歌标签验证并自动关闭,flutter标签就会恢复,但什么也不做。在Android Chrome上,控制台输出仅显示"AAA"。如果我在第一次尝试失败后再次尝试登录,同样的输出,只有"AAA",没有谷歌登录弹出窗口。
控制台也没有打印任何错误。
此代码在桌面浏览器和iOS Safari浏览器上运行良好。
安卓是否在后台chrome选项卡中暂停应用程序?
我能够让它工作起来。事实证明,有两个位置你必须通知谷歌关于网站Uri的信息,身份验证可以从哪里来,成功的身份验证可以重定向到哪里。一个位置在谷歌控制台中,另一个位置处于firebase控制台身份验证下。
然而,我无法让google_sign_in_web包继续工作。我使用了firebase_auth包,并在auth请求中设置了谷歌提供程序。这很管用。以下是使用firebase_auth 调整后的工作代码片段
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...
});
}
//...
}