Android版Facebook的整合不会退出 [英] Android Facebook integration does not log out
问题描述
我开发使用低于code一个Facebook的Android整合,但一旦我登录通过这个程序,那么它不会从Facebook即使我从我的设备的Facebook应用程序或浏览器都注销注销。所以这个Android应用程序仍然可以张贴在我的Facebook墙上。如何从这个程序注销,如果我从我的浏览器的Facebook应用程序或Facebook注销。
包com.facebook.androidhive; 进口java.io.FileNotFoundException;
进口java.io.IOException异常;
进口java.net.MalformedURLException; 进口org.json.JSONException;
进口org.json.JSONObject; 进口android.app.Activity;
进口android.content.Intent;
进口android.content.Shared preferences;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.View;
进口android.widget.Button;
进口android.widget.TextView;
进口android.widget.Toast; 进口com.facebook.android.AsyncFacebookRunner;
进口com.facebook.android.AsyncFacebookRunner.RequestListener;
进口com.facebook.android.DialogError;
进口com.facebook.android.Facebook;
进口com.facebook.android.Facebook.DialogListener;
进口com.facebook.android.FacebookError; 公共类AndroidFacebookConnectActivity延伸活动{// Facebook应用程序ID
私人静态字符串APP_ID =APP_ID; //你的应用程序ID替换// Facebook的类的实例
私人使用Facebook =新的Facebook(APP_ID);
私人AsyncFacebookRunner mAsyncRunner;
字符串文件名=AndroidSSO_data;
私人共享preferences米preFS;@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
mAsyncRunner =新AsyncFacebookRunner(脸谱); loginToFacebook();
postToWall();
}/ **
*功能登录到Facebook的
* * /
公共无效loginToFacebook(){ 米preFS = GET preferences(MODE_PRIVATE);
字符串的access_token = M prefs.getString(的access_token,NULL);
长到期= M prefs.getLong(access_expires,0); 如果(ACCESS_TOKEN!= NULL){
facebook.setAccessToken(的access_token); Log.d(FB会话,+ facebook.isSessionValid());
} 如果(到期!= 0){
facebook.setAccessExpires(到期);
} 如果(!facebook.isSessionValid()){
facebook.authorize(这一点,
新的String [] {电子邮件,publish_stream},
新DialogListener(){ @覆盖
公共无效onCancel(){
//函数来处理事件取消
} @覆盖
公共无效的onComplete(束值){
//函数来处理完成事件
//编辑preferences和更新Facebook的acess_token
共享preferences.Editor编辑= M prefs.edit();
editor.putString(的access_token
facebook.getAccessToken());
editor.putLong(access_expires
facebook.getAccessExpires());
editor.commit(); } @覆盖
公共无效onerror的(DialogError错误){
//函数来处理错误 } @覆盖
公共无效onFacebookError(FacebookError fberror){
//函数来处理Facebook的错误 } });
}
}@覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
super.onActivityResult(要求code,结果code,数据);
facebook.authorizeCallback(要求code,结果code,数据);
}/ **
*功能张贴到Facebook涂鸦墙
* * /
公共无效postToWall(){
//后用户的墙上。
facebook.dialog(这一点,饲料,新DialogListener(){ @覆盖
公共无效onFacebookError(FacebookError E){
} @覆盖
公共无效onerror的(DialogError E){
} @覆盖
公共无效的onComplete(束值){
} @覆盖
公共无效onCancel(){
}
});}/ **
*功能,以从Facebook注销用户
* * /
公共无效logoutFromFacebook(){
mAsyncRunner.logout(这一点,新RequestListener(){
@覆盖
公共无效的onComplete(字符串响应,对象的状态){
Log.d(注销从Facebook,响应);
如果(Boolean.parseBoolean(响应)==真){
runOnUiThread(新的Runnable(){ @覆盖
公共无效的run(){ } }); }
} @覆盖
公共无效onIOException(IOException异常即对象的状态){
} @覆盖
公共无效onFileNotFoundException(FileNotFoundException异常E,
对象的状态){
} @覆盖
公共无效onMalformedURLException(MalformedURLException的E,
对象的状态){
} @覆盖
公共无效onFacebookError(FacebookError即对象的状态){
}
});
} }
您不能从您的应用程序强制注销,如果你注销Facebook应用程序,至少没有API,我们与我们的SDK支持。
在理论上,你可以找到一个方法来附加某种卸载意图或解析,了解有关Facebook的注销任何消息日志,但一般不建议作为最佳实践,迫使其他应用的注销当另一个应用程序注销(它不是直观的,这是会发生的用户)。
I am developing a Facebook Android integration using the below code, but once I log-in through this app then it does not logout from facebook even if I logout from Facebook app or browser both from my device. So this android app can still post on my Facebook wall. How do I logout from this app if I logout from my facebook app or facebook on browser.
package com.facebook.androidhive;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.android.AsyncFacebookRunner;
import com.facebook.android.AsyncFacebookRunner.RequestListener;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.Facebook.DialogListener;
import com.facebook.android.FacebookError;
public class AndroidFacebookConnectActivity extends Activity {
// Your Facebook APP ID
private static String APP_ID = "APP_ID"; // Replace with your App ID
// Instance of Facebook Class
private Facebook facebook = new Facebook(APP_ID);
private AsyncFacebookRunner mAsyncRunner;
String FILENAME = "AndroidSSO_data";
private SharedPreferences mPrefs;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mAsyncRunner = new AsyncFacebookRunner(facebook);
loginToFacebook();
postToWall();
}
/**
* Function to login into facebook
* */
public void loginToFacebook() {
mPrefs = getPreferences(MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if (access_token != null) {
facebook.setAccessToken(access_token);
Log.d("FB Sessions", "" + facebook.isSessionValid());
}
if (expires != 0) {
facebook.setAccessExpires(expires);
}
if (!facebook.isSessionValid()) {
facebook.authorize(this,
new String[] { "email", "publish_stream" },
new DialogListener() {
@Override
public void onCancel() {
// Function to handle cancel event
}
@Override
public void onComplete(Bundle values) {
// Function to handle complete event
// Edit Preferences and update facebook acess_token
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token",
facebook.getAccessToken());
editor.putLong("access_expires",
facebook.getAccessExpires());
editor.commit();
}
@Override
public void onError(DialogError error) {
// Function to handle error
}
@Override
public void onFacebookError(FacebookError fberror) {
// Function to handle Facebook errors
}
});
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
}
/**
* Function to post to facebook wall
* */
public void postToWall() {
// post on user's wall.
facebook.dialog(this, "feed", new DialogListener() {
@Override
public void onFacebookError(FacebookError e) {
}
@Override
public void onError(DialogError e) {
}
@Override
public void onComplete(Bundle values) {
}
@Override
public void onCancel() {
}
});
}
/**
* Function to Logout user from Facebook
* */
public void logoutFromFacebook() {
mAsyncRunner.logout(this, new RequestListener() {
@Override
public void onComplete(String response, Object state) {
Log.d("Logout from Facebook", response);
if (Boolean.parseBoolean(response) == true) {
runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
}
}
@Override
public void onIOException(IOException e, Object state) {
}
@Override
public void onFileNotFoundException(FileNotFoundException e,
Object state) {
}
@Override
public void onMalformedURLException(MalformedURLException e,
Object state) {
}
@Override
public void onFacebookError(FacebookError e, Object state) {
}
});
}
}
You can't force a logout from your app if you logout of the Facebook app, at least no API that we support with our SDK.
In theory, you could find a way to attach some sort of uninstall intent or to parse logs for any messages regarding facebook logout, but it generally is not recommended as best practice to force a logout of another app when another app logs out (its not intuitive to the user that this is going to happen).
这篇关于Android版Facebook的整合不会退出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!