El campo de correo electrónico de Facebook devuelve nulo (incluso si se establece y acepta el permiso de “correo electrónico”)

Para algunos usuarios en nuestra aplicación, el campo de correo electrónico devuelve NULL incluso si el usuario ha otorgado el acceso de correo electrónico a la aplicación. Cuando verificamos el parámetro de scope y la validez del token de usuario gracias a la herramienta Depurador, todo está bien. El correo electrónico de permiso ha sido aceptado. Pero cuando solicitamos la API Graph para el correo electrónico del usuario con el token de usuario válido, no aparece en absoluto.

¿Hay alguna manera en que un usuario pueda evitar que una aplicación reciba su correo electrónico, incluso si otorgó el permiso de correo electrónico?

Gracias

Tuve el mismo problema y creo que descubrí por qué: si el usuario tiene un correo electrónico no confirmado en Facebook (es decir, Facebook le envió un correo de validación a la dirección de correo electrónico del usuario pero no respondió) Facebook NO le enviará ese correo electrónico a su aplicación incluso si él le dio los permisos de correo electrónico.

Entonces, lo que hice fue usar su correo electrónico de Facebook si el usuario tiene un nombre de usuario (es decir, userName@facebook.com).

Tengo el mismo problema. Está funcionando bien en mi servidor local, estoy usando php SDK para iniciar sesión en Facebook y cuando envío mi solicitud, devuelvo todos los campos como el correo electrónico, el nombre, etc. del usuario, pero en el servidor de alguna manera no funciona. No devolverá el correo electrónico del usuario. . He hecho mucho I + D sobre eso y tengo la solución para el problema. 🙂

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

si está utilizando php-sdk solo pasa campos como este, devuelve el correo electrónico, first_name, etc. Espera que funcione para todos ustedes. Gracias.

Facebook no envía el correo electrónico si el usuario inició sesión con su número de teléfono. Vea los comentarios en https://github.com/mkdynamic/omniauth-facebook/issues/61 para obtener más información.

Debe dar permiso por correo electrónico junto con el botón de autenticación.

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

Todo lo que necesitas saber:

1) Enlace 1

Algunas posibles razones:

Sin dirección de correo electrónico en la cuenta

No hay una dirección de correo electrónico confirmada en la cuenta

No hay una dirección de correo electrónico verificada en la cuenta

El usuario ingresó un punto de control de seguridad que requirió que reconfirmaran su dirección de correo electrónico y aún no lo han hecho.

  • La dirección de correo electrónico de los usuarios es inalcanzable

  • También necesita el permiso extendido de ‘correo electrónico’, incluso para usuarios que tienen una dirección de correo electrónico válida, confirmada y accesible en el archivo.

2) Enlace 2

Tenga en cuenta que, incluso si solicita el permiso por correo electrónico, no está garantizado, obtendrá una dirección de correo electrónico. Por ejemplo, si alguien se registró en Facebook con un número de teléfono en lugar de una dirección de correo electrónico, el campo de correo electrónico puede estar vacío.

En algunos casos, es posible que Facebook no tenga una dirección de correo electrónico válida para un usuario:

email: cadena que contiene una dirección de correo electrónico RFC822 válida – nota: este campo puede ser nulo si no hay una dirección de correo electrónico disponible para el usuario

ver https://developers.facebook.com/docs/reference/api/user/

Facebook le proporcionará la identificación de correo electrónico de un usuario si ese usuario solo tiene una identificación de correo electrónico confirmada asociada a su cuenta. Si su aplicación puede recuperar el id de correo electrónico para algunos usuarios, es posible que el desarrollador no tenga un problema.

La solución de @ozba no es aplicable porque Facebook ahora muestra un mensaje de alerta cuando el usuario tiene una dirección de correo electrónico no confirmada. Por lo tanto, si tiene este problema, es más agradable que el usuario se haya registrado usando el número de teléfono. Mensaje al intentar acceder al correo electrónico

Algunas posibles razones:

  • Sin dirección de correo electrónico en la cuenta (solo número de teléfono)
  • No hay una dirección de correo electrónico confirmada en la cuenta
  • El usuario ingresó un punto de control de seguridad que requería que reconfirmaran su dirección de correo electrónico y aún no lo han hecho, por lo que la dirección de correo electrónico de los usuarios no está disponible.

Compruebe: https://developers.facebook.com/bugs/298946933534016

De acuerdo con la documentación :

Tenga en cuenta que, incluso si solicita el permiso por correo electrónico, no está garantizado, obtendrá una dirección de correo electrónico. Por ejemplo, si alguien se registró en Facebook con un número de teléfono en lugar de una dirección de correo electrónico, el campo de correo electrónico puede estar vacío.

¡Eso explicaría por qué algunos usuarios tienen un correo electrónico null !

puedes probar esto, funcionará String email = user.getProperty (“email”). toString (); String safeEmail = user.asMap (). Get (“email”). ToString ();

Necesitas un permiso más de Facebook.

incluye (about_me) permiso para la configuración del desarrollo de facebook y también en tu aplicación o código.

He leído respuestas anteriores pero, aunque algunas de ellas son verdaderas, como si el usuario no hubiera confirmado el correo electrónico, pero sí un número de teléfono móvil, muchas veces ocurre este error al ignorar cómo solicitar la información usando el gráfico de API de FB. Digamos que su inicio de sesión se realizó con éxito, y ahora tiene un token de acceso y una identificación de usuario, pero aún así no puede ver el correo electrónico y otros campos que le interesan. Continúe usando esta solicitud después de confirmar el estado de inicio de sesión como conectado:

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

depende de los permisos que solicitó, ahora podrá obtener más información de acuerdo con sus necesidades.

 $loginUrl = $facebook->getLoginUrl( array( 'req_perms' => 'email' ) );