Android 的 Facebook SDK 4 - 如何以编程方式注销
Facebook SDK 4 for Android - how to log out programmatically
最近,Facebook 发布了 SDK 4,更新很酷。我试图切换到 SDK4 以使用新功能,但是,我正在努力使用 Facebook 的登录功能。
到目前为止,要以编程方式注销 Facebook,我使用了:
Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();
但是SDK4好像不支持Session了,在官方文档中提到:
There are two ways to implement Facebook login on Android:
LoginButton class - Which provides a button you can add to your UI. It follows the current access token and can log people in and out.
好吧,除了使用 LoginButton 之外,似乎没有办法以编程方式注销 Facebook。
大家有什么想法,请在这里分享。
您可以使用LoginManager.logOut()
查看https://developers.facebook.com/docs/reference/android/current/class/LoginManager/
您可以使用 LoginManager.getInstance().logOut();
,即使您使用 LoginButton 因为
This UI element wraps functionality available in the LoginManager.
编辑:
只需提及这适用于 Facebook SDK v4。不知道以后会不会改。
@as batoutofhell 提到,不要忘记输入 FacebookSdk.sdkInitialize(getApplicationContext());
来初始化 facebook sdk。详情请见here。
用登录按钮处理:
//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();
}
});
}
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 注销,但您还必须使用图形请求。我说的是完全注销,以便下次您可以使用不同的帐户登录。
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();
借助这里的共享首选项,您可以完全注销,下次您可以使用不同的帐户登录。
Frank 版本 kotlin:
fun disconnectFromFacebook() {
if (AccessToken.getCurrentAccessToken() == null) {
return // already logged out
}
GraphRequest(
AccessToken.getCurrentAccessToken(),
"/me/permissions/",
null,
HttpMethod.DELETE,
GraphRequest.Callback {
LoginManager.getInstance().logOut()
}).executeAsync()
}
最近,Facebook 发布了 SDK 4,更新很酷。我试图切换到 SDK4 以使用新功能,但是,我正在努力使用 Facebook 的登录功能。
到目前为止,要以编程方式注销 Facebook,我使用了:
Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();
但是SDK4好像不支持Session了,在官方文档中提到:
There are two ways to implement Facebook login on Android:
LoginButton class - Which provides a button you can add to your UI. It follows the current access token and can log people in and out.
好吧,除了使用 LoginButton 之外,似乎没有办法以编程方式注销 Facebook。 大家有什么想法,请在这里分享。
您可以使用LoginManager.logOut()
查看https://developers.facebook.com/docs/reference/android/current/class/LoginManager/
您可以使用 LoginManager.getInstance().logOut();
,即使您使用 LoginButton 因为
This UI element wraps functionality available in the LoginManager.
编辑: 只需提及这适用于 Facebook SDK v4。不知道以后会不会改。
@as batoutofhell 提到,不要忘记输入 FacebookSdk.sdkInitialize(getApplicationContext());
来初始化 facebook sdk。详情请见here。
用登录按钮处理:
//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();
}
});
}
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 注销,但您还必须使用图形请求。我说的是完全注销,以便下次您可以使用不同的帐户登录。
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();
借助这里的共享首选项,您可以完全注销,下次您可以使用不同的帐户登录。
Frank 版本 kotlin:
fun disconnectFromFacebook() {
if (AccessToken.getCurrentAccessToken() == null) {
return // already logged out
}
GraphRequest(
AccessToken.getCurrentAccessToken(),
"/me/permissions/",
null,
HttpMethod.DELETE,
GraphRequest.Callback {
LoginManager.getInstance().logOut()
}).executeAsync()
}