Flash Actionscript 3 Facebook API限制
我正在使用Actionscript 3 API创建一个基于Flash(AS3)的Facebook Connect网站,尽管我已经准备好了基本的FB Connect功能,允许用户正确登录,但在尝试请求某些扩展权限时,我遇到了麻烦。我不确定,但似乎AS3 API有两个相当重要的限制:Flash Actionscript 3 Facebook API限制,flash,actionscript-3,facebook,externalinterface,Flash,Actionscript 3,Facebook,Externalinterface,我正在使用Actionscript 3 API创建一个基于Flash(AS3)的Facebook Connect网站,尽管我已经准备好了基本的FB Connect功能,允许用户正确登录,但在尝试请求某些扩展权限时,我遇到了麻烦。我不确定,但似乎AS3 API有两个相当重要的限制: 您必须在初次登录调用时分别提示输入扩展权限。换句话说,需要两个模态对话框,而不是一个。这似乎是因为连接由FacebookSessionUtil实例处理,而扩展权限请求由FacebookSessionUtil.Faceb
DesktopSession
类中的onLogin
函数,并添加扩展权限参数
2) 除非权限模型中的更改只允许代理电子邮件,否则它应该可以工作。试着从facebook用户实例中查询它,看看你得到了什么
在控制台块中使用以下api调用在中测试它
<button id="fb-login">Login & Permissions</button>
<script>
document.getElementById('fb-login').onclick = function() {
var cb = function(response) {
Log.info('FB.login callback', response);
if (response.session) {
Log.info('User logged in');
if (response.perms) {
Log.info('User granted permissions');
}
} else {
Log.info('User is logged out');
}
};
FB.login(cb, { perms: 'email' });
};
</script>
登录&;权限
document.getElementById('fb-login')。onclick=function(){
var cb=功能(响应){
Log.info('FB.login callback',response);
if(response.session){
Log.info(“用户登录”);
if(response.perms){
Log.info(“用户授予的权限”);
}
}否则{
Log.info(“用户已注销”);
}
};
FB.login(cb,{perms:'email'});
};
这里有另一种方法,您可以直接在AS3中完成这一切(非常方便)
这是我在facebook上构建的一个游戏的代码片段,该游戏在游戏中的某个特定点需要权限。。它工作得很好。(注意,现在必须在init调用中指定channel.html和oauth:true)
首先确保您拥有最新版本的API(现在是1.7)(http://code.google.com/p/facebook-actionscript-api)
享受吧 afaik facebook从不允许第三方访问电子邮件地址,因此另一个客户端库不会帮助您。grapefrukt--facebook扩展权限列表中提到的第一个“数据”项是用户的主要电子邮件地址:谢谢,phwd。您能否更具体地说明onLogin覆盖的性质(从1开始)?看起来onLogin只是点击了常见的Facebook登录URL(),并在其上添加了一堆额外的GET变量。URL中还需要另一个变量吗?是的,您的电子邮件扩展权限参数:
email
我试图通过扩展来覆盖该类,但DesktopSession包含在所有内容中。所以我做了一个快速搜索,发现我的想法已经被想到了:(。这个家伙有一个关于如何让它工作的完整教程。他基本上是使用与该类在facebook swc中相同的目录模式将该类复制到他的src中。请记住,这只在用户尚未登录的情况下才有效。FB Api(如果你问我的话,我会很郁闷)只有在你实际登录时才填写response.perms。如果你已经登录,你的回调将被调用,但perms将是空的。我上周一直在为这个问题而挣扎。有一个getUserStatus方法(或类似的方法)也不会返回权限。(续)解决这个问题的方法只有两种(我知道):1)如果用户已经登录,则强制注销,然后登录(当然是糟糕的用户体验)。2)检查登录状态,如果用户登录,则通过JS API(糟糕的开发人员体验;)使用FQL(有一个权限表)查询当前权限。我遵循了第二种方法,但让它工作起来很痛苦(考虑到FB文档有多糟糕;通常,你最好的选择是尝试/错误和猜测)。(rant的结尾)+1@Juan Pablo Califano Yeah不知道(*良好且信息丰富的rant:D*)从未尝试过扩展权限,因此这对我来说是一个新的难题。重要的部分是options.status=true
private function facebookInit():void // START THE SESSION…
{
Facebook.init(APP_ID, facebookInitHandler,{
appId: APP_ID,
status: true,
cookie: true,
xfmbl: true,
channelUrl: ‘http://yoursiteurl/channel.html',
oauth: true,
perms: “publish_stream,email”
});
}
private function facebookInitHandler(response:Object, fail:Object):void
{
if (response.accessToken)
{
userAccessToken = JSON.encode(response.accessToken);
facebookLoggedInWithToken = true;
loadProfileData();
} else {
facebookLoggedInWithToken = false;
}
}
private function loadProfileData():void
{
var request:String = ‘/me’;
var requestType:String = ‘GET’;
var params:Object = null;
Facebook.api(request, loadProfileDataHandler, params, requestType);
}
private function loadProfileDataHandler(response:Object, fail:Object):void
{
if (response) {
userID = response.id;
fullName = response.name;
firstName = response.first_name;
lastName = response.last_name;
userEmail = response.email;
userPicURL = ‘http://graph.facebook.com/‘ + userID + ‘/picture’;
}
}