2010-03-21 21 views
5

Exactamente lo que dice el título. ¿Es posible utilizar Facebook Connect (o cualquier otro medio de integración de FB) en una aplicación nativa de iPhone sin recurrir al diálogo de inicio de sesión integrado (que se ve horrible)? ¿Algo donde podría crear mi propia pantalla de inicio de sesión personalizada solicitando el nombre de usuario y la contraseña de inicio de sesión de Facebook y luego usar los métodos nativos fbconnect para validar esa información y recuperar una sesión válida?iPhone SDK/Facebook Connect: usando un diálogo de inicio de sesión personalizado

+0

Cuando dice que el loginDialog es horrible, ¿quiere decir que la pantalla está desordenada porque los usuarios tienen que desplazarse para encontrar los campos de texto? Si es así, hay una solución alternativa para que la pantalla del inicio de sesión se vea bonita, es decir, que se ajuste a toda la pantalla sin necesidad de desplazarse. – Raja

+0

@Raja ¿Tiene un enlace a información sobre esa solución? –

+0

@Raja: me refiero a horrible en el sentido de que se ve exactamente como lo que es, un UIWebView incrustado en la parte superior de una caja de luz a medio cocer que rompe un poco todo tipo de interfaz personalizada que quizás desee poner en su propia aplicación. – boliva

Respuesta

3

No lo hagas. Esto va en contra de la política y su aplicación se cerrará por eso. Como sugirió quixoto, esto se debe a que no queremos entrenar a los usuarios para que escriban su contraseña en lugares aleatorios, y porque el usuario no ha confirmado la acción según nuestros requisitos de UX. Actualmente estamos trabajando en un rediseño de estos diálogos para que sean más bonitos.

+0

Gracias daaku. Esta es una pregunta muy antigua (en tiempo de desarrollo), pero dado que pareces ser un desarrollador oficial de FBConnect (o que tienes algún tipo de autoridad), acepto tu respuesta. – boliva

+0

Heh - sí, solo comencé a buscar en Stack Overflow recientemente :) – daaku

+0

Aunque los formularios de inicio de sesión personalizados pueden ser geniales, me gustaría que Twitter también tuviera algo como esto. – samvermette

2

Cuando miré en Facebook Connect, parecían bastante estrictos con su API y con cualquier modificación que pudiera querer hacer. Ni una sola vez se menciona en facebook.com/x la personalización de la interfaz, por lo que creo que debes seguir con lo que han aprobado.

+0

facebook no es tuyo, es de ellos, así que si vas a vivir en su casa y usar su código, debes seguir sus reglas. Si no te gusta, imprime tu propia API sobre http con las clases de framework nativas – slf

+0

@slf: estoy al tanto de eso. Es por eso que estoy preguntando si alguien sabe de una manera alternativa con una API existente que hace uso de los servicios que FB expone, y hasta ahora parece que la respuesta es 'no' ... – boliva

0

Que sería maravilloso si el diálogo de inicio de sesión realmente lleva a cabo validación de formulario básico al menos. Puede enviar el formulario sin completar su dirección de correo electrónico o contraseña. Shoddy, de mala calidad, trabajo de UI.

2

Sí y no.

Facebook utiliza la autenticación delegada para que la aplicación se conecte con ella. Por lo tanto, el usuario tiene la intención de poner su contraseña en algo "de confianza" (por ejemplo, la página de inicio de sesión de Facebook) para que su aplicación no la vea realmente, y solo obtenga la clave como resultado. La idea es que los usuarios estén capacitados para no confiar en otras páginas web/aplicaciones con su contraseña.

Por lo tanto, FB proporciona esta ventana emergente web en su biblioteca FBConnect, sin otra forma explícita de convertir las credenciales de un usuario en una sesión.

Dicho esto, y responderé a su pregunta técnica ya que es una pregunta legítima; puede hacer lo que desee creando un UIWebView fuera de pantalla, hospedando el URL de inicio de sesión de FB en esa vista web, e inyectando Javascript en la página usando stringByEvaluatingJavaScriptFromString:. Ese Javascript podría tomar el nombre de usuario/contraseña, completar el formulario y enviarlo, sin que el usuario lo haya visto nunca. Lea el código de la biblioteca de FBConnect para comprender qué URL usar y qué hacer con el resultado de enviar la página. Puede volver a conectarla a la biblioteca.

Hacer esto es (1) frágil, ya que tendrás que confiar en IDs y cosas que pueden/cambiarán para vencer esas técnicas y (2) probablemente viole los términos de uso de FB Connect y por supuesto (3) no es bueno para la salud de autenticación en la web en general, ya que no refuerza que los usuarios no deben confiar en terceros con sus contraseñas.

Y no hace falta decir que si lo haces solo y les das a los usuarios una experiencia de autenticación con mejor aspecto, nunca jamás almacenes ni hagas nada con sus credenciales además de dárselas a Facebook.

+0

@quixoto: He pensado en haciendo algo similar, pero como dices, podría romperse en cualquier momento. – boliva

+0

Lamentablemente, no creo que encuentre una solución más estable que esta; La autorización delegada de Facebook es la forma en que le permiten autenticarse con ellos: puede finalizar esa interacción web en una vista oculta, o hacerlo manualmente usando un socket NSURLConnection con un montón de heurísticas inteligentes para encontrar los campos correctos, etc. pero no importa qué, vas a ser frágil en algún nivel, ya que no garantizan nada sobre las partes internas, excepto que la URL de autenticación seguirá siendo la misma. –

Cuestiones relacionadas