如何使用新的Graph API在FB中显示扩展权限对话框?

时间:2010-11-18 02:10:55

标签: facebook authentication oauth

我之前使用旧的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(假设我希望人们点击不同的按钮并触发扩展的permisison对话框)

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

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

此外,我认为'响应'回调不会执行。我没有点击“不允许”或“允许”,也不会触发任何回叫。任何的想法?

hihih。任何人都可以帮助我?

3 个答案:

答案 0 :(得分:21)

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

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

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

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

我花了很长时间才弄清楚,看看FB对象并找出UIServer with permissions.request然后从那里,我一直在寻找并找到这个解决方案。和FB.ui没有谈论它..并且没有记录FB.provide。谢谢你的脸书。

答案 1 :(得分:3)

您不需要使用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为您生成网址,但过程是相同的。

此外,并非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

答案 2 :(得分:1)

其中一个答案表明,您可以调用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