用于 Facebook 的 Unity webGL - 无法在登录结果中找到参数 'grantedScopes'

Unity webGL for Facebook - Failed to find parameter 'grantedScopes' in login result

我们正在开发一款应该在 Facebook canvas(WebGL 构建)上提供的游戏。我们使用 Unity 5.2 和 Facebook SDK 7.2.0。 在最近的 SDK 发布之后,我们在 web 和 webGL 构建中都遇到了登录问题。 游戏应该让您从一开始就通过 FB.LogInWithReadPermissions(r_permissions, AuthCallback); 登录,但是当 ILoginResult(登录请求的结果)正在寻找 "grantedScopes" 参数时回调卡住了。

void AuthCallback(ILoginResult r)
    {
        if (!string.IsNullOrEmpty(r.Error))
        {
            Debug.LogError("OnFBConnected: failed");
            return;
        }

        if (FB.IsLoggedIn)
        {
            OnFBConnected();
        }
        else
        {
            Debug.LogWarning("User cancelled facebook login.");
        }
    }

我们实现的代码似乎是正确的,所以问题可能出在 SDK 的脚本中(特别是 LoginResult.cs)。我们已经检查了您在 fb canvas 的回调中收到的 Json 文件,它没有 grantedScopes 字段。

这是统一控制台的警告日志:

Failed to find parameter 'grantedScopes' in login result:
    UnityEngine.Debug:LogWarning(Object) 
    Facebook.Unity.CustomLogger:Warn(String) 
    Facebook.Unity.FacebookLogger:Warn(String)
    Facebook.Unity.FacebookLogger:Warn(String, String[]) 
    Facebook.Unity.LoginResult:ParsePermissionFromResult(IDictionary`2)
    Facebook.Unity.LoginResult:ParseAccessTokenFromResult(IDictionary`2)
    Facebook.Unity.LoginResult:.ctor(String)
    Facebook.Unity.Canvas.CanvasFacebook:OnLoginComplete(String)
    Facebook.Unity.FacebookBase:OnInitComplete(String)
    Facebook.Unity.FacebookGameObject:OnInitComplete(String)
    Facebook.Unity.Canvas.JsBridge:OnInitComplete(String)

以前有人遇到过这个问题吗?

我正在与 Mastocobra 合作解决这个问题,我们解决了这个问题:

如果没有要授予的新权限,Facebook 将不会 return 授予的范围。用户第一次登录授权后,会有一个已经预留可用权限的AccessToken,所以不用再次请求权限或者等待回调,只需要检查用户是否已经登录并使用已经存在的 AccessToken 中的信息。

代码的整体流程是这样的:

void Start(){
    if(!FB.IsInitialized){
        FB.Init(OnInit)
    } else {
        OnInit()
    }
}

void OnInit(){
    if(!FB.IsInitialized) Debug.LogError("Failed to Initialize");

    if(!FB.IsLoggedIn){
        FB.LogInWithReadPermissions(mPermissions, AuthCallback);
    } else {
        OnFBConnected();
    }
}

void AuthCallback(ILoginResult r)
{
    if (!string.IsNullOrEmpty(r.Error))
    {
        Debug.LogError("OnFBConnected: failed");
        return;
    }

    if (FB.IsLoggedIn)
    {
        OnFBConnected();
    }
    else
    {
        Debug.LogWarning("User cancelled facebook login.");
    }
}

void OnFBConnected(){
    //Do whatever you need with the AccessToken you have
}

在过渡到支持 Unity 5 的新 Facebook SDK 之前,任何时候您尝试登录时,它都会 return 您获得所有可用权限,即使您之前已经登录过。对于最近 3 个版本中的至少一个,Android 版本似乎是这样,所以当我们试图查明问题时,它肯定让我们放弃了游戏。

TL;DR:如果您已经登录过一次,则不要期待登录回调。