使用Facebook SDK 3.0.1 for Android获取电子邮件地址

gok*_*urt 1 android facebook facebook-graph-api facebook-android-sdk

我目前正在开发一个旨在通过Facebook帐户验证任何用户的应用程序.

我无法从用户的帐户获取用户电子邮件.我的代码如下

    private void signInWithFacebook() {

    SessionTracker mSessionTracker = new SessionTracker(getBaseContext(), new StatusCallback() {

        public void call(Session session, SessionState state, Exception exception) {

        }
    }, null, false);

    String applicationId = Utility.getMetadataApplicationId(getBaseContext());
    Session mCurrentSession = mSessionTracker.getSession();

    if (mCurrentSession == null || mCurrentSession.getState().isClosed()) {
        mSessionTracker.setSession(null);
        Session session = new Session.Builder(getBaseContext()).setApplicationId(applicationId).build();
        Session.setActiveSession(session);
        mCurrentSession = session;
    }

    if (!mCurrentSession.isOpened()) {
        Session.OpenRequest openRequest = null;
        openRequest = new Session.OpenRequest(FacebookLoginActivity.this);

        if (openRequest != null) {
            openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
            openRequest.setPermissions(Arrays.asList("user_birthday", "email", "user_location"));
            openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);

            mCurrentSession.openForRead(openRequest);
        }
    }else {
        Request.executeMeRequestAsync(mCurrentSession, new Request.GraphUserCallback() {
              public void onCompleted(GraphUser user, Response response) {
                  Log.w("myConsultant", user.getId() + " " + user.getName() + " " + user.getLink() + "  "+ response);
              }
            });
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用面向Android的Facebook SDK 3.0.1.我已经设置了Facebook Graph Api所需的权限.在响应xml中,没有像电子邮件这样的字段.Facebook Sdk文档不够好,我不知道如何获取电子邮件地址.

非常感谢您的及时回复.

提前致谢,

Min*_* Li 14

电子邮件不是返回的默认字段.相反,您应该创建一个meRequest,并传递一个参数,如:fields = email.

Request me = Request.newMeRequest(mCurrentSession, new GraphRequestCallback() {...});
Bundle params = me.getParameters();
params.putString("fields", "email,name");
me.setParameters(params);
me.executeAsync();
Run Code Online (Sandbox Code Playgroud)

  • "电子邮件不是返回的默认字段" - 这是错误的陈述.设置`email`权限后,`GraphUser`将包含电子邮件值.`User`表包含需要显式请求的所有属性(field = property),而不是:https://developers.facebook.com/docs/reference/api/user/. (2认同)