Flutter:尝试获取 Google 登录访问令牌时出现 PlatformException

问题描述 投票:0回答:2

我在 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):

我已尝试以下步骤来解决该问题:

  1. 将所有依赖项更新到最新版本
  2. 在 Firebase 控制台中检查并更新了 SHA-1 指纹
  3. 验证了 Firebase 配置文件 (google-services.json)
  4. 扑扑干净

尽管做出了这些努力,错误仍然存在。我正在使用 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;
  }

任何人都可以建议可能导致此问题的原因或如何进一步诊断和解决它吗?任何帮助将不胜感激。

android flutter dart
2个回答
0
投票
/// -- 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

0
投票

这对我有用

GoogleSignInAuthentication? googleSignInAuthentication =
    await (await GoogleSignIn(
    scopes: ["profile", "email"],
).signIn())
    ?.authentication;
© www.soinside.com 2019 - 2024. All rights reserved.