我的网站允许用户通过Facebook Connect登录,并允许他们更新我们网站的状态字段。我想在状态更新字段下方添加一个复选框,允许他们将此更新发布到他们的Facebook个人资料中,如果他们愿意的话。为了做到这一点,我需要用户授予我们的应用程序权限,以便通过使用JS函数FB.Connect.showPermissionDialog http://developers.facebook.com/docs/?u=facebook.jslib.FB.Connect.showPermissionDialog提示用户获取'publish_stream'权限来支持他们的Facebook个人资料。
我遇到的问题是弄清楚我是否需要提示用户这样做。基本上我想要的用户体验是,当用户第一次检查此框时,我希望他们被提示授予此权限。一旦获得批准,如果他们再次检查该框,我将来不需要提示他们。我似乎无法弄清楚在该复选框的onclick操作中包含哪些JS将检查用户是否已授予此权限,如果没有则提示它们,否则什么都不做。此外,在检查框并授予权限后,我不想做任何事情(没有页面重新加载),但如果他们拒绝授予权限的请求,我希望取消选中该复选框。我想我可能需要使用FB.ApiClient.users_hasAppPermission JS函数http://developers.facebook.com/docs/?u=facebook.jslib.FB.ApiClient.users_hasAppPermission,但我仍然对这看起来很困惑。伪造的代码是:
onclick="
if(user_already_granted_permission) { do_nothing; }
else {
prompt_user_to_grant_permission {
wait_for_response_from_permission_dialog {
if(permission_granted) { do_nothing; }
else { uncheck_checkbox; }
}
}
}
"
另一件值得注意的事情是,我已经验证用户在呈现页面时通过Facebook Connect登录。我希望其他人使用Facebook Connect已经能够解决这个问题。在此先感谢您的帮助!
答案 0 :(得分:1)
我最近开发了一个使用Facebook Connect的online demo并获取给定用户的朋友列表 - 它与您的情况不同,但我使用FB.Facebook.apiClient.requireLogin
来记录用户,就像这样:
var api_key = 'd04fba62ff27c6c84a6b767d404bcec3';
var channel_path = '/xd_receiver.htm';
/* initialize facebook API */
FB_RequireFeatures(['Api'], function() {
FB.Facebook.init(api_key, channel_path);
var api = FB.Facebook.apiClient;
api.requireLogin(function(exception){
// user is logged in and my application
// has permissions to get friend list
});
});
答案 1 :(得分:0)
您可以这样做:
FB.Facebook.apiClient.users_hasAppPermission('publish_stream', function(has_perms) {
if(has_perms) {
// User has granted the publish_stream permission
} else {
// User has not granted the publish_stream permission
}
});
users_hasAppPermission
函数的第二个参数是一个返回结果的回调函数。