Поле электронной почты Facebook возвращает null (даже если разрешение "электронная почта" установлено и принято)
Для некоторых пользователей в нашем приложении поле электронной почты возвращает NULL, даже если пользователь предоставил почтовый доступ к приложению.
Когда мы проверяем параметр области действия и достоверность пользовательского токена благодаря инструменту отладчика, все в порядке. Письмо с разрешением принято.
Но когда мы запрашиваем API-интерфейс Graph для электронной почты пользователя с допустимым токеном пользователя, он вообще не отображается.
Есть ли способ, которым пользователь может помешать приложению получать электронную почту, даже если он предоставил разрешение на электронную почту?
Спасибо
Ответы
Ответ 1
У меня была такая же проблема, и я думаю, что узнал, почему:
Если у пользователя есть неподтвержденное электронное письмо в Facebook (например, Facebook отправил ему письмо с подтверждением на адрес электронной почты пользователя, но он не ответил). Facebook НЕ отправит это письмо в ваше приложение, даже если он дал вам разрешения на доступ к электронной почте.
Итак, что я сделал, это использовать его или ее Facebook-адрес электронной почты, если у пользователя есть имя пользователя (то есть [email protected]).
Ответ 2
У меня такая же проблема. Он работает нормально на моем localhost, я использую php SDK для входа в facebook и когда я отправляю свой запрос, он возвращает все поля, такие как адрес электронной почты, имя и т.д. Пользователя, но на сервере как-то он не работает. Он не будет возвращать электронную почту пользователя,
Я сделал много R & D на этом, и у меня есть решение проблемы.:)
$profile = $facebook->api('/me?fields=email,first_name,last_name');
если вы используете php-sdk, просто передает такие поля, как это, он возвращает адрес электронной почты, имя_пользователя и т.д.
Надеюсь, это сработает для всех вас.
спасибо.
Ответ 3
Facebook не отправляет электронное письмо, если пользователь вошел в систему с их номером телефона.
Просмотрите комментарии https://github.com/mkdynamic/omniauth-facebook/issues/61 для получения дополнительной информации.
Ответ 4
В некоторых случаях у Facebook может не быть действительного адреса электронной почты для пользователя:
email: строка, содержащая действительный адрес электронной почты RFC822 - note: this поле может быть нулевым, если для пользователя не доступен адрес электронной почты
см. https://developers.facebook.com/docs/reference/api/user/
Ответ 5
Вы должны предоставить разрешение электронной почты вместе с кнопкой auth.
authButton.setReadPermissions(Arrays.asList("email"));
Ответ 6
Все, что вам нужно знать:
1) Ссылка 1
Некоторые возможные причины:
Нет адреса электронной почты в аккаунте
Нет подтвержденного адреса электронной почты на счету
Нет подтвержденного адреса электронной почты на счету
Пользователь вводил контрольную точку безопасности, которая требовала от них подтверждения своего адреса электронной почты, и они еще этого не сделали.
-
Адрес электронной почты пользователей недоступен
-
Вам также потребуется расширенное разрешение "электронной почты", даже для пользователей, которые имеют действительный, подтвержденный, доступный адрес электронной почты в файле.
2) Ссылка 2
Обратите внимание, что даже если вы запрашиваете разрешение электронной почты, оно не гарантируется вы получите адрес электронной почты. Например, если кто-то подписал Facebook с номером телефона вместо адреса электронной почты, адрес электронной почты поле может быть пустым.
Ответ 7
Facebook предоставит вам идентификатор электронной почты пользователя, если и только тот пользователь имеет подтвержденный идентификатор электронной почты, связанный с его учетной записью. Если ваше приложение может получить идентификатор электронной почты для некоторых пользователей, проблема может быть не с Разработчиком.
Ответ 8
Решение @ozba не применимо, поскольку в facebook теперь отображается предупреждающее сообщение, когда пользователь имеет неподтвержденный адрес электронной почты. Итак, если у вас возникла эта проблема, вам больше нравится, что пользователь зарегистрировался по номеру телефона.
![Message when trying to access email]()
Некоторые возможные причины:
- Нет адреса электронной почты на счете (только номер телефона)
- Нет подтвержденного адреса электронной почты в аккаунте
- Пользователь ввел контрольную точку безопасности, которая потребовала от них подтверждения своего адреса электронной почты, и они еще не сделали этого, адрес электронной почты пользователей недоступен.
Проверьте: https://developers.facebook.com/bugs/298946933534016
Ответ 9
В соответствии с документация:
Обратите внимание, что даже если вы запросите разрешение электронной почты, оно не будет гарантировано, вы получите адрес электронной почты. Например, если кто-то подписался на Facebook с номером телефона вместо адреса электронной почты, поле электронной почты может быть пустым.
Это объясняет, почему у некоторых пользователей есть null
электронная почта!
Ответ 10
вы можете попробовать это, он будет работать
String email = user.getProperty( "email" ). ToString();
String safeEmail = user.asMap(). Get ( "email" ). ToString();
Ответ 11
Вам нужно еще одно разрешение от facebook.
включить (about_me) разрешение на установку facebook dev, а также в ваше приложение или код.
Ответ 12
Я прочитал предыдущие ответы, но хотя некоторые из них верны, как если бы пользователь не подтвердил электронную почту, а номер мобильного телефона, эта ошибка повторяется во многих случаях, игнорируя способ запроса информации с помощью графика FB api. Скажем, ваш логин был успешно выполнен, и теперь у вас есть токен доступа и идентификатор пользователя, но все же, вы не можете видеть интересующие вас адреса электронной почты и другие поля. Используйте этот запрос после подтверждения состояния входа в систему:
FB.api(
'/me',
'GET',
{"fields":"id,name,birthday,email,about,cover"},
function(response) {
// Insert your code here
}
);
зависит от разрешений, которые вы запросили, теперь вы сможете получить дополнительную информацию в соответствии с вашими потребностями.
Ответ 13
$loginUrl = $facebook->getLoginUrl(
array(
'req_perms' => 'email'
)
);