wake-up-neo.com

Wie erhält man ein Facebook-Foto, einen vollständigen Namen und ein Geschlecht mit dem Android SDK von Facebook?

Ich arbeite an einer Android-Anwendung, in der jeder Android-Benutzer, der sich über unsere Anwendung bei Facebook anmeldet, sein Foto, sein Geschlecht und seinen vollständigen Namen von Facebook extrahieren muss. Ich benutze dazu Facebook SDK.

Mit Hilfe von Facebook SDK kann ich mich bei Facebook anmelden, aber ich weiß nicht, wie ich sein Foto, Geschlecht und den vollständigen Namen aus dem Facebook extrahieren kann.

Unten ist der Code, den ich für die Anmeldung bei Facebook verwende. Ich folgte diesem Tutorial

public class SessionLoginFragment extends Fragment {

    private static final String URL_PREFIX_FRIENDS = "https://graph.facebook.com/me/friends?access_token=";

    private TextView textInstructionsOrLink;
    private Button buttonLoginLogout;
    private Session.StatusCallback statusCallback = new SessionStatusCallback();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment, container, false);

    buttonLoginLogout = (Button) view.findViewById(R.id.buttonLoginLogout);
    textInstructionsOrLink = (TextView) view.findViewById(R.id.instructionsOrLink);

    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);

    Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
        session = Session.restoreSession(getActivity(), null, statusCallback,
            savedInstanceState);
        }
        if (session == null) {
        session = new Session(getActivity());
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
        session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
        }
    }

    updateView();

    return view;
    }

    @Override
    public void onStart() {
    super.onStart();
    Session.getActiveSession().addCallback(statusCallback);
    }

    @Override
    public void onStop() {
    super.onStop();
    Session.getActiveSession().removeCallback(statusCallback);
    }

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

    @Override
    public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Session session = Session.getActiveSession();
    Session.saveSession(session, outState);
    }

    private void updateView() {
    Session session = Session.getActiveSession();
    if (session.isOpened()) {
        Log.d("Hello", URL_PREFIX_FRIENDS + session.getAccessToken());
        Intent i = new Intent(getActivity(), ThesisProjectAndroid.class);
        startActivity(i);

    } else {
        Log.d("Hello", "Login Failed");
        textInstructionsOrLink.setText(R.string.instructions);
        buttonLoginLogout.setText(R.string.login);
        buttonLoginLogout.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            onClickLogin();
        }
        });
    }
    }

    private void onClickLogin() {
    Session session = Session.getActiveSession();
    if (!session.isOpened() && !session.isClosed()) {
        session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
    } else {
        Session.openActiveSession(getActivity(), this, true, statusCallback);
    }
    }

    private void onClickLogout() {
    Session session = Session.getActiveSession();
    if (!session.isClosed()) {
        session.closeAndClearTokenInformation();
    }
    }

    private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        updateView();
    }
    }
}

Kann mir jemand sagen, wo ich Änderungen in der obigen Klasse vornehmen muss, um alle drei Informationen zu erhalten, die ich brauche. Soweit ich weiß, wenn ich eine eindeutige Kennung für diese Person erhalten kann, kann ich alle Informationen erhalten, die ich schätze. Irgendwelche Gedanken?

22
arsenal

In Ihrer StatusCallback-Funktion können Sie die Details vom GraphUser-Objekt abrufen 

private class SessionStatusCallback implements Session.StatusCallback {
    private String fbAccessToken;

    @Override
    public void call(Session session, SessionState state, Exception exception) {
        updateView();
        if (session.isOpened()) {
            fbAccessToken = session.getAccessToken();
            // make request to get facebook user info
            Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                @Override
                public void onCompleted(GraphUser user, Response response) {
                    Log.i("fb", "fb user: "+ user.toString());

                    String fbId = user.getId();
                    String fbAccessToken = fbAccessToken;
                    String fbName = user.getName();
                    String gender = user.asMap().get("gender").toString();
                    String email = user.asMap().get("email").toString();

                    Log.i("fb", userProfile.getEmail());
                }
            });
        }
    }
}
23
chrisbjr

Mit der neuen API und Ihrem benutzerdefinierten Button für Facebook können Sie den folgenden Code verwenden:

füge gradle in deine gradle-Datei ein:

 compile 'com.facebook.Android:facebook-Android-sdk:4.20.0'

  Newer sdk does not need initializaion .

    private CallbackManager callbackManager;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(LoginActivity.this);//Is now depricated
    setContentView(R.layout.activity_login);
    callbackManager = CallbackManager.Factory.create();
    }

onActivityResult:

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

