【问题标题】:How do I pop up a dialog from Facebook to request the user to "allow" for open graph?如何从 Facebook 弹出一个对话框以请求用户“允许”打开图形?
【发布时间】:2012-04-07 16:49:23
【问题描述】:

在我的 Facebook 应用程序中,我请求 3 个范围:email、publish_stream、publish_action

我正在使用 FB.login 功能。弹出这两个步骤。

当用户在第一步点击“取消”时,FB.login 会显示“status: unknown”作为响应对象。

但是,当用户在第二步中单击取消时,FB.login 将其显示为“status:connected”并将其视为用户接受了所有内容。

我最近了解到,您可以使用

检查用户是否允许第二步
FB.api('/me/permissions', function (response) {
    console.log(response);
} );

我的问题是......知道用户拒绝了打开图表步骤,我怎样才能再次弹出该对话框?

【问题讨论】:

    标签: facebook facebook-graph-api


    【解决方案1】:

    您是对的,Auth Dialog 的第二阶段是可选的,用户不必接受您要求的所有扩展权限或其中任何一个,正如它在 Permissions 部分所述身份验证对话框文档:

    用户将能够删除任何这些权限,或跳过此 完全阶段,这会导致拒绝每个扩展权限 你已经要求了。您的应用应该能够处理任何撤销 已安装用户的扩展权限子集。

    我认为最好的方法是让您的应用使用用户接受的内容进行管理,但如果您HAVE在可选阶段拥有权限(扩展权限),那么这就是你可以这样做:

    FB.init({
        ....
    });
    
    var requiredPermissions = ["email", "publish_stream", "publish_action"];
    
    function checkPermissions(response) {
        var ok = true;
    
        if (!response.data || response.data.length != 1)
            ok = false;
        else for (var perm in requiredPermissions) {
            if (!(perm in response.data[0])) {
                ok = false;
                break;
            }
        }
    
        if (!ok)
            login();
        else
            console.log("Hey there user who granted all the required permissions");
    }
    
    function loginCallback(response) {
        if (response.authResponse) {
            FB.api("/me/permissions", checkPermissions);
        }
        else {
            console.log("User cancelled login or did not fully authorize.");
        }
    }
    
    functoin login() {
        FB.login(loginCallback, { scope: requiredPermissions.join(",") });
    }
    

    我还没有测试过这段代码,不过它是朝着正确方向发展的。 此外,此代码将永远持续下去,直到用户接受所有权限或只是放弃,您应该以某种方式让他知道您需要这些权限并再次发送他进行身份验证对话框。


    编辑

    我总是忘记在我的答案中包含这一点: 调用 FB.login 会打开一个新的弹出窗口,浏览器通常会阻止它,除非它是用户操作的结果,正如文档中所说:

    调用 FB.login 会导致 JS SDK 尝试打开一个弹出窗口 窗户。因此,这个方法应该只在用户点击后调用 事件,否则弹出窗口将被大多数浏览器阻止。

    上面还写着:

    如果您需要从已经拥有的用户那里收集更多权限 通过您的应用程序进行身份验证,再次调用 FB.login 您希望用户授予的权限。在身份验证对话框中, 用户只会被要求提供他们还没有的权限 授予。

    这意味着这是一种做你想做的事的方式,弹出窗口可能没有打开,因为它被你的浏览器阻止了。 您需要修改我给您的代码,以便每次调用 login 函数时都是在用户与您的页面交互之后,即:显示一条消息说“应用程序需要这个和那个权限,请单击此按钮继续”,然后将调用 login 函数。

    【讨论】:

    • 如果用户拒绝第二步,FB.login 将不再弹出对话框。
    • 这听起来不太可能,我修改了我认为错误的答案。
    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    相关资源
    最近更新 更多