Возникли проблемы с проверкой, если пользователь уже вошел в систему со своей учетной записью Facebook

1

Мне удалось успешно реализовать кнопку входа в 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. В операторе getFacebookData() я хочу поместить getFacebookData() потому что это отправит данные в действие Profile и немедленно начнет действие Profile а не в MainActivity. Моя проблема в том, что я должен передать JSONObject.

Что мне нужно сделать, чтобы это исправить, так как я не знаю, какой JSONObject передать в getFacebookData()?

Теги:
android-studio
facebook
facebook-login

1 ответ

0

Во-первых, вы можете хранить имя пользователя, адрес электронной почты и идентификатор постоянно в вашем приложении (например, общие настройки).

Вставить:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню