Unity Facebook SDK FB.Login无法正常运行

时间:2013-10-17 04:33:25

标签: c# facebook unity3d facebook-login facebook-unity-sdk

当从一个画布facebook网页应用程序中的unity facebook插件(我已经尝试过4.2.4和4.3.3)调用FB.Login时,当用户在facebook提示时点击取消时,永远不会调用回调函数用于接受应用权限的对话框。

Init工作正常,sdk加载,然后我用facebook委托调用FB.Login,如果用户取消,则没有回调。如果您将其构建为webapp并在Facebook中创建指向它的画布应用程序,则可以在sdk中提供的示例中看到此行为。

有什么建议吗?我需要回调来继续我的应用程序流程。

谢谢。

1 个答案:

答案 0 :(得分:1)

这个问题是由于AbstractFacebook简单地忽略了从Facebook API收到的整个FBResult参数,包括当用户拒绝授予应用程序访问权限时的“已取消”参数。

AbstractFacebook中的反编译OnAuthResponse方法如下所示:

protected void OnAuthResponse(FBResult result)
{
    Dictionary<string, object> dictionary = new Dictionary<string, object>();
    dictionary["is_logged_in"] = (object) (bool) (this.IsLoggedIn ? 1 : 0);
    dictionary["user_id"] = (object) this.UserId;
    dictionary["access_token"] = (object) this.AccessToken;
    dictionary["access_token_expires_at"] = (object) this.AccessTokenExpiresAt;

    FBResult result1 = new FBResult(Json.Serialize((object) dictionary), result.Error);
    using (List<FacebookDelegate>.Enumerator enumerator = this.authDelegates.GetEnumerator())
    {
        while (enumerator.MoveNext())
        {
            FacebookDelegate current = enumerator.Current;
            if (current != null)
            current(result1);
        }
    }
    this.authDelegates.Clear();
}

如果您可以以某种方式覆盖此行为,也许您可​​以删除存储在result.message中的“已取消”参数形式JSON。