用于 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:如果您已经登录过一次,则不要期待登录回调。
我们正在开发一款应该在 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:如果您已经登录过一次,则不要期待登录回调。