Flutter 提供的身份验证凭据格式不正确或已过期。-Fatter Facebook登录

Flutter 提供的身份验证凭据格式不正确或已过期。-Fatter Facebook登录,flutter,dart,firebase-realtime-database,facebook-authentication,Flutter,Dart,Firebase Realtime Database,Facebook Authentication,我正在尝试使用Firebase实时数据库在我的Flatter应用程序中实现FacebookLogin。我可以登录到我的应用程序。但是,当我尝试使用FB的auth令牌从数据库中获取某些内容时,会出现以下错误: E/flutter (30549): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: [firebase_auth/invalid-credential] The supplied auth credent

我正在尝试使用Firebase实时数据库在我的Flatter应用程序中实现FacebookLogin。我可以登录到我的应用程序。但是,当我尝试使用FB的auth令牌从数据库中获取某些内容时,会出现以下错误:

 E/flutter (30549): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: [firebase_auth/invalid-credential] The supplied auth credential is malformed or has expired. [ Unsuccessful debug_token response from Facebook: {"error":{"message":"Invalid OAuth access token signature.","type":"OAuthException","code":190,"fbtrace_id":"AwuVQUt6tCG1go"}} ]
以下是我的facebook登录代码:

Future signInFB() async {
      var facebookLogin = FacebookLogin();
    var facebookLoginResult =
        await facebookLogin.logIn(['email']);
     switch (facebookLoginResult.status) {
      case FacebookLoginStatus.error:
        break;
      case FacebookLoginStatus.cancelledByUser:
        print("CancelledByUser");           
        break;
      case FacebookLoginStatus.loggedIn:
        print("LoggedIn");
        var graphResponse = await http.get(
            'https://graph.facebook.com/v2.12/me?fields=name,first_name,last_name,email,picture.height(200)&access_token=${facebookLoginResult
                .accessToken.token}');
          fbToken = facebookLoginResult.accessToken.token.toString();
    var profile = json.decode(graphResponse.body);
    final FirebaseAuth _auth = FirebaseAuth.instance;
    print('Token is ' + fbToken); 
    final OAuthCredential credential =  FacebookAuthProvider.credential(fbToken); 
    final User user = (await _auth.signInWithCredential(credential)).user;
    assert(!user.isAnonymous);
    assert(await user.getIdToken() != null);
     _token = await user.getIdToken();
     _userId = user.uid;
    print('Profile is ' + profile.toString());
    break;
  }
  }

首先,重新检查以确保Facebook和Firebase之间的捆绑包id/应用程序id相同。错误的捆绑包/应用程序id可能导致此问题

其次,检查您从facebook获得的API密钥和密码是否配置良好且匹配


最后,如果一切顺利,在:Facebook for developers->Settings->Advanced中,请关闭此选项“客户端是否嵌入应用程序机密?”

我认为您在Facebook应用程序中的密钥哈希格式不正确。Facebook应用程序需要Base64密钥哈希才能工作。 您必须将您的SHA1指纹从android密钥库编码到Base64

要做到这一点,只需在浏览器控制台中运行这行javascript代码

btoa('your SHA1 key here'.split(':').map(hc => String.fromCharCode(parseInt(hc, 16))).join(''))
将您收到的输出粘贴到facebook应用程序的“设置”>“基本”面板中的键哈希中