我之前使用旧的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。任何人都可以帮助我?
答案 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内的应用程序。例如:
答案 2 :(得分:1)
其中一个答案表明,您可以调用FB.provide()
然后FB.ui()
来弹出扩展权限对话框。该解决方案对我不起作用,但现在有一个记录在案的解决方案。 Just call FB.login()
获取您需要的权限。
FB.login(function(response){
if (response.authResponse) {
alert('success!');
} else {
alert('fail!');
}
},{scope: 'email'});