Как да получите FB User ID с помощта на Facebook Login Button в приложението за Android

Разработвам приложение, в което използвам Facebook бутон за влизане от SDK. Мога да получа access_token от потребителя, но искам и userID. Опитах почти всичко, но не успях. Използвах фейсбук урок за постигане на това. Ето връзката: Бутон за влизане във Facebook

Моля, помогнете ми да получа userID от същия бутон за влизане.

Всякакъв вид помощ ще бъде оценена.


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


Отговори (8)


След успешно влизане, трябва да извикате следния код. Можете да получите данните за влезлия потребител с id в отговор.

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 graph ви позволява да извършвате обаждания, които връщат 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? И имате предвид 3.0 SDK (или 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