0

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

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

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

谢谢你。

4

1 回答 1

1

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

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 格式中删除“已取消”参数。

于 2014-04-09T13:13:19.493 回答