Facebook Android логин - передача деталей - PullRequest
0 голосов
/ 24 мая 2018

Хорошо, я хочу передать детали при переходе к следующему занятию.Детали, такие как имя, адрес электронной почты, профиль, пол.

Это не происходит каким-либо образом, когда пользователь вошел в систему. Однако детали отправляются, когда я вхожу в первый раз.

Итак, у меня есть два вопроса:

1) Почему детали не отображаются, когда пользователь уже вошел в систему?Есть ли что-то, что нужно изменить в коде?

2) Иногда, когда я открываю приложение после долгого времени, оно не перемещается на DetailsActivity и открывает MainActivity с LoginButton с текстовым выходом из системы (поэтому очевидно, что он все еще вошел в систему, но возвращает ноль).

Посмотрите на мой код:

AccessTokenTracker accessTokenTracker;
AccessToken accessToken = AccessToken.getCurrentAccessToken();

наСоздать

callbackManager = CallbackManager.Factory.create();
    loginButton.setReadPermissions(Arrays.asList("email, public_profile"));
    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email, public_profile"));
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            getUserDetails(loginResult);
        }

        @Override
        public void onCancel() {
            //cancelled
        }

        @Override
        public void onError(FacebookException exception) {
            //handle error
        }
    });
    accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(
                AccessToken oldAccessToken,
                AccessToken currentAccessToken) {
            accessToken = currentAccessToken;
        }
    };
    // If already logged in show the home view
    if (accessToken != null && Profile.getCurrentProfile()!=null) {
        try {

            Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
            startActivity(intent);
            finish();
        }
        catch (RuntimeException e) {
            e.printStackTrace();
        }
    }
    else {
        databaseHelper.deleteAll();
    }
}


private void getUserDetails(LoginResult loginResult) {
    GraphRequest data_request = GraphRequest.newMeRequest(
            accessToken, new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(
                        JSONObject json_object,
                        GraphResponse response) {
                        Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
                        intent.putExtra("userProfile", json_object.toString());
                        startActivity(intent);
                        finish();
                    }
            });
    Bundle permission_param = new Bundle();
    permission_param.putString("fields", "id,name,email,picture.width(120).height(120),gender");
    data_request.setParameters(permission_param);
    data_request.executeAsync();
}

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

В вашем onCompleted () сделайте это

                       @Override
                        public void onCompleted(
                                JSONObject object,
                                GraphResponse response) {
                            // Application code
                            Log.e("GraphResponse", "-------------" + response.toString());
                            Log.e("fb_json", "-------------" + object.toString());
                            try {

                                if (object.has("id")) {
                                    fb_id = object.getString("id");
                                }
                                if (object.has("name")) {
                                    userName = object.getString("name");
                                }
                                if (object.has("email")) {
                                    email = object.getString("email");
                                }
                                setSharedPreference(AppConstants.SharedKey.FB_ID, fb_id);

                                imageUrl = "http://graph.facebook.com/" + object.getString("id") + "/picture?type=large";
                                Log.e("profileImage", imageUrl);
                                new WebserviceCall(LoginActivity.this, AppConstants.Methods.fbLOgin).execute(new String[]{email, fb_id, userName, getSharedPreference(AppConstants.SharedKey.DEVICE_ID), "", imageUrl});
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

Затем вызовите веб-сервис, передав fb_id, имя пользователя, адрес электронной почты и т. Д. И в вызове onPostexecute loginSuccess (mJsonObject);

0 голосов
/ 24 мая 2018

Я сделал то же самое. Я использовал веб-сервис.Передайте данные пользователя бэкенду и созданному ответу как извлечение тех же данных пользователя назад. Затем я сохранил ответ в sharedpreference.

     private void loginSuccess(JSONObject mJsonObject) {
    try {
        Snackbar.make(fbLoginButton, "Successfully Loged in!", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show();
        setSharedPreference(AppConstants.SharedKey.USER_ID, mJsonObject.getJSONObject(AppConstants.APIKeys.USER_DETAILS).getString(AppConstants.APIKeys.ID));
        setSharedPreference(AppConstants.SharedKey.USER_NAME, mJsonObject.getJSONObject(AppConstants.APIKeys.USER_DETAILS).getString(AppConstants.APIKeys.USER_NAME));
        setSharedPreference(AppConstants.SharedKey.USER_EMAIL, mJsonObject.getJSONObject(AppConstants.APIKeys.USER_DETAILS).getString(AppConstants.APIKeys.EMAIL));
        setSharedPreference(AppConstants.SharedKey.LOGIN_STATUS, "true");
        startActivity(new Intent(LoginActivity.this, HomeActivity.class));
        this.finish();
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

Попробуйте это:)

...