Как получить зарегистрированный адрес электронной почты пользователя с помощью Graph Request в Android Android sdk 4.0
Я пытаюсь получить адрес электронной почты пользователя после входа в мое приложение для Android с помощью Facebook (sdk 4.0). Я читал много сообщений, спрашивающих одно и то же, но я все еще не мог заставить его работать. Я просто регистрирую пользователя с помощью кода
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends", "email"));
Затем я делаю запрос API Графа с помощью
LoginManager.getInstance().registerCallback(fbCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
System.out.println(loginResult.getAccessToken().toString());
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
System.out.println(object.toString());
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "email");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
Выход только
{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[public_profile, contact_email, user_friends, email, basic_info]}
{"id":"xxxxxxxxxxxxxxx"}
Даже если я удалю часть "полей", я получаю JSON с кучей общедоступной информации пользователя, но никогда не получаю адрес электронной почты. Я тестирую это на своей учетной записи Facebook, и у меня есть связанный с ним адрес электронной почты.
Ответы
Ответ 1
Вы можете получить зарегистрированную электронную почту пользователя следующим образом. Но обратите внимание, что
-
Они не гарантируют, что вы получите адрес электронной почты читайте здесь.
-
В некоторых случаях, хотя пользователь предоставил электронное письмо, оно не будет отправлено по запросу, если сообщение недействительно.
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest( AccessToken.getCurrentAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object,GraphResponse response) {
try {
String email=object.getString("email");
Log.d(TAG + "user email ", email);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
request.executeAsync();
}
Ответ 2
Вот полный код, через который я получаю все данные, которые нам нужны из facebook
login_facebook_button = (LoginButton) findViewById(R.id.login_facebook_button);
login_facebook_button.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email", "user_birthday"));
//LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
// Callback registration
login_facebook_button.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Log.e("onSuccess", "--------" + loginResult.getAccessToken());
Log.e("Token", "--------" + loginResult.getAccessToken().getToken());
Log.e("Permision", "--------" + loginResult.getRecentlyGrantedPermissions());
Profile profile = Profile.getCurrentProfile();
Log.e("ProfileDataNameF", "--" + profile.getFirstName());
Log.e("ProfileDataNameL", "--" + profile.getLastName());
Log.e("Image URI", "--" + profile.getLinkUri());
Log.e("OnGraph", "------------------------");
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
Log.e("GraphResponse", "-------------" + response.toString());
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link,gender,birthday,email");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
И ответ вызова в журнале:
{Response: responseCode: 200, graphObject: {"id":"896337040431723","name":"Aneh Thakur","link":"https:\/\/www.facebook.com\/app_scoped_user_id\/896337040431723\/","gender":"male","birthday":"08\/05\/1992","email":"[email protected]"}, error: null}
Надеюсь, это поможет вам.
Ответ 3
fbLoginButton.setReadPermissions("public_profile", "user_friends", "user_photos", "email", "user_birthday", "public_profile", "contact_email");
"contact_email" - это разрешение электронной почты, я отсутствовал, когда я добавил его к тому, чтобы я работал.