Button klicken:

   @Override
    public void onClick(View v) {
    switch (v.getId())
    {
        case R.id.btn_f_sign_in_login:
            LoginManager.getInstance().logInWithReadPermissions(
                    this,
                    Arrays.asList("user_friends", "email", "public_profile"));

            LoginManager.getInstance().registerCallback(callbackManager,
                    new FacebookCallback<LoginResult>() {
                        @Override
                        public void onSuccess(LoginResult loginResult) {
                            setFacebookData(loginResult);
                        }

                        @Override
                        public void onCancel() {
                        }

                        @Override
                        public void onError(FacebookException exception) {
                        }
                    });
            break;
    }
}

setFacebookData:

     private void setFacebookData(final LoginResult loginResult)
       {
    GraphRequest request = GraphRequest.newMeRequest(
            loginResult.getAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    // Application code
                    try {
                        Log.i("Response",response.toString());

                        String email = response.getJSONObject().getString("email");
                        String firstName = response.getJSONObject().getString("first_name");
                        String lastName = response.getJSONObject().getString("last_name");
                        String gender = response.getJSONObject().getString("gender");



                        Profile profile = Profile.getCurrentProfile();
                        String id = profile.getId();
                        String link = profile.getLinkUri().toString();
                        Log.i("Link",link);
                        if (Profile.getCurrentProfile()!=null)
                        {
                            Log.i("Login", "ProfilePic" + Profile.getCurrentProfile().getProfilePictureUri(200, 200));
                        }

                       Log.i("Login" + "Email", email);
                        Log.i("Login"+ "FirstName", firstName);
                        Log.i("Login" + "LastName", lastName);
                        Log.i("Login" + "Gender", gender);


                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
    Bundle parameters = new Bundle();
    parameters.putString("fields", "id,email,first_name,last_name,gender");
    request.setParameters(parameters);
    request.executeAsync();
}

facebook-Freunde herunterladen Wer hat Ihre App heruntergeladen:

ersetzen Sie parameters.putString ("Felder", "ID, E-Mail, Vorname, Nachname");

mit parameters.putString ("Felder", "ID, E-Mail, Vorname, Nachname, Freunde");

Fügen Sie unten Logik hinzu, um Freunde Daten zu erhalten

                if (object.has("friends")) {
                  JSONObject friend = object.getJSONObject("friends");
                  JSONArray data = friend.getJSONArray("data");
                  for (int i=0;i<data.length();i++){
                 Log.i("idddd",data.getJSONObject(i).getString("id"));
                  }
             }
27
Rajat

mit neuer API

private void importFbProfilePhoto() {

    if (AccessToken.getCurrentAccessToken() != null) {

        GraphRequest request = GraphRequest.newMeRequest(
                AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject me, GraphResponse response) {

                        if (AccessToken.getCurrentAccessToken() != null) {

                            if (me != null) {

                                String profileImageUrl = ImageRequest.getProfilePictureUri(me.optString("id"), 500, 500).toString();
                                Log.i(LOG_TAG, profileImageUrl);

                            }
                        }
                    }
                });
        GraphRequest.executeBatchAsync(request);
    }
}
5
Araik Grygorian

Siehe folgende Tutorials

Sie müssen eine Anfrage stellen, um das GraphUser-Object abzurufen. Mit diesem Objekt können Sie die gewünschten Informationen erhalten: GraphUser user.getName();, user.getId(); usw.

1
mbecker

wenn Sie das Nullprofil erhalten, verwenden Sie Profile Tracker if (Profile.getCurrentProfile () == null) {

            mProfileTracker = new ProfileTracker() {
                @Override
                protected void onCurrentProfileChanged(Profile profile, Profile profile2) {
                    // profile2 is the new profile
                    Log.d("facebook - profile", profile2.getFirstName());
                    profile_firstname=profile2.getFirstName();
                    profile_lastname=profile2.getLastName();
                   // Toast.makeText(LoginActivity.this, "User ID : "+ profile2.getFirstName(), Toast.LENGTH_LONG).show();
                    mProfileTracker.stopTracking();
                }
            };

        }
0
Vishal

Mit Sdk v4.28 und für angemeldete Benutzer als auf die Frage ist es einfach, Profile.getCurrentProfile() in (oder nach) dem erfolgreichen Rückruf von LoginManager aufzurufen:

facebookCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(facebookCallbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult{ 
                    //Profile.getCurrentProfile()
                }
                @Override
                public void onCancel() {
                }
                @Override
                public void onError(FacebookException exception) {
                }
            });

Sie könnten Graph Api verwenden, aber doc selbst sagt oben für angemeldete Benutzer.

0