我正在尝试使用Firebase和Flutter实现简单的Facebook和Google登录按钮,但是Google版本的行为很奇怪。当我打印FirebaseAuth.instance.currentUser()
时,我会收到错误消息或以前的Facebook登录数据。
当我使用Facebook登录时,我的帐户does出现在Firebase上,但是Google登录似乎没有任何作用。
这是我在下面的代码中弄乱的东西,还是AndroidX与这些库的某些部分不兼容的问题?还有别的吗?
[另外,对于我是否必须将Project public-facing name
放置在我的项目中的某个地方以使与Firebase的集成正常工作(我必须做一些类似于设置Facebook登录按钮的事情,我也不太清楚。
我必须将logInWithReadPermissions
替换为signInWithCredential
,因为最新版本已更改了它们的API。我也尝试使用软件包的早期版本,但是遇到了很多错误(可能是由于AndroidX):
final _auth = FirebaseAuth.instance;
Future<FirebaseUser> _loginWithFacebook () async {
final facebookLogin = FacebookLogin();
final result = await facebookLogin.logInWithReadPermissions(['email']);
if (result.status == FacebookLoginStatus.loggedIn){
final FacebookAccessToken accessToken = result.accessToken;
AuthCredential credential = FacebookAuthProvider.getCredential(
accessToken: accessToken.token,
);
AuthResult signInResult = await _auth.signInWithCredential(credential);
FirebaseUser fbUser = signInResult.user;
return fbUser;
}
else{
return null;
}
}
再次,signInWithCredential
似乎是最新的API:
Future<FirebaseUser> _loginWithGoogle () async{
final GoogleSignIn _googleSignIn = GoogleSignIn();
GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
AuthResult signInResult = await _auth.signInWithCredential(credential);
final FirebaseUser user = signInResult.user;
print(user);
return user;
}
我已经在Android 9.0(Pie)模拟器上尝试过,但仍然无法正常工作。
显然,考虑到最新的API,我的身份验证代码对于Google和Facebook都是正确的。
但是我需要将SHA1 Fingerprint
集成到我的Firebase环境中,这是我不知道需要做的事情,因为我所遵循的所有教程都没有提到它,并且在启用Google登录后可以很容易地将其删除。 Firebase中的方法。
无论如何,这是获取SHA1 Fingerprint
所需完成的步骤:
cd C:\Program Files\Android\Android Studio\jre\bin
。SHA1
键:keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore
Firebase Console > Project settings > Add Key
并添加密钥。