当前位置: 首页 > 面试题库 >

如何使用Facebook SDK Android获取Facebook照片,全名,性别

姬念
2023-03-14
问题内容

我正在使用一个Android应用程序,其中使用我们的应用程序登录Facebook的所有Android用户都需要从Facebook中提取他的照片,性别和全名。我为此使用Facebook
SDK。

借助Facebook SDK,我可以登录Facebook,但是我不确定如何从Facebook中提取他的照片,性别和全名?

以下是我用来登录Facebook的代码。我遵循了本教程

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();
    }
    }
}

谁能告诉我在上一课中我需要进行哪些更改才能获得我需要的所有三个信息。据我所知,如果我能够获得该人的Facebook唯一ID,我就能获得我猜到的所有信息。有什么想法吗?


问题答案:

StatusCallback函数中,您可以从GraphUser对象获取详细信息

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());
                }
            });
        }
    }
}


 类似资料:
  • 从post_id=each_post_id的流中选择附件 考虑到我将不得不发送这个请求每一个帖子和FQL将很快消失,我正在寻找一个替代方案。

  • 问题内容: 我需要在活动中获得并显示照片库中最近拍摄的3张照片,而无需任何点击。 完成此步骤后,滚动时,我应该以3 x 3的方式拍摄其他照片。 您知道快速执行此操作的正确方法吗?谢谢。 问题答案: 这是使用适用于iOS 8+设备的框架的解决方案:

  • 我们正在整合微软Azure广告与我们的应用程序。我正在尝试使用微软图形API(https://graph.microsoft.com/v1.0/users/{id | userPrincipalName }/photo/$ value)获取用户个人资料图片。但这对我不起作用。我已经在应用程序中给出了该API所需的所有权限,但每次都得不到响应。你能告诉我我错过了什么配置吗? 答复: 谢谢

  • 问题内容: 我想在模板中显示current_user的图片。使用django-allauth时如何访问用户的Facebook ID? 问题答案: 对于通过社交帐户注册的每个用户,都可以使用一个实例。此模型具有的外键。请注意,用户可以将多个社交网络帐户连接到其本地帐户,因此实际上可能有多个实例可用。 你如何处理此问题取决于项目。我可以想象有人想要在本地复制个人资料图片,或者你可能希望优先选择Face

  • 本文向大家介绍Android开发之使用ExifInterface获取拍照后的图片属性,包括了Android开发之使用ExifInterface获取拍照后的图片属性的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android开发之使用ExifInterface获取拍照后的图片属性。分享给大家供大家参考,具体如下: 更多关于Android开发相关内容感兴趣的读者可查看本站专题:《Androi

  • 我尝试了DPZFlickr,它在尝试上传时返回以下内容: 检查Flickr API的响应,它与尝试Dantsu版本的phpFlickr时返回的结果相同,返回如下: 我卷了自己的卷曲,返回如下: