10

La siguiente función FB.Login funciona bien en el escritorio de Chrome, FF y Safari. Pero en Safari móvil (probado en un iPhone 4S), se cuelga y no vuelve a la devolución de llamada FB.login. También puedo ver esto en la consola cuando uso Safari y configuro User Agent en "Safari iOS 4.3.3 - iPhone".Facebook FB.login funciona en Safari, pero no en Safari móvil

¿Es porque Safari móvil bloquea ventanas emergentes? (FB.login activa un cuadro de diálogo emergente).

¿cómo puedo solucionar esto? Gracias.

function Login(returnLink) { 
     FB.login(function(response) { 
        if(response.status === 'connected') { 
         console.log('User is now FB logged in.'); 
         // now log them into my site 
         encodedReturnLink = encodeURIComponent(returnLink); 
         window.location = location.protocol + '//' + location.host + "/login?returnUrl=" + encodedReturnLink; 
        } 
        else { 
         console.log('User did not fully authorize after clicking FB login button.'); 
        } 
       }, 
       {scope : 'email, publish_actions, publish_stream'} 
     ); 
} 
+0

¿Está llamando esto inmediatamente después de la interacción del usuario (hacer clic/tocar/enviar) o de algún código retrasado? –

+1

Corriendo hacia el mismo problema. ¿Ha encontrado una solución para esto? – Jaffer

Respuesta

0

Definitivamente no es una cuestión de bloqueo de ventanas emergentes. Aunque he visto un escenario en el que el inicio de sesión funciona cuando se llama directamente, pero no cuando el resultado de una devolución de llamada ajax.

+0

bien, pero esto de hecho es una cuestión de bloqueo de ventanas emergentes, ya que obviamente está bloqueado cuando se llama como devolución de llamada y no cuando se llama directamente? – gapvision

0

Vuelva a verificar la URL del sitio móvil en la configuración de su aplicación de Facebook.

6

Estaba tratando de ejecutar FB.Login automáticamente en la carga de la página dentro de window.fbAsyncInit y no estaba funcionando en Safari en iOS. Resultó que Safari estaba bloqueando la ventana emergente activada por la llamada FB.Login. Safari y Chrome en el escritorio funcionaron bien (permitieron la ventana emergente).

Encontré que la única forma de evitar esto era activar la llamada FB.Login en respuesta a la interacción del usuario (por ejemplo, pulsar o hacer clic). Esto funcionó para mí:

HTML

<a href="#" id="fbLogin">Login with Facebook</a> 

Javascript (jQuery)

$('#fbLogin').click(function(){ 
    FB.login(function(response){ 
     // Do something... 
    }); 
}); 

Probado en Safari (iOS 8.0).

+0

+1 para dar la solución correcta. Me quitó el dolor de cabeza Muchas gracias. – neeraj

+1

Safari parece bastante sensible al bloqueo de ventanas emergentes. Si se demora en absoluto (incluso esperando una pequeña cantidad para otras devoluciones de llamada) parece desencadenar el bloqueo. – justrhysism

+0

@wireblue sigue siendo esta la única forma de activar el inicio de sesión en las versiones actuales? – gapvision

Cuestiones relacionadas