首页 > 解决方案 > Firebase 身份验证 Unity3d。提供的身份验证凭据格式错误或已过期

问题描述

我正在尝试在 Unity3d 应用程序中使用 Facebook 提供程序实现 Firebase 身份验证。

Unity 版本 2020.2.0f1 Firebase 7.0.2 Facebook 8.1.1

这是我的代码。

private void Awake()
    {
        if (!FB.IsInitialized)
        {
            FB.Init(InitCallback, OnApplicationPause);
        }
        else
        {
            FB.ActivateApp();
        }
    }


    public void FBLogin()
    {
        var permissions = new List<string> {
        "public_profile",
        "gaming_profile",
        "email",
    };
        FB.LogInWithReadPermissions(permissions, AuthCallback);
    }

    private void AuthCallback(ILoginResult result)
    {
        if (result.Error != null)
        {
            Debug.LogFormat("Facebook SDK error: {0}", result.Error);
        }
        else if (FB.IsLoggedIn)
        {
            var aToken = AccessToken.CurrentAccessToken;

            foreach (string permission in aToken.Permissions)
            {
                Debug.Log(permission);
            }
            Debug.Log(" " + aToken.TokenString);
            Services.GetManager<FirebaseAuthService>().SugnUpFB(aToken.TokenString);

        }
        else
        {
            Debug.Log("Facebook login was cancelled.");
        }
    }


    private void InitCallback()
    {
        if (FB.IsInitialized)
        {
            FB.ActivateApp();
        }
        else
        {
            Debug.Log("Failed FB SDK init.");
        }
    }


    private void OnApplicationPause(bool pauseStatus)
    {
        if (!pauseStatus)
        {
            if (FB.IsInitialized)
            {
                FB.ActivateApp();
            }
            else
            {
                FB.Init(() => {
                    FB.ActivateApp();
                });
            }
        }
    }

Firebase 代码

public void SugnUpFB(string token)
    {
        Debug.Log("token " + token);

        Credential credential = FacebookAuthProvider.GetCredential(token);
        
        auth.SignInWithCredentialAsync(credential).ContinueWith(task =>
          {
              if (task.IsCanceled)
              {
                  Debug.LogError("SignInWithCredentialAsync was canceled.");
                  return;
              }
              if (task.IsFaulted)
              {
                  Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
                  return;
              }

              FirebaseUser newUser = task.Result;
              Debug.LogFormat("User signed in successfully: {0} ({1})",
                  newUser.DisplayName, newUser.UserId);
          });
    }

记录https://prnt.sc/wga2rr

我收到此错误https://prnt.sc/wg9xrr

我的 fb 设置https://prnt.sc/wga527

凭据仅包含提供者字段。我认为这是一个问题https://prnt.sc/wg9zxv 我该如何解决这个问题?谢谢!

标签: firebasefacebookunity3d

解决方案


如果您使用的是 Graph API,那么其无意义的 Firebase Oauth 登录支持正常的 Facebook 登录,但不支持单独的游戏登录, 原因


推荐阅读