在此代码中,GraphUser不会返回电子邮件ID和联系号码。
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
// userInfoTextView.setVisibility(View.VISIBLE);
// Request user data and show the results
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
// Display the parsed user info
String email= (String) response.getGraphObject().getProperty("email");
System.out.println("yahooooooooooo "+email);
buildUserInfoDisplay(user);
}
}
});
} else if (state.isClosed()) {
Log.i(TAG, "Logged out...");
}
}
private String buildUserInfoDisplay(GraphUser user) {
StringBuilder userInfo = new StringBuilder("");
// Example: typed access (name)
// - no special permissions required
userInfo.append(String.format("Name: %s\n\n",
user.getName()));
// Example: typed access (birthday)
// - requires user_birthday permission
userInfo.append(String.format("Birthday: %s\n\n",
user.getBirthday()));
userInfo.append(String.format("Birthday: %s\n\n",
user.getBirthday()));
userInfo.append(String.format("Gender: %s\n\n",
user.getProperty("gender")));
userInfo.append(String.format("Iddddddd: %s\n\n",
user.getId()));
// Example: partially typed access, to location field,
// name key (location)
// - requires user_location permission
userInfo.append(String.format("Location: %s\n\n",
user.getLocation().getProperty("name")));
// Example: access via property name (locale)
// - no special permissions required
userInfo.append(String.format("Locale: %s\n\n",
user.getProperty("locale")));
return userInfo.toString();
}
答案 0 :(得分:9)
默认情况下,您不会收到电子邮件,对于您必须指定权限的电子邮件
Session.StatusCallback statusCallback = new Session.StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
if(session.isOpened())
{
Request.executeMeRequestAsync(session, new Request.GraphUserCallback()
{
@Override
public void onCompleted(GraphUser user, Response response)
{
if(user != null)
{
try
{
System.out.println("Graph Inner Json"+user.getInnerJSONObject());
String email = user.getInnerJSONObject().getString("email");
}
}
}
}
}
}
YourActivityName.openActiveSession(this, true, statusCallback);
这是我们指定权限的openActiveSession()
private static Session openActiveSession(Activity activity, boolean allowLoginUI, Session.StatusCallback statusCallback)
{
OpenRequest openRequest = new OpenRequest(activity);
openRequest.setPermissions(Arrays.asList("user_birthday", "email"));
openRequest.setCallback(statusCallback);
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;
}
并且onActivityResult()
内部不要忘记
if(Session.getActiveSession() != null)
{
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
答案 1 :(得分:1)
我有另一种情况,我传递所有权限但仍然收到错误“没有电子邮件的价值”。这背后的原因是没有为该Facebook帐户验证主要电子邮件(要查看Facebook中的主要电子邮件,请转到帐户设置 - >电子邮件)。 因此,如果没有为Facebook帐户验证主电子邮件,那么您将始终收到此错误。请确保您正在访问的Facebook帐户有一个经过验证的主电子邮件。