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

Facebook 如何使用新的图形API在FB中显示扩展权限对话框?,facebook,authentication,oauth,Facebook,Authentication,Oauth,我以前在Facebook上使用旧的RESTAPI显示权限对话框。 现在,有了新的graph API,我能做什么?(我在IFrame应用程序中) 我知道我可以作弊并在单独的窗口中弹出权限: FB.login(function(response) { if (response.session) { if (response.perms) { // user is logged in

我以前在Facebook上使用旧的RESTAPI显示权限对话框。 现在,有了新的graph 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是否有帮助,但这方面的信息很少

此外,我认为“response”回调永远不会执行。我单击“不允许”或“允许”都不会触发任何回拨。有什么想法吗


嗨……有人能帮我吗?

你不需要使用javascript或任何SDK来实现这一点,尽管这会让它变得更简单。您只需将用户重定向到如下url:

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>
window.top.location=或
如果您使用的是PHP SDK或C#SDK,则可以让SDK为您生成url,但过程是相同的

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

  • 用户单击登录
  • 用户进入Facebook登录页面
  • 用户点击允许
  • Facebook将用户重定向到
  • 你的应用程序将用户重定向到

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

    FB.provide("UIServer.Methods",
        { 'permissions.request' : { size : {width: 575, height: 300}, 
        url: 'connect/uiserver.php',
        transform : FB.UIServer.genericTransform }
        } );
    
    然后,无论何时需要调用Permission对话框,请执行以下操作:

    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。然后,我继续搜索并找到这个解决方案。而FB.ui对此只字不提。。而FB.provide没有记录。谢谢facebook

    其中一个答案建议使用一种黑客方法,即调用
    FB.provide()
    ,然后调用
    FB.ui()
    ,弹出扩展权限对话框。这个解决方案对我不起作用,但现在有一个文档化的解决方案可以。以获取所需的权限

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

    更好的是,你可以。

    我知道链接和php。但我的要求是使用JS,并使其看起来与FBML对话框相同。感谢您的回复(如有):在使用Facebook画布应用程序时,重定向也不起作用。在撰写本文时,如上所述的FB.provide()+FB.ui()没有任何作用-这并不奇怪,因为它利用了未记录的功能。Facebook的许多功能都是未记录的。感谢上帝。