제목에 모든 것이 나와 있습니다. 사용자의 페이스 북 정보를 가져 오기 위해 사용자 정의 버튼을 사용하고 있습니다 ( “가입”목적). 그러나 앱이 마지막으로 등록 된 사용자를 기억하고 싶지 않으며 현재 Facebook 기본 앱을 통해 로그인 한 사람도 기억하지 않습니다. Facebook 로그인 활동이 매번 팝업되기를 원합니다. 그래서 프로그래밍 방식으로 이전 사용자를 로그 아웃하고 싶습니다.
어떻게 할 수 있습니까? 로그인 방법은 다음과 같습니다.
private void signInWithFacebook() {
SessionTracker sessionTracker = new SessionTracker(getBaseContext(), new StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception) {
}
}, null, false);
String applicationId = Utility.getMetadataApplicationId(getBaseContext());
mCurrentSession = sessionTracker.getSession();
if (mCurrentSession == null || mCurrentSession.getState().isClosed()) {
sessionTracker.setSession(null);
Session session = new Session.Builder(getBaseContext()).setApplicationId(applicationId).build();
Session.setActiveSession(session);
mCurrentSession = session;
}
if (!mCurrentSession.isOpened()) {
Session.OpenRequest openRequest = null;
openRequest = new Session.OpenRequest(RegisterActivity.this);
if (openRequest != null) {
openRequest.setPermissions(null);
openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
mCurrentSession.openForRead(openRequest);
}
}else {
Request.executeMeRequestAsync(mCurrentSession, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
fillProfileWithFacebook( user );
}
});
}
}
이상적으로는이 메서드를 시작할 때 이전 사용자를 로그 아웃하도록 호출합니다.
답변
최신 SDK 업데이트 :
이제 @zeuter의 대답은 Facebook SDK v4.7 +에 맞습니다.
LoginManager.getInstance().logOut();
원래 답변 :
SessionTracker를 사용하지 마십시오. 내부 (패키지 개인) 클래스이며 공용 API의 일부로 사용되지 않습니다. 따라서 API는 이전 버전과의 호환성 보장없이 언제든지 변경 될 수 있습니다. 코드에서 SessionTracker의 모든 인스턴스를 제거하고 대신 활성 세션을 사용할 수 있어야합니다.
질문에 답하려면 세션 데이터를 유지하지 않으려면 앱이 닫힐 때 closeAndClearTokenInformation을 호출 하면됩니다.
답변
이 방법은 Android에서 프로그래밍 방식으로 Facebook에서 로그 아웃하는 데 도움이됩니다.
/**
* Logout From Facebook
*/
public static void callFacebookLogout(Context context) {
Session session = Session.getActiveSession();
if (session != null) {
if (!session.isClosed()) {
session.closeAndClearTokenInformation();
//clear your preferences if saved
}
} else {
session = new Session(context);
Session.setActiveSession(session);
session.closeAndClearTokenInformation();
//clear your preferences if saved
}
}
답변
답변
다음은 내가 페이스 북에서 프로그래밍 방식으로 로그 아웃 할 수있게 해주는 스 니펫입니다. 개선해야 할 사항이 있으면 알려주세요.
private void logout(){
// clear any user information
mApp.clearUserPrefs();
// find the active session which can only be facebook in my app
Session session = Session.getActiveSession();
// run the closeAndClearTokenInformation which does the following
// DOCS : Closes the local in-memory Session object and clears any persistent
// cache related to the Session.
session.closeAndClearTokenInformation();
// return the user to the login screen
startActivity(new Intent(getApplicationContext(), LoginActivity.class));
// make sure the user can not access the page after he/she is logged out
// clear the activity stack
finish();
}
답변
Facebook의 Android SDK v4.0부터 다음을 실행해야합니다.
LoginManager.getInstance().logOut();
이것만으로는 충분하지 않습니다. 이것은 단순히 토큰 캐시 액세스를 지우고 그래서 프로파일됩니다 AccessToken.getCurrentAccessToken()
및 Profile.getCurrentProfile()
이제 널 (null)이 될 것입니다.
완전히 로그 아웃하려면 권한을 취소 한 다음을 호출해야합니다 LoginManager.getInstance().logOut();
. 권한을 취소하려면 다음 그래프 API를 실행하십시오.
GraphRequest delPermRequest = new GraphRequest(AccessToken.getCurrentAccessToken(), "/{user-id}/permissions/", null, HttpMethod.DELETE, new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse graphResponse) {
if(graphResponse!=null){
FacebookRequestError error =graphResponse.getError();
if(error!=null){
Log.e(TAG, error.toString());
}else {
finish();
}
}
}
});
Log.d(TAG,"Executing revoke permissions with graph path" + delPermRequest.getGraphPath());
delPermRequest.executeAsync();
답변
SDK 4.0에서 세션 클래스가 제거되었습니다. 로그인 관리는 LoginManager 클래스를 통해 수행됩니다 . 그래서:
mLoginManager = LoginManager.getInstance();
mLoginManager.logOut();
SDK 4.0으로 업그레이드 하는 참조에 따르면 다음과 같습니다.
세션 제거됨 -AccessToken, LoginManager 및 CallbackManager 클래스가 세션 클래스의 기능을 대체하고 대체합니다.
답변
@luizfelippe가 언급했듯이 세션 클래스는 SDK 4.0 이후로 제거되었습니다 . LoginManager를 사용해야합니다.
로그 아웃을 위해 LoginButton 클래스를 살펴 보았습니다 . 그들은 이런 종류의 점검을하고 있습니다. accessToken 이 null이 아닌 경우에만 로그 아웃됩니다 . 그래서 우리 코드에도 이것을 포함하는 것이 낫다고 생각합니다 ..
AccessToken accessToken = AccessToken.getCurrentAccessToken();
if(accessToken != null){
LoginManager.getInstance().logOut();
}