2012-06-25 12 views
15

Estoy creando una aplicación de Internet para iOS (es decir, una página HTML que se ejecuta en modo independiente, ninguno de Safari Chrome, cuando el marcador de la página se agrega a la pantalla de inicio).Flujo interrumpido de FB.login para iOS Web App

Tengo un botón que hace clic en llamadas FB.login(). Cuando está en modo independiente, la aplicación web redirige a la página de inicio de sesión de Facebook (como se esperaba), sin embargo, luego me quedo atascado en una pantalla en blanco (no me piden autenticación porque ya la tengo, pero imagino que la pantalla de autenticación suceder antes de la pantalla en blanco) y no volver a poner en la aplicación web.

El mismo flujo dentro de la aplicación Safari funciona como se esperaba. Al hacer clic en las llamadas de inicio de sesión FB.login(), que abre una nueva página donde se le solicita que inicie sesión en Facebook, una vez que inicia sesión y autentica la aplicación, esa página se cierra y usted vuelve a la página original.

Parece que en el modo independiente, hay un problema con la "segunda página" con el inicio de sesión de FB y el redireccionamiento a la aplicación (no es así). Y el flujo está roto.

¿Hay algún tipo de solución para esto?

Gracias,
-ESA

+0

sólo para compartir mi experiencia, si alguien viene aquí de nuevo: He resuelto simplemente reemplazando el botón con un simple enlace html a: 'https://www.facebook.com/dialog/oauth/?client_id= [MY_APP_ID] & redirect_uri = [URL_TO_REDIRECT_AFTER_PERMISSIONS] & scope = [COMMA_SEPARATED_SCOPES]' – Stormsson

Respuesta

9

Puede probar la solución siguiente. Funcionó para mí En dispositivos móviles, redirige a la URL de autenticación del lado del cliente.

var isMobile = false; 
try { 
    isMobile = (window.location.href == top.location.href && window.location.href.indexOf("/mobile/") != -1); 
} catch (e) {} 
if (!isMobile) { 
    FB.login(); 
} else { 
    var permissionUrl = "https://m.facebook.com/dialog/oauth?client_id=" + appId + "&response_type=code&redirect_uri=" + redirectPage + "&scope=" + permissions; 
    window.location = permissionUrl; 
    return; 
} 
+0

¡Gracias! De hecho, hice algo similar, inspirado por esto: 'FB.login (función (respuesta) {/ * cosas * /}, {redirect_uri: redirigir, alcance: permisos});' Me devuelve a la aplicación. El único problema es que no guarda el estado de mi aplicación, y hace que el usuario vuelva a empezar, pero de todos modos funciona bien. También sustituí la lógica de isMobile por la mía (comprobando el userragent, este es un sitio solo móvil, así que no necesito ningún respaldo para el escritorio) – Esaevian

+0

También estaba usando la opción redirect_uri no documentada en el modo independiente, pero recientemente dejó de funcionar para mí, dejándome nuevamente con el problema de la pantalla en blanco. Ahora estoy usando el método anterior, cambiando la ubicación de la ventana al punto final de facebook. La redirección funciona, aunque la aplicación web se recarga desde cero. Puedo vivir con ello. – Mike

+0

esto funcionó para mí, gracias, me estaba frustrando bastante antes de encontrar esto! – asutherland

7

que utilizó la siguiente para detectar si estoy en el modo de pantalla de inicio y hacer lo correcto en consecuencia:

if ("standalone" in navigator && navigator.standalone) { 
    var permissionUrl = "https://m.facebook.com/dialog/oauth?client_id=" + appId + "&response_type=code&redirect_uri=" + window.location + "&scope=" + app_permissions; 
    window.location = permissionUrl; 
} else { 
    FB.login(
    function(response) { 
     ... 
    }, 
    {scope: app_permissions} 
); 
} 
+0

¡Genial! Muchas gracias @Max por este fragmento de código :) – neoswf

+0

Esta solución no funciona, ahora ¿dónde está? ¿Hay otros pasos? – SSA

Cuestiones relacionadas