3

我正在使用 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 向他们发送电子邮件,而不是直接分享他们的电子邮件地址。

我的假设在这里错了吗?使用 JS 和 ExternalInterface 来完成这类工作会更好吗?我宁愿不重建现有的东西,但如果这些限制是真实的,我似乎别无选择。

任何反馈或帮助将不胜感激。谢谢!

4

2 回答 2

1

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

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>
于 2010-06-28T14:46:05.837 回答
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’;
    }
}

请享用!

于 2011-10-02T23:17:58.763 回答