Получение дат с помощью android facebook sdk v4.0

Я успешно установил Android SDK v4.0 в своей студии. Я могу правильно войти в систему, используя LoginButton.

Пока все в порядке.

Я хочу иметь строку для каждого интересующего меня сбора пользовательских данных, например:

Имя строки = USER_NAME Строка = почта USER_MAIL.

С 3.0 sdk было все нормально.

С новым SDK я не могу этого сделать, я следовал инструкциям в этой теме:

Android Facebook 4.0 SDK Как получить электронную почту, дату рождения и пол пользователя

Я читал в документации и в различных темах об "Использовании Graph API", но не могу получить нужные мне данные и присвоить их каждой строке.

это мой код (как сейчас):

LoginButton loginButton;
private CallbackManager mCallbackManager;
//...

loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList("public_profile, email, user_birthday, user_friends"));
        mCallbackManager = CallbackManager.Factory.create();

//...

        loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                // App code
                Toast.makeText(Ready.this, "Connected!", Toast.LENGTH_SHORT).show();

                GraphRequest request = GraphRequest.newMeRequest(
                        loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(
                                    JSONObject object,
                                    GraphResponse response) {
                                // Application code
                                Log.v("LoginActivity", response.toString());
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,email,gender, birthday");
                request.setParameters(parameters);
                request.executeAsync();

            }
            @Override
            public void onCancel() {
                // App code
                Log.v("LoginActivity", "cancel");
            }

            @Override
            public void onError(FacebookException exception) {
                // App code
                Log.v("LoginActivity", exception.getCause().toString());
            }
        });

Как я уже говорил, я отлично подключаюсь к facebook, но не знаю, как назначить, например, адрес электронной почты для строки и имя для другой строки.

Заранее большое спасибо.


person Sergio76    schedule 08.04.2015    source источник


Ответы (2)


Если вы имели в виду, как получить имя и адрес электронной почты из GraphRequest, это просто:

            GraphRequest request = GraphRequest.newMeRequest(
                    loginResult.getAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() { 
                        @Override 
                        public void onCompleted( 
                                JSONObject object,
                                GraphResponse response) {
                            // Application code 
                            try {
                                String id=object.getString("id");
                                String name=object.getString("name");
                                String email=object.getString("email");
                                String gender=object.getString("gender");
                                String birthday=object.getString("birthday");
                                //do something with the data here
                            } catch (JSONException e) {
                                e.printStackTrace(); //something's seriously wrong here
                            }
                        } 
                    }); 
            Bundle parameters = new Bundle();
            parameters.putString("fields", "id,name,email,gender, birthday");
            request.setParameters(parameters);
            request.executeAsync();

GraphResponse содержит такие сведения, как используемый HTTPConnect, обнаруженные ошибки и т. д. Если все идет, как ожидалось, для получения запрошенных данных требуется только JSONObject object.

person Kai    schedule 11.04.2015
comment
Просто примечание: вам нужно будет обернуть object.getString() в операторе try-catch. - person Menelaos Kotsollaris; 13.04.2015

Мой рабочий код для получения информации о профиле

    callbackManager = CallbackManager.Factory.create();
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {

                    profile = Profile.getCurrentProfile();
                    if(profile != null){
                            fbUserId = profile.getId();
                            editor.putString("UserName",profile.getFirstName()+" "+profile.getLastName());                            
                            editor.putString("FbId",profile.getId()); 
                            editor.putString("ProfilePicture",profile.getProfilePictureUri(20,20).toString());                           
                            editor.commit();
                    }
                }

                @Override
                public void onCancel() {
                }

                @Override
                public void onError(FacebookException e) {

                }


            });

И вы можете отслеживать изменения профиля здесь:

    profileTracker = new ProfileTracker() {
        @Override
        protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {

            if(currentProfile != null){
                fbUserId = currentProfile.getId();

                if(!sharedPreferences.contains("UserName")){
                    editor.putString("UserName",currentProfile.getFirstName()+" "+currentProfile.getLastName());
                }
                if(!sharedPreferences.contains("FbId")){
                    editor.putString("FbId",currentProfile.getId());
                }
                if(!sharedPreferences.contains("ProfilePicture")){
                    editor.putString("ProfilePicture",currentProfile.getProfilePictureUri(100,100).toString());
                }

                editor.commit();
            }
        }
    };
person Deepika    schedule 29.04.2015