无法检查用户是否已经使用其Facebook帐户登录

时间:2018-12-26 00:00:23

标签: java android facebook android-studio facebook-login

我已经能够成功实现Facebook登录按钮。我现在唯一的问题是我无法检查用户是否已经登录。

这是用户单击登录按钮时的代码:

loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    getFacebookData(object);
                }
            });

            Bundle parameters = new Bundle();
            parameters.putString("fields", "name, email, picture");
            request.setParameters(parameters);
            request.executeAsync();
        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {

        }
    });

getFacebookData包含以下代码:

private void getFacebookData(JSONObject object) {
    try {
        Intent intent = new Intent(MainActivity.this, Profile.class);
        String fb_name = object.getString("name");
        String fb_email = object.getString("email");
        URL profile_picture = new URL("http://graph.facebook.com/" + object.getString("id") + "/picture?type=large");
        intent.putExtra("name", fb_name);
        intent.putExtra("email", fb_email);
        intent.putExtra("profile_picture", profile_picture.toString());
        intent.putExtra("userOption", 2);
        startActivityForResult(intent, 1);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

基本上,当用户成功登录后,它会将用户的姓名,电子邮件和个人资料图片数据发送到Profile活动中。

现在,我在onCreate类中的MainActivity方法中拥有的是:

AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
if (isLoggedIn) {

}

上面的代码检查用户是否已经使用其Facebook帐户登录。我要放在if语句中的内容是getFacebookData(),因为这会将数据发送到Profile活动并立即开始Profile活动,而不是转到MainActivity。我的问题是,我必须传递JSONObject

我不知道要传递给JSONObject函数的getFacebookData()是什么,应该怎么解决?

1 个答案:

答案 0 :(得分:0)

首先,您可以在应用程序中永久存储用户名,电子邮件和ID(例如,共享首选项)。

要插入:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("fbId", fbId);
editor.putString("fbEmail", fbEmail);
editor.putString("fbName", fbName);
editor.commit();

要检索:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
String fbId= sharedPref.getString("fbId");
String fbEmail = sharedPref.getString("fbEmail");
String fbName= sharedPref.getString("fbName");

如果您真的想再次请求,可以使用以下方法:

AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
if (isLoggedIn) {
       GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), 
            new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    getFacebookData(object);
                }
        });

        Bundle parameters = new Bundle();
        parameters.putString("fields", "name, email, picture");
        request.setParameters(parameters);
        request.executeAsync();
}