Как получить идентификатор пользователя FB с помощью кнопки входа в Facebook в приложении для Android

Я разрабатываю приложение, в котором использую кнопку входа Facebook из SDK. Я могу получить access_token пользователя, но я также хочу userID. Я перепробовал почти все, но безуспешно. Я использовал учебник facebook для достижения этого. Вот ссылка: Кнопка входа в Facebook

Пожалуйста, помогите мне получить userID с той же кнопки входа.

Любая помощь будет оценена по достоинству.


person Anupam    schedule 22.03.2013    source источник


Ответы (8)


После успешного входа в систему вам необходимо вызвать следующий код. Вы можете получить данные о вошедшем в систему пользователе с идентификатором в ответ.

Session session = Session.getActiveSession();
Request request = Request.newGraphPathRequest(session, "me", null);
com.facebook.Response response = Request.executeAndWait(request)
person Santhosh    schedule 22.03.2013
comment
Еще проще, класс Request имеет вспомогательный метод newMeRequest: developers.facebook.com/docs/reference/android/3.0/ - person Ming Li; 26.03.2013

Используйте метод getId класса FB Profile (Facebook SDK 4.0).

  Profile profile = Profile.getCurrentProfile();
  System.out.println(profile.getFirstName());
  System.out.println(profile.getId());
person Deepika    schedule 03.04.2015

Вы должны использовать новый facebook sdk 3.0 и

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
        if (Session.getActiveSession().isOpened()) {
            // Request user data and show the results
            Request.executeMeRequestAsync(Session.getActiveSession(), new Request.GraphUserCallback() {

                @Override
                public void onCompleted(GraphUser user, Response response) {
                    // TODO Auto-generated method stub
                    if (user != null) {
                        // Display the parsed user info
                        Log.v(TAG, "Response : " + response);
                        Log.v(TAG, "UserID : " + user.getId());
                        Log.v(TAG, "User FirstName : " + user.getFirstName());

                    }
                }

            });
        }
    }
person Ketan Mehta    schedule 01.07.2013
comment
с чего мы начнем деятельность? Вы поделились, что мы должны сделать в конце, но не могли бы вы показать мне, с чего начать намерение? - person alicanbatur; 12.12.2013
comment
executeMeRequestAsync устарел. Вместо этого используйте newMeRequest - person Muzikant; 14.02.2014

На основе ответа @Ketan Mehta (https://stackoverflow.com/a/17397931/624109), в котором используется устаревший API, вы должны использовать следующий код:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);

    if (Session.getActiveSession().isOpened())
    {
        // Request user data and show the results
        Request.newMeRequest(Session.getActiveSession(), new GraphUserCallback()
        {
            @Override
            public void onCompleted(GraphUser user, Response response)
            {
                if (null != user)
                {
                    // Display the parsed user info
                    Log.v(TAG, "Response : " + response);
                    Log.v(TAG, "UserID : " + user.getId());
                    Log.v(TAG, "User FirstName : " + user.getFirstName());

                }
            }
        }).executeAsync();
    }
}
person Muzikant    schedule 14.02.2014

Поскольку все эти ответы предназначены для более старого SDK, для SDK 4.0 вот код

loginButton.registerCallback(callbackManager, new    FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
            Profile profile = Profile.getCurrentProfile();

            Log.d("facebook",profile.getId());
        }

        @Override
        public void onCancel() {
            // App code
            Log.d("facebook","failed");
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
            Log.d("facebook","failed");
        }
    });

я искал то же самое, похоже, что объект Session больше не доступен, поэтому выше приведен новый способ получить профиль пользователя и идентификатор пользователя.

person vishal dharankar    schedule 16.05.2015

API графа Facebook позволяет вам совершать вызовы, которые возвращают JSON, который вы можете анализировать в Android с помощью JSONObject, подобного приведенному ниже коду.

JSONObject me = new JSONObject(fb.request("me"));
String id = me.getString("id");
person RajaReddy PolamReddy    schedule 22.03.2013
comment
#RajaReddy PolamReddy: как вы определили переменную fb? И вы имеете в виду SDK 3.0 (или 2.0 с устаревшим классом Facebook)? - person PeteH; 27.06.2013
comment
это старый facebook SDK. на этот раз у него есть класс Facebook в facebook sdk - person RajaReddy PolamReddy; 12.07.2015

Вы можете получить идентификатор пользователя с помощью этого кода:

document.getElementById('status').innerHTML =
   'Welcome ' + response.name + '!' + "<br />"+
   'Your user ID is : ' + response.id;
person tubefavorites.com    schedule 11.07.2015

person    schedule
comment
по какой-то причине Profile profile = Profile.getCurrentProfile(); и profile.getUserId() не работают с текущим SDK. Так что это лучшее решение на данный момент. - person Ege Kuzubasioglu; 28.02.2017