【问题标题】:How to show the Extended Permission Dialog in FB using new Graph API?如何使用新的 Graph API 在 FB 中显示扩展权限对话框?
【发布时间】:2011-05-11 19:04:36
【问题描述】:

我之前使用旧的 rest api 在 Facebook 中显示权限对话框。 现在,有了新的图形 API,我能做什么? (我在 IFrame 应用中)。

我知道我可以作弊并在单独的窗口中弹出权限:

FB.login(function(response) {
                  if (response.session) {
                    if (response.perms) {
                      // user is logged in and granted some permissions.
                      // perms is a comma separated list of granted permissions
                    } else {
                      // user is logged in, but did not grant any permissions
                    }
                  } else {
                    // user is not logged in
                  }
                }, {perms:'offline_access'});

这样......再次调用 FB.login(假设我希望人们点击不同的按钮并触发扩展权限对话框)

但是,它看起来很丑,而且看起来不像一个对话框。

有没有办法生成对话框?我试图弄清楚 FB.ui 是否可以提供帮助,但关于此的信息很少。

此外,我认为“响应”回调永远不会执行。无论我点击“不允许”还是“允许”,都不会触发任何回调。任何想法?

hihih..任何人都可以帮助我吗?

【问题讨论】:

    标签: facebook authentication oauth


    【解决方案1】:

    您不需要为此使用 javascript 或任何 SDK,尽管这样会更容易。您只需要将用户重定向到这样的网址:

    https://graph.facebook.com/oauth/authorize?
        client_id=...&
        redirect_uri=http://www.example.com/callback&
        scope=user_photos,user_videos,publish_stream
    

    您应该始终使用 javascript 或链接将用户重定向到顶部窗口。

    window.top.location = <login_url> or <a href=<login_url> target="_top">Login</a>
    

    如果您使用的是 PHP SDK 或 C# SDK,您可以让 sdk 为您生成 url,但过程是相同的。

    另外,redirect_uri 不必与 iFrame 应用程序的 url 在同一个域中。这将导致 Facebook 将您的用户在 Facebook 之外重定向到您的网站,然后您应该将用户重定向回 facebook 内的应用程序。例如:

    1. 用户点击登录
    2. 用户进入 Facebook 登录页面
    3. 允许用户点击
    4. Facebook 将用户重定向到http://www.example.com/callback
    5. 您的应用程序将用户重定向到http://apps.facebook.com/myapp/loggedin

    【讨论】:

    • 我知道链接和php。但我的要求是使用 JS,并使其看起来与 FBML 对话框相同。谢谢你的回复。 :)
    • 在使用 Facebook Canvas 应用程序时重定向也不起作用。
    【解决方案2】:

    最后。从另一个网站找到解决方案。 第一的。在 FB.init( ... ) 之后;这样做:

    FB.provide("UIServer.Methods",
        { 'permissions.request' : { size : {width: 575, height: 300}, 
        url: 'connect/uiserver.php',
        transform : FB.UIServer.genericTransform }
        } );
    

    然后,当您需要调用权限对话框时,请执行以下操作:

    FB.ui({method: "permissions.request", "perms": 'email,offline_access'}, 
        callBack);
    

    我花了很长时间才通过查看 FB 对象并发现有 UIServer 与 permissions.request 然后从那里,我继续搜索并找到这个解决方案。并且 FB.ui 对此一无所知.. 并且 FB.provide 没有记录。谢谢脸书。

    【讨论】:

    • 在撰写本文时,如上所述的 FB.provide() + FB.ui() 什么都不做 - 这并不奇怪,因为它利用了未记录的功能。
    • Facebook 的许多功能都没有记录。感谢上帝。
    【解决方案3】:

    其中一个答案建议您调用FB.provide(),然后调用FB.ui() 以弹出扩展权限对话框。该解决方案对我不起作用,但现在有一个记录在案的解决方案。 Just call FB.login() 获取您需要的权限。

    FB.login(function(response){
        if (response.authResponse) {
            alert('success!');
        } else {
            alert('fail!');
        }
        },{scope: 'email'});
    

    更好的是,你可以ask for extended permissions with the login button

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多