Actionscript 3 Ограничения API Facebook - PullRequest
3 голосов
/ 28 июня 2010

Я создаю сайт Facebook Connect на основе Flash (AS3), используя API-интерфейс Actionscript 3, и, хотя у меня есть базовая функциональность FB Connect, позволяющая пользователям входить правильно, я сталкиваюсь со стенами, когда пытаясь запросить определенные расширенные разрешения. Я не уверен, но кажется, что есть два довольно существенных ограничения к API AS3:

  1. Вы должны запрашивать расширенные разрешения отдельно от первоначального входа в систему. Другими словами, требуется два модальных диалога, а не один. Похоже, это связано с тем, что подключение обрабатывается экземплярами FacebookSessionUtil, а запросы на расширенные разрешения обрабатываются экземплярами FacebookSessionUtil.Facebook.

  2. Похоже, что нет способа предложить пользователям разрешить совместное использование их адреса электронной почты с вашим приложением. Хотя я тщательно изучил http://facebook -actionscript-api.googlecode.com / svn / release / current / docs / index.html , похоже, что разрешение «EMAIL» там только предлагает разрешите вашему приложению отправлять им электронную почту через Facebook, а не обмениваться адресами электронной почты напрямую.

Мои предположения здесь неверны? Буду ли я лучше использовать JS и ExternalInterface для такого рода работы? Я бы предпочел не восстанавливать то, что есть, но если эти ограничения реальны, похоже, у меня не будет другого выбора.

Любая обратная связь или помощь будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

1 голос
/ 03 октября 2011

вот еще один способ сделать все это прямо в AS3 (очень удобно)

это фрагмент кода из игры, которую я создаю на Facebook, для которой требуются разрешения в определенный момент игры ... он работает хорошо. (обратите внимание, что теперь вы должны указать 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’;
    }
}

наслаждаться!

1 голос
/ 28 июня 2010

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>
...