Возникли проблемы с проверкой, если пользователь уже вошел в систему со своей учетной записью Facebook - PullRequest
0 голосов
/ 26 декабря 2018

Мне удалось успешно реализовать кнопку входа в 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 имеет этоcode:

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 голосов
/ 26 декабря 2018

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

Для вставки:

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