我在 Flutter 应用程序中遇到 Google 登录问题。尝试使用 Google 登录时,我收到 PlatformException。这是错误日志:
W/Auth (10169): [GoogleAuthUtil] [GoogleAuthUtil] error status:UNKNOWN with method:getTokenWithDetails
...
I/flutter (10169): error: PlatformException(exception, ERROR, null, null)
E/flutter (10169): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(exception, ERROR, null, null)
E/flutter (10169): #0 GoogleSignInApi.getAccessToken (package:google_sign_in_android/src/messages.g.dart:250:7)
E/flutter (10169): <asynchronous suspension>
E/flutter (10169): #1 GoogleSignInAndroid.getTokens.<anonymous closure> (package:google_sign_in_android/google_sign_in_android.dart:68:15)
E/flutter (10169): <asynchronous suspension>
E/flutter (10169): #2 GoogleSignInAccount.authentication (package:google_sign_in/google_sign_in.dart:95:9)
E/flutter (10169): <asynchronous suspension>
E/flutter (10169): #3 GoogleLoginProvider.getAuthCredential (package:firebase_manager/src/auth/login/providers/google_login_provider.dart:15:11)
E/flutter (10169): <asynchronous suspension>
E/flutter (10169): #4 LoginTool.loginByGoogle (package:firebase_manager/src/auth/login/login_tool.dart:36:37)
E/flutter (10169): <asynchronous suspension>
E/flutter (10169): #5 StatePage.build.<anonymous closure> (package:saiwai/ui/loginpage/login_page.dart:80:42)
E/flutter (10169): <asynchronous suspension>
E/flutter (10169):
我已尝试以下步骤来解决该问题:
尽管做出了这些努力,错误仍然存在。我正在使用 Flutter 的最新稳定版本并在 Android 设备上进行测试。
这是我发生错误的代码片段:
Future<OAuthCredential?> getAuthCredential() async {
// Trigger the authentication flow
final GoogleSignInAccount? googleUser = await googleSignIn.signIn();
if (googleUser != null) {
// Obtain the auth details from the request
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
// Create a new credential
return GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
}
return null;
}
任何人都可以建议可能导致此问题的原因或如何进一步诊断和解决它吗?任何帮助将不胜感激。
/// -- Sign In with Google
static Future<void> signInWithGoogle(BuildContext context) async {
try {
final connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.none) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Check your internet connection and try again.')),
);
return;
}
await googleSignIn.signOut();
final GoogleSignInAccount? googleUser = await googleSignIn.signIn();
log('Google User: ${googleUser?.email}');
if (googleUser == null) {
log('Google Sign-In canceled');
return;
}
final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
log('Google Authentication: ${googleAuth.accessToken}, ${googleAuth.idToken}');
final AuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
log('Google Credentials: ${credential.providerId}');
final UserCredential userCredential = await auth.signInWithCredential(credential);
final User? user = userCredential.user;
if (user != null) {
await addUserToFirestore(user);
if (context.mounted) {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const HomeScreen()),
);
}
}
} catch (e) {
if (e is FirebaseAuthException) {
log('FirebaseAuthException: ${e.code} - ${e.message}');
} else if (e is PlatformException) {
log('PlatformException: ${e.code} - ${e.message} - ${e.details}');
} else {
log('Error during Google Sign-In: $e');
}
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Login error: ${e.toString()}')),
);
}
}
}
similar problem, yesterday this code still worked, today it doesn't, in all my applications that I haven't updated for several months with this code they show an error:
[log] PlatformException: exception - ERROR - null
这对我有用
GoogleSignInAuthentication? googleSignInAuthentication =
await (await GoogleSignIn(
scopes: ["profile", "email"],
).signIn())
?.authentication;