Actionscript 3 Facebook API限制

时间:2010-06-28 13:04:33

标签: flash actionscript-3 facebook externalinterface

我正在使用Actionscript 3 API创建基于Flash的(AS3)Facebook Connect网站,虽然我已经获得了基本的FB Connect功能,允许用户正确登录,但我遇到了问题。试图要求某些扩展权限。我不是肯定的,但似乎AS3 API有两个相当重要的限制:

  1. 您必须与初始登录呼叫分开提示扩展权限。换句话说,需要两个模态对话框,而不是一个。这似乎是因为连接是使用FacebookSessionUtil的实例处理的,而扩展的权限请求是由FacebookSessionUtil.Facebook的实例处理的。

  2. 似乎没有办法提示用户允许他们的电子邮件地址与您的应用程序共享。虽然我已经彻底仔细阅读http://facebook-actionscript-api.googlecode.com/svn/release/current/docs/index.html,但看起来“EMAIL”权限只会提示用户允许您的应用通过Facebook向他们发送电子邮件,而不是直接分享他们的电子邮件地址。

  3. 我的假设在这里是错的吗?我会更好地使用JS和ExternalInterface进行这类工作吗?我宁愿不重建现有的东西,但如果这些限制是真的,看来我别无选择。

    非常感谢任何反馈或帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

Developer console中使用控制台块中的以下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>

答案 1 :(得分:1)

这是另一种直接在AS3中完成所有操作的方法(非常方便)

这是我在Facebook上建立的游戏的代码片段,需要游戏中某个点的权限..它运作良好。 (注意,您现在必须在init调用中指定channel.html和oauth:true)

首先确保您拥有最新版本的API(现在为1.7)(http://code.google.com/p/facebook-actionscript-api)

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’;
    }
}

享受!