Сценарий действий Facebook 3 API входа / выхода из системы - PullRequest
3 голосов
/ 20 ноября 2011

Я создаю мобильное приложение AIR для Android с использованием Flash Builder 4.5, AIR 2.6, API сценария действий Facebook 3, последняя версия .

У меня проблема с входом / выходом из системы.Я могу войти в систему только один раз - тогда мои данные кешируются каким-то образом, и Facebook автоматически регистрирует меня. Когда я вызываю выход из системы, я получаю ответ ИСТИНА, но я действительно не выхожу из системы.Стандартный диалог входа не отображается для меня.Я уже прочитал много статей о стековом потоке и открытых проблемах на официальном сайте, но ни одна из них не была полезной.Как я могу решить это?Вот код, который я использую:

package
{
    import flash.display.DisplayObject;
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.external.ExternalInterface;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.system.Capabilities;
    import flash.system.Security;
    import flash.display.Loader;
    import com.facebook.graph.FacebookMobile;

        public class TestProj extends Sprite
        {
            public function TestProj()
            {
                super();

                //register to add to stage
                this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

                // support autoOrients
                stage.align = StageAlign.TOP_LEFT;
                stage.scaleMode = StageScaleMode.NO_SCALE;
            }

            private function onAddedToStage(event:Event):void
            {
                this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

                FacebookMobile.init("195053007196177", initCallback);
            }

            private function initCallback(success:Object, fail:Object):void
            {
                var appPermissions:Array = new Array("read_stream", "offline_access", "publish_stream", "read_friendlists");
                FacebookMobile.login(loginCallback, this.stage, appPermissions);
                //FacebookMobile.logout(logoutCallback);
            }

            private function loginCallback(success:Object, fail:Object):void
            {       
//And here I always receive success with my UserID
//and login dialog don't appears to me before this  
                if (success)
                {
                    trace("login ok");
                }
                else
                    trace("login failed");
            }

            private function logoutCallback(success:Object):void
            {
//here I reseive "TRUE" always!!
                trace(success);
            }

        }
    }

Ответы [ 4 ]

6 голосов
/ 20 ноября 2011

Вы только передаете 1-й аргумент logoutCallback методу выхода из системы.Если вы добавите второй аргумент URL вашего сайта, указанный для вашего приложения, он должен очистить его от файла cookie html для этого окна.Кроме того, установите FacebookMobile.manageSession = false;

            FacebookMobile.logout(logoutCallback, "http://your_app_origin_url");

Существует потенциальная ошибка, связанная с тем, что Desktop и Mobile не получают доступ или не очищают токен доступа аналогичным образом.Для этого есть взлом, который описывает выставление токена доступа в FacebookMobile, затем вручную вызывает метод «logout» с токеном доступа.Проблема описана здесь, в том числе метод с именем «RealLogout». Если то, что я написал выше, не работает, внедрите «neverLogout».

Когда вы выходите из системы, ваше приложение очищает локальный сеанс, но не выводит вас из системы.система. Это четко определено в документации для выхода из системы. Подумайте об этом, если вы вошли в Facebook на своем смартфоне, в веб-браузере, а теперь в этом приложении для мобильных ПК и вдругВыйти из системы ... она не должна выходить из системы ВЕЗДЕ, только в рамках этой сессии браузера.Так что передайте этот второй параметр.

1 голос
/ 16 сентября 2014

У вас была эта проблема с чистым выходом из системы Android на Facebook в течение всего дня, и вам удалось ее решить. Надеюсь, поможет. Вот мой код дескриптора мобильного FB-дескриптора, чтобы убедиться, что все фб-файлы cookie и сеансы удаляются, и пользователю нужно будет перелогиниться.
Иногда FB-сервер работает очень медленно. Лучше всего установить таймер перед повторным вызовом handleLoginClick ()

function handleLoginClick():void
    {
        trace("connecting to facebook");
        if (FacebookMobile.getSession() == null)
        {
            FacebookMobile.init(APP_ID, onHandleInit, null);
            FacebookMobile.manageSession = false
        }
        else
        {
            var webView:StageWebView = new StageWebView();
            webView.viewPort = new Rectangle(0, 0, 1, 1);           
            webView.stage = this.stage;         
            webView.loadURL("https://m.facebook.com/logout.php?confirm=1&next=http://www.facebook.com&access_token=" + FacebookMobile.getSession().accessToken);
            webView.addEventListener(Event.COMPLETE,webviewhandleLoad);
            function webviewhandleLoad(e:Event)
            {
                FacebookMobile.logout(null, "http://apps.facebook.com/<appName>/");
                FacebookMobile.logout(null, "http://www.facebook.com");
                webView.dispose()
                webView = null
                setTimeout(handleLoginClick,3000)

            }
        }
    }
1 голос
/ 03 апреля 2012

У меня возникла именно эта проблема, и после попытки многочисленных исправлений это наконец-то, похоже, сработало:

Кажется, что функция выхода из системы по умолчанию не очищает файлы cookie с помощью API-интерфейса ActionScript FacebookMobile должным образом.Решение в комментарии # 33 здесь работает для меня, воспроизведено здесь.Не забудьте указать свой APP_ID:

function logout(e:MouseEvent):void {
  FacebookMobile.logout(onLogout, "https://m.facebook.com/dialog/permissions.request?app_id=APP_ID&display=touch&next=http%3A%2F%2Fwww.facebook.com%2Fconnect%2Flogin_success.html&type=user_agent&perms=publish_stream&fbconnect=1");
}

function onLogout(result:Object):void
{
  trace("Perfect Log Out!")
}
0 голосов
/ 21 ноября 2011

посмотрите на решение этой проблемы. Маби кому-то это помогает:

var stage_ref:Stage =  PlatformUtil.originalStage(); //my custom class to get stage
var webView:StageWebView = new StageWebView();
webView.viewPort = new Rectangle(0, 0, stage_ref.width, stage_ref.height);
FacebookMobile.login(loginCallback, stage_ref, appPermissions, webView);

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...