最近、FacebookはSDK 4をリリースし、新しくてクールな更新を加えました。 SDK4に切り替えて新機能を使用しようとしましたが、Facebookのログイン機能に苦労しています。
これまでのところ、Facebookをプログラムでログアウトするには、次を使用しました。
Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();
ただし、SDK4はSessionをサポートしていないようです。公式ドキュメントでは次のように言及しています。
AndroidにFacebookログインを実装するには、2つの方法があります。
LoginButtonクラス-UIに追加できるボタンを提供します。現在のアクセストークンに従い、ユーザーをログインおよびログアウトできます。
まあ、LoginButtonを使用しない限り、プログラムでFacebookからログアウトする方法はないようです。誰でもアイデアがあります。ここで共有してください。
LoginButtonを使用する場合でも、LoginManager.getInstance().logOut();
を使用できます。
このUI要素は、LoginManagerで使用可能な機能をラップします。
EDIT:これはFacebook SDK v4で機能することを言及するだけです。彼らが将来それを変えるかどうかはわかりません。
@batoutofhellの言及として、facebook sdkを初期化するためにFacebookSdk.sdkInitialize(getApplicationContext());
を置くことを忘れないでください。詳細については here をご覧ください。
SDK4では、完全に分離する場合は、ユーザーのFacebookアカウントからアプリも削除するようにしてください。このメソッドは、ユーザーを完全に切断します。
public void disconnectFromFacebook() {
if (AccessToken.getCurrentAccessToken() == null) {
return; // already logged out
}
new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
.Callback() {
@Override
public void onCompleted(GraphResponse graphResponse) {
LoginManager.getInstance().logOut();
}
}).executeAsync();
}
LoginManager.logOut()
を使用できます
チェックアウト https://developers.facebook.com/docs/reference/Android/current/class/LoginManager/
LoginButtonで処理するには:
//Check if user is currently logged in
if (AccessToken.getCurrentAccessToken() != null && com.facebook.Profile.getCurrentProfile() != null){
//Logged in so show the login button
fbLogin.setVisibility(View.VISIBLE);
fbLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//log out
LoginManager.getInstance().logOut();
gotoLogin();
}
});
}
LoginManagerを使用してログアウトできますが、グラフリクエストも使用する必要があります。私は完全にログアウトするので、次回は別のアカウントでログインできます。
new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
.Callback() {
@Override
public void onCompleted(GraphResponse graphResponse) {
SharedPreferences pref = DashBoard.this.getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.clear();
editor.commit();
LoginManager.getInstance().logOut();
Intent logoutint = new Intent(DashBoard.this,MainActivity.class);
logoutint.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(logoutint);
}
}).executeAsync();
ここで設定を共有すると、完全にログアウトでき、次回は別のアカウントでログインできます。