如何从Android应用程序中的Facebook sdk获取电子邮件ID?

我在我的Android应用程序中集成了Facebook登录。 我想获取登录用户的电子邮件ID。 我怎么得到它?

private void loginToFacebook() { Session.openActiveSession(this, true, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { Log.i(TAG, "Access Token" + session.getAccessToken()); Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { try { userID =user.getId(); provider="facebook"; userName=user.getUsername(); firstName=user.getFirstName(); lastName=user.getLastName(); Log.d("****User****", "details:" + user); }catch(Exception e){ 

这是我的代码。 我使用Request.GraphUserCallback()方法,但此方法没有电子邮件的响应。

在调用Session.openActiveSession之前,请执行此操作以获取权限添加:

 List permissions = new ArrayList(); permissions.add("email"); 

Session.openActiveSession()的最后一个参数应该是permissions 。 现在您可以访问user.getProperty("email").toString()

编辑:

这是我做facebook授权的方式:

 List permissions = new ArrayList(); permissions.add("email"); loginProgress.setVisibility(View.VISIBLE); //start Facebook session openActiveSession(this, true, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { //make request to the /me API Log.e("sessionopened", "true"); Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { String firstName = user.getFirstName(); String lastName = user.getLastName(); String id = user.getId(); String email = user.getProperty("email").toString(); Log.e("facebookid", id); Log.e("firstName", firstName); Log.e("lastName", lastName); Log.e("email", email); } } }); } } }, permissions); 

将此方法添加到您的活动中:

 private static Session openActiveSession(Activity activity, boolean allowLoginUI, Session.StatusCallback callback, List permissions) { Session.OpenRequest openRequest = new Session.OpenRequest(activity).setPermissions(permissions).setCallback(callback); Session session = new Session.Builder(activity).build(); if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) { Session.setActiveSession(session); session.openForRead(openRequest); return session; } return null; } 

根据Egor N的建议,我改变了我的旧代码

 Session.openActiveSession(this, true, statusCallback); 

这个新的:

 List permissions = new ArrayList(); permissions.add("email"); Session.openActiveSession(this, true, permissions, statusCallback); 

现在FB询问用户有关电子邮件的许可,我可以在回复中阅读。

试试这篇文章。 希望您的问题能够得到解决点击此处

顺便说一下,你需要使用user.asMap().get("email").toString()); 用于接收用户电子邮件ID。 此外,您需要将其分配到某些标签,如lblEmail.setText ,其中lblEmail是Textview。