Android版Facebook的整合不会退出 [英] Android Facebook integration does not log out

查看:215
本文介绍了Android版Facebook的整合不会退出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发使用低于code一个Facebook的Andr​​oid整合,但一旦我登录通过这个程序,那么它不会从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