检查扩展权限与新的Facebook的JavaScript的SDK

有没有办法检查我的应用程序(canvas),如果用户有扩展权限(例如“stream.publish”)?

我只能find老sdk的解决scheme。

谢谢!

2011年底更新:

FB.api('/me/permissions', function (response) { console.log(response); } ); 

控制台输出:

 { data: [ { create_note: 1, installed: 1, photo_upload: 1, publish_stream: 1, share_item: 1, status_update: 1, video_upload: 1, } ] } 

此解决scheme已于2011年底弃用,请使用上面标记为接受的答案

自己find了解决办法

 function check_ext_perm(session,callback) { var query = FB.Data.query('select publish_stream,read_stream from permissions where uid={0}', session["uid"]); query.wait(function(rows) { if(rows[0].publish_stream == 1 && rows[0].read_stream == 1) { callback(true); } else { callback(false); } }); }; 

这将检查publish_streamread_stream

例如使用:

 check_ext_perm(response.session, function(isworking) { if(isworking) { // post something to wall } else { // ask for login } }); 
 FB.ui({ method: 'permissions.request', perms: 'user_website', display: 'popup' },function(response) { alert(response.toSource()); if (response && response.perms) { alert('Permissions granted: '+response.perms); } else if (!response.perms){ alert('User did not authorize permission(s).'); } }); 

广义select的function,

 function check_permissions (permissions, uid, cb) { FB.Data .query('select {0} from permissions where uid={1}', permissions, uid) .wait(function (res) { if (!res || res.length < 1) return cb(false); var row = res[0]; var aperm = permissions.split(','); for (var i = 0; i < aperm.length; i++) { if (row[aperm[i]] != 1) return cb(false); } return cb(true); }); } 

如果用户具有所有权限,则调用callback,否则使用false调用callback。

在这里使用FB.Data.query的回应应该避免这一点,因为Facebook已经完全弃用了FB.Data.queryFB.api (/ me / permissions …)解决scheme似乎是最好的。

您也可以从FB.login获取权限:

 FB.login(function(response) { // handle the response }, { scope: 'publish_actions', return_scopes: true }); 

请参阅https://developers.facebook.com/docs/reference/javascript/FB.login/v2.1#options