2011-01-28 5 views
2

다른 사용자가 재생할 응용 프로그램을 개발하고 있지만 사용자 인증과 벽 게시에 as3 그래프 API를 사용하고 있으며 다음에하기 전에 각 사용자를 로그 아웃해야합니다. 사용자는 AS3 그래프 API에 대한 자신의 세션을 시작합니다 http://code.google.com/p/facebook-actionscript-api/As3 그래프 API 로그 아웃

나는 로그인을 다시 API이 단계를 건너 뛰고 로그인 할 때 최종 사용자 세션에서 로그 아웃 로그인의 정보를 원하시면하지만 후에 물어 FB를 강제로 검색 할 수 있습니다.

답변

1

이 문제는 FacebookMobile, Facebook 및 FacebookDesktop에서 지속적으로 수정되었습니다. 기본적으로 FacebookDesktop.manageSession = false를 설정해야합니다. "로그 아웃"의 두 번째 인수를 사이트의 api url에 전달합니다. If that doesn't work, the other method is to use "reallyLogout", as detailed here in this thread.

메모 # 24의 메모는 FacebooMobile (또는 사용중인 싱글 톤)에서 액세스 토큰을 노출 한 다음 액세스 토큰을 사용하여 Facebook에서 logout.php 메소드를 수동으로 호출하는 방법을 자세히 설명합니다. 내가 웹에서 본 솔루션의

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

0

쿠키와 관련된 문제입니다. 즉, firts 사용자 세션이 남아 있고 첫 번째 사용자의 API 로그에 로그인 할 때 누릅니다.

페이 스북 Api 로그 아웃 방법으로 사용자가 페이스 북에서 로그 아웃하지 않는 이유는 모르겠지만 응용 프로그램에서만 사용자를 로그 아웃합니다.

해결책을 찾거나 다른 생각을하면 해결책을 얻을 수 있도록 알려주세요.

2

아무도 나를 위해 일을하지 않았다. 문제는 실제로 FacebookMobile.logout() 호출로 로그 아웃 할 때 StageWebView facebook 쿠키가 지워지지 않는다는 것입니다. 액세스 토큰을 사용하여 logout.php를로드해도 어플 리케이션에 적합한 "다음"매개 변수 값이 없기 때문에 아마도 도움이되지 못했습니다. 사람들이 localhost 또는 facebook.com을 사용하도록 제안했지만이 옵션 중 어느 것도 작동하지 않습니다.

나는 정말 의심스러운 해결책을 생각해 냈지만 지금은 효과가있다. 요점은 로그 아웃 할 때처럼 페이스 북에서 사용자를 로그 아웃하는 것입니다. 이렇게하려면 StageWebView에서 facebook.com을로드하고 로그 아웃을 클릭해야합니다. 로그 아웃 버튼은 "logout_form"html 양식의 제출 양식 항목입니다. 그래서 우리는 자바 스크립트 호출을해야합니다. 우리는 StageWebView에서

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

을 호출해야합니다. 액션 스크립트에서는

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

을 호출하면됩니다.

지금

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은 Facebook lib에 아직 남아있는 로컬 SharedObject 데이터를 지우는 것입니다.

+0

트릭이 작동합니다. 기간. 공유해 주셔서 감사합니다. – benya