2010-11-22 19 views
20

Por lo tanto, he estado jugando un poco con el SDK de iOS de Facebook y en la última versión no puedo llamar al método fbDidLogin. El proceso de inicio de sesión funciona bien, con Safari utilizado en el simulador y la aplicación de Facebook que se utiliza al ejecutarlo en un dispositivo. Sin embargo, después de iniciar sesión me vuelvo a transferir a mi aplicación (como debería ser) pero como no se ha llamado al método fbDidLogin, nada ha cambiado. En lo que respecta a mi aplicación, no estoy conectado. La aplicación de demostración que se incluye con el SDK funciona bien. Así que obviamente estoy haciendo algo mal, pero no tengo idea de cómo verificar qué. Comprueba tres veces todos los métodos utilizados en la aplicación de demostración contra los míos y, por lo que puedo ver, todo se ve igual. ¿Alguna idea o idea sobre cómo depurar esto? ¿O alguien ha tenido problemas similares?fbDidLogin no se llama

Gracias!

+0

¿Cómo se configura el controlador correctamente? ¿Asigna init en el delegado de la aplicación, configura un singleton? No estoy seguro de cómo configurar el controlador correctamente. Asigno mi clase de Facebook dentro de una clase personalizada llamada facebookprep. Esa clase está configurada como los delegados para la clase de Facebook. Sin embargo, fbDidLogin no se llama. ¿Cómo iniciaste tu clase de Facebook? –

Respuesta

32

Me encontré con el mismo problema ahora. Lo resuelto añadiendo el siguiente código en mi aplicación delegue:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    return [[controller facebook] handleOpenURL:url]; 
} 

donde el controlador es mi UIViewController instancia y facebook es mi Facebook ejemplo.

También debe registrar su aplicación para manejar el esquema de URL de su aplicación fb (haga eso en su Info.plist).

+0

Sí, lo había hecho, sin embargo, me había perdido la configuración de mi controlador correctamente, al iniciarlo. Una vez que lo hice, funcionó. – Glitch

+0

@Glitch. ¿Qué tipo de error hiciste inicialmente? También llamé a este código y no se llamó a fbDidLogin. No lo puse en el delegado de la aplicación, sino en otro controlador de vista que es el padre del controlador de vista que inicializa y llama a Facebook Request – okysabeni

+1

¡Maldición, cierto! En lugar de "devolver [facebook handleOpenURL: url];" el "[controlador facebook]" solucionó mis problemas de inicio de sesión. – geforce

6

Un error común podría ser no implementar el siguiente método de devolución de llamada en el delegado de su aplicación principal, pero en otro lugar. Implemente este método en su clase derivado de UIApplicationDelegate. Este es el punto de entrada que iOS llama después del cambio de contexto para volver a poner su aplicación en primer plano.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    // obtain facebook instance ref 
    [ facebook handleOpenURL: url ]; 
    } 

Si ha creado ID de aplicación FB correctamente y se asigna la dirección URL apropiada según se define en https://developers.facebook.com/docs/guides/mobile/#ios entonces debería funcionar.

2

He resuelto el problema, si Facebook es el objeto de su primera viewcontroller que está siendo cargado por ur AppDelegate, a continuación, puede utilizar la propiedad viewcontroller de AppDelegate para referirse facebook objeto, por ejemplo

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{ 
    [ viewController.facebook handleOpenURL: url ]; 
} 
2

Mi causa de este fue que no tenía el inicio de Facebook en ApDelegate usando el delegado correcto. Lo tenía apuntando a sí mismo, cuando debería estar usando el controlador de vista donde el usuario realmente realizó el inicio de sesión.

De AppDelegate:

facebook = [[Facebook alloc] initWithAppId:@"111111111111111" andDelegate:homeViewController]; 
+0

se puede señalar a sí mismo si lo coloca en el controlador de vista donde se llama – TommyG

1
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    return [ facebook handleOpenURL:url]; 
} 

debe escribir en AppDelegate.m por lo que lo hará accesible para toda aplicación.

complacer al igual que si funciona

0

me encontré recientemente acaba de esto también. Mi problema fue que la configuración de la aplicación en Facebook se configuró de forma tal que no se autorizaba la aplicación. Por lo tanto, se llamaba a mi método fbDidNotLogin. La solución era ir a

  • Facebook Developers ->Apps ->My App ->Edit Settings ->Basic
  • Asegúrese de que en la sección "Seleccionar la forma de su aplicación se integra con Facebook" la categoría de "nativo de iOS App" no fue habilitado (marca de verificación verde).
1

Como Jiri dicho en el primer comentario Usted debe poner en práctica estos métodos en ti delegado de la aplicación

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{ 
    return [[loginScreen facebook] handleOpenURL:url]; 
} 

Dónde loginScreen es su controlador de vista que desea utilizar para el registro o hacer cualquier otra cosa con Facebook, el punto es que es un lugar más que el delegado de la aplicación.

eliminar estos método Si usted lo está utilizando

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 

}