Flash Actionscript 3 Facebook 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

我正在使用Actionscript 3 API创建一个基于Flash(AS3)的Facebook Connect网站,尽管我已经准备好了基本的FB Connect功能,允许用户正确登录,但在尝试请求某些扩展权限时,我遇到了麻烦。我不确定,但似乎AS3 API有两个相当重要的限制:

  • 您必须在初次登录调用时分别提示输入扩展权限。换句话说,需要两个模态对话框,而不是一个。这似乎是因为连接由FacebookSessionUtil实例处理,而扩展权限请求由FacebookSessionUtil.Facebook实例处理

  • 似乎没有办法提示用户允许他们的电子邮件地址与您的应用程序共享。虽然我读得很透彻,但这里的“电子邮件”权限似乎只会提示用户允许你的应用程序通过facebook向他们发送电子邮件,而不是直接分享他们的电子邮件地址

  • 我的假设错了吗?对于这种工作,使用JS和ExternalInterface会更好吗?我宁愿不重建现有的设施,但如果这些限制是真的,那么我似乎别无选择

    如有任何反馈或帮助,将不胜感激。谢谢

    1)您必须覆盖
    DesktopSession
    类中的
    onLogin
    函数,并添加扩展权限参数

    2) 除非权限模型中的更改只允许代理电子邮件,否则它应该可以工作。试着从facebook用户实例中查询它,看看你得到了什么

    在控制台块中使用以下api调用在中测试它

    <button id="fb-login">Login &amp; 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’;
        }
    }