it-swarm.com.ru

Поле электронной почты Facebook возвращает ноль (даже если разрешение "электронная почта" установлено и принято)

Для некоторых пользователей в нашем приложении поле электронной почты возвращает NULL, даже если пользователь предоставил доступ к приложению по электронной почте Когда мы проверяем параметр области действия и действительность пользовательского токена благодаря инструменту отладчика, все в порядке , Письмо с разрешением принято Но когда мы запрашиваем API Graph для электронной почты пользователя с действительным токеном, оно вообще не появляется.

Есть ли способ, которым пользователь мог бы запретить приложению получать его электронную почту, даже если он дал разрешение электронной почты?

Спасибо

47
Benjamin Naïm

У меня была та же проблема, и я думаю, что выяснил, почему: Если у пользователя есть неподтвержденное электронное письмо в Facebook (то есть Facebook отправил ему письмо с подтверждением на адрес электронной почты пользователя, но он не ответил) Facebook НЕ БУДЕТ передавать это по электронной почте в ваше приложение, даже если он дал вам разрешения электронной почты.

Поэтому я использовал его или ее адрес электронной почты Facebook, если у пользователя есть имя пользователя (то есть [email protected]).

90
ozba

У меня такая же проблема. Он отлично работает на моем локальном хосте, я использую php SDK для входа в Facebook, и когда я отправляю свой запрос, он возвращает все поля, такие как адрес электронной почты, имя пользователя и т.д., Но на сервере как-то не работает. Он не возвращает электронную почту пользователя . Я сделал много исследований и разработок, и у меня есть решение этой проблемы. :)

$profile = $facebook->api('/me?fields=email,first_name,last_name');

если вы используете php-sdk, просто пропускаете такие поля, как это, он возвращает адрес электронной почты, имя и т. д. ... Надеется, что это работает для вас всех .. спасибо.

9
user3020691

Facebook не отправляет электронное письмо, если пользователь вошел в систему со своим номером телефона. Посмотрите комментарии https://github.com/mkdynamic/omniauth-facebook/issues/61 для получения дополнительной информации.

7
user2468170

Все, что тебе нужно знать:

1) Ссылка 1

Некоторые возможные причины: 

Нет адреса электронной почты в учетной записи 

Нет подтвержденного адреса электронной почты в аккаунте

Нет подтвержденного адреса электронной почты в аккаунте 

Пользователь ввел контрольно-пропускной пункт безопасности, который потребовал от них подтвердить свой адрес электронной почты, и они еще не сделали этого

  • Адрес электронной почты пользователя недоступен

  • Вам также необходимо расширенное разрешение для электронной почты, даже для пользователей, которые имеют действительный, подтвержденный, доступный адрес электронной почты в файле.

2) Ссылка 2

Обратите внимание, что даже если вы запрашиваете разрешение электронной почты, оно не гарантируется Вы получите адрес электронной почты. Например, если кто-то подписался на Facebook с номером телефона вместо адреса электронной почты, адрес электронной почты поле может быть пустым.

3
gbk

Вы должны дать разрешение по электронной почте вместе с кнопкой авторизации.

authButton.setReadPermissions(Arrays.asList("email"));
3
varghesekutty

В некоторых случаях Facebook может не иметь действительного адреса электронной почты для пользователя:

email: строка, содержащая действительный адрес электронной почты RFC822 - примечание: это поле может быть пустым, если адрес электронной почты для пользователя недоступен

см. https://developers.facebook.com/docs/reference/api/user/

2
J Starr

Решение @ozba не применимо, потому что теперь в Facebook появляется предупреждение, когда у пользователя есть неподтвержденный адрес электронной почты. Так что, если у вас возникла эта проблема, вам больше нравится, что пользователь зарегистрировался по номеру телефона.Message when trying to access email

Некоторые возможные причины:

  • Нет адреса электронной почты в учетной записи (только номер телефона)
  • Нет подтвержденного адреса электронной почты в аккаунте
  • Пользователь вошел в контрольно-пропускной пункт безопасности, который потребовал от него подтвердить свой адрес электронной почты, а они еще не сделали этого, поэтому адрес электронной почты пользователя недоступен.

Проверьте: https://developers.facebook.com/bugs/298946933534016

1
Priyanshu Chauhan

Facebook предоставит вам идентификатор электронной почты пользователя, если только этот пользователь имеет подтвержденный идентификатор электронной почты, связанный с его учетной записью. Если ваше приложение может получить идентификатор электронной почты для некоторых пользователей, проблема может быть не в Разработчике.

1
veena s kurup

Я прочитал предыдущие ответы, но, хотя некоторые из них верны, например, если пользователь не подтвердил адрес электронной почты, а номер мобильного телефона, во многих случаях эта ошибка возникает из-за игнорирования, как запросить информацию, используя график API FB. Допустим, ваш вход в систему был успешно выполнен, и теперь у вас есть токен доступа и идентификатор пользователя и т.д., Но вы все равно не можете видеть электронную почту и другие интересующие вас поля. Продолжайте использовать этот запрос после подтверждения статуса входа в систему как подключенного:

FB.api(
  '/me',
  'GET',
  {"fields":"id,name,birthday,email,about,cover"},
  function(response) {
      // Insert your code here
  }
);

в зависимости от запрошенных вами разрешений вы теперь сможете получать дополнительную информацию в соответствии с вашими потребностями.

1
willyMon

Согласно документации :

Обратите внимание, что даже если вы запрашиваете разрешение электронной почты, это не гарантирует, что вы получите адрес электронной почты. Например, если кто-то подписался на Facebook с номером телефона вместо адреса электронной почты, поле электронной почты может быть пустым.

Это объясняет, почему у некоторых пользователей есть null электронная почта!

1
d-_-b

Вам нужно еще одно разрешение от Facebook.

включить (about_me) разрешение на настройку разработчика в Facebook, а также в ваше приложение или код.

0
Prasanna Anbu

вы можете попробовать это, это будет работать String email = user.getProperty ("email"). toString (); String safeEmail = user.asMap (). get ("email"). toString ();

0
Hari Haran