Android:如何检查用户是否登录Facebook

时间:2014-01-27 13:04:07

标签: android facebook facebook-graph-api facebook-login facebook-android-sdk

我在android中尝试Facebook集成,主要是我遇到了3个问题。

1)当用户点击使用Facebook登录按钮并且用户未登录时,它将打开我从Play商店而不是弹出窗口安装的Facebook应用程序。

2)我想检查天气用户是否登录,如果是,那么应用程序只是要求获得测试应用程序将访问的权限.... 如果我按确定它应移至下一个屏幕我的意思是它不应该要求用户凭证,即电子邮件或facebbok ID和密码。

3)退出功能。

所以基本上我从这个link获得了代码,但它使用共享首选项来存储用户数据,所以基本上如果我从我的Facebook应用程序注销,它将不再要求登录,所以我的问题是如何删除这个共享首选项而不是共享首选项我应该使用什么。

最后一件事是我实施了注销功能,但它无法正常工作我不知道为什么。

以下是我的完整代码。

public class FacebookLogin extends Activity {

    Button facebookLogin;
    Button facebookLogout;

    private static String APP_ID = "myapp-key";

    private Facebook facebook = new Facebook(APP_ID);
    private AsyncFacebookRunner mAsyncRunner;
    private SharedPreferences mPrefs;
    String access_token;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.facebbok_login);

        facebookLogin = (Button) findViewById(R.id.facebookLogin);
        facebookLogout = (Button) findViewById(R.id.facebooklogout);
        mAsyncRunner = new AsyncFacebookRunner(facebook);

        facebookLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("Image Button", "button Clicked");
                loginToFacebook();
            }
        });

        facebookLogout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("Image Button", "button Clicked");
                logoutFromFacebook();
            }
        });
    }

    public void loginToFacebook() {

        mPrefs = getPreferences(MODE_PRIVATE);
        access_token = mPrefs.getString("access_token", null);
        long expires = mPrefs.getLong("access_expires", 0);

        if (access_token != null) {
            facebook.setAccessToken(access_token);
            Intent mIntent = new Intent(FacebookLogin.this, ShowVideo.class);
            startActivity(mIntent);
            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();

                            Intent mIntent = new Intent(FacebookLogin.this,
                                    ShowVideo.class);
                            startActivity(mIntent);

                        }

                        @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);
    }

    public void logoutFromFacebook() {
        Log.d("Image Button", "Inside logout");

        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() {
                            Intent mIntent = new Intent(FacebookLogin.this,
                                    SplashScreen.class);
                            startActivity(mIntent);
                        }
                    });

                }
            }

            @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) {
            }
        });
    }
}

1 个答案:

答案 0 :(得分:-2)

当用户登录时,您可以通过使用AccessToken或Profile来了解。不需要共享偏好。 facebook SDK负责这一点。您可以通过检查AccessToken.getCurrentAccessToken()和Profile.getCurrentProfile()来查看某人是否已登录。

使用this作为参考。