As3 Graph API Выход из системы - PullRequest
2 голосов
/ 28 января 2011

Я разрабатываю приложение, в которое будут играть разные пользователи, но я использую ap3 graph api для аутентификации пользователей и публикации на их стене, и мне нужно выйти из системы каждого пользователя, прежде чем следующий пользователь начнет свою сессию на графике as3 api: http://code.google.com/p/facebook-actionscript-api/

Я пытаюсь заставить FB запрашивать информацию для входа в систему, но после выхода из системы при повторном входе API пропускает шаг и регистрируется в последнем сеансе пользователя.

Ответы [ 3 ]

2 голосов
/ 27 мая 2012

Ни одно из решений, которые я видел в Интернете, не сработало для меня.Проблема действительно в том, что cookie-файл StageWebView не очищается при выходе из системы с помощью вызова FacebookMobile.logout ().Загрузка logout.php с токеном доступа мне не помогла, вероятно, потому что нет никакого значения «следующего» параметра для воздушных приложений, которое имеет смысл.Я видел, как люди предлагают использовать localhost или facebook.com, но ни один из этих вариантов не сработал.

Я нашел действительно сомнительное решение, но оно пока работает.Смысл в том, чтобы выйти из пользователя в Facebook, как обычно, если бы он вышел из системы самостоятельно.Для этого нам нужно загрузить facebook.com в StageWebView и нажать «Выйти».Кнопка выхода из системы - это элемент формы отправки для html-формы logout_form.Поэтому нам нужно сделать вызов javaScript

document.getElementById('logout_form').submit();

в нашем StageWebView.И мы можем сделать это, вызвав

webView.loadURL("javascript:document.getElementById('logout_form').submit();");

в ActionScript.

Полный код, который я сейчас использую

protected var _logoutAttemptInProgress:Boolean = false;
public function fbLogout():void{
if(!_isLoggedIn) return;
if(_logoutAttemptInProgress) return;
_logoutAttemptInProgress = true;

var webView:StageWebView = new StageWebView();
webView.viewPort = new Rectangle(-1, 0, 1, 1);          
webView.stage = this.stage;         
webView.loadURL("http://www.facebook.com/lksmlrsgnlskn");
webView.addEventListener(Event.COMPLETE, runLogoutJs);

function runLogoutJs(event:Event):void{
    webView.removeEventListener(Event.COMPLETE, runLogoutJs);
    var jsString:String = "document.getElementById('logout_form').submit();";
    webView.loadURL("javascript:"+jsString);
    webView.addEventListener(Event.COMPLETE, closeWebView);
}

function closeWebView(event:Event):void{
    webView.removeEventListener(Event.COMPLETE, closeWebView);
    webView.stage = null;
    webView.dispose();

    _isLoggedIn = false;
    _logoutAttemptInProgress = false;
}

FacebookDesktop.logout(null, APP_ORIGIN);
}

"lksmlrsgnlskn" - это просто случайныймусор, чтобы попасть на страницу с ошибкой, которая намного меньше главной страницы и загружается быстрее.

FacebookDesktop.logout предназначен для очистки любых локальных данных SharedObject, которые могут быть в библиотеке lib Facebook.

1 голос
/ 20 ноября 2011

Эта проблема постоянно пересматривается FacebookMobile, Facebook и FacebookDesktop. По сути, вам нужно убедиться, что вы установили FacebookDesktop.manageSession = false; и передайте второй аргумент "logout" api url вашего сайта. Если это не сработает, другой метод заключается в использовании «tooLogout», как подробно описано в этой теме .

В комментариях к комментарию № 24 подробно описывается способ предоставления токена доступа из FacebooMobile (или любого используемого вами одиночного файла), а затем вызов вручную метода logout.php в Facebook с помощью токена доступа.

http://code.google.com/p/facebook-actionscript-api/issues/detail?id=297#c24

0 голосов
/ 14 ноября 2011

Это проблема с файлами cookie, я имею в виду, что первый пользовательский сеанс сохраняется, и когда вы нажимаете для входа в журналы API первого пользователя.

Я не знаю, почему, но метод выхода Facebook Apiне выводите пользователя из Facebook, только выходите из приложения.

Если вы пришли к решению или подумали что-то другое, дайте мне знать, чтобы мы могли найти решение.

...