Facebook iOS SDK 3.0 – session no abierta

Estoy usando el último Facebook iOS SDK 3.0

Necesito una ayuda en el process de inicio de session:

Primero declaro esta propiedad en AppDelegate.h :

 @property (nonatomic, strong) FBSession *session; 

y en la class ViewController obtengo esto para usarlo en el código como sigue:

 AppDelegate *delegate = [[UIApplication shanetworkingApplication]delegate]; [delegate.session someproperty]; 

También tengo este método en ViewController que se llama desde viewDidLoad :

 -(void)login { AppDelegate *delegate = [[UIApplication shanetworkingApplication]delegate]; [delegate.session accessToken]; NSLog(@"%d",delegate.session.isOpen); if (!delegate.session.isOpen) { delegate.session = [[FBSession alloc] init]; if (delegate.session.state == FBSessionStateCreatedTokenLoaded) { [delegate.session openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) { NSLog(@"%d", delegate.session.isOpen); // First Line ////////////////// }]; } NSLog(@"%@", delegate.session.description); // Second Line ////////////////// } } 

Después de que la aplicación de Facebook se autorice, los primeros NSLog imprimen cero y el segundo NSLog indica que el estado de la session es FBSessionStateCreated no FBSessionStateOpen ?

esta es la salida para el segundo NSLog :

 2012-08-16 18:37:24.327 Facebook3[2418:f803] <FBSession: 0x6890ff0, state: FBSessionStateCreated, loginHandler: 0x0, appID: 193716877424306, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x6890f20>, expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:()> 

Lo que me falta aquí.

Nota: en la configuration de la aplicación en https://developers.facebook.com configuro la aplicación como esta: 1- Configurado para iOS SSO: Activado 2- iOS Deep Deep Linking: Activado 3- iOS ID de package: com.mycompany.appname

Utilicé este marco para mi proyecto. funciona correctamente este es mi código relacionado

  -(IBAction)logIn:(id)sender; { AppDelegate *appdelegate = (AppDelegate *)[[UIApplication shanetworkingApplication] delegate]; if (!FBSession.activeSession.isOpen) { [appdelegate sessionOpener]; } else { [self loginHelp]; } 

y mi function sessionOpener es;

  -(void) sessionOpener { [FBSession sessionOpenWithPermissions:nil completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { // session might now be open. if (!error) { [self.viewController loginHelp]; } }]; NSLog(@"%d", FBSession.activeSession.isOpen); NSLog(@"%@", FBSession.activeSession.description ); } 

esto funciona para mi. puede ser útil para usted.

y mi printing de console es:

  1 2012-08-16 22:24:55.899 TaraftarlikOyunu[838:c07] <FBSession: 0xd2512c0, state: FBSessionStateOpen, loginHandler: 0xd250240, appID: 433294056715040, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0xd24fda0>, expirationDate: 2012-10-15 19:02:34 +0000, refreshDate: 2012-08-16 19:05:03 +0000, attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:( )> 

Tuve el mismo problema que tú y yo habíamos mezclado entre usar FBSession y la instancia de FBSession al llamar a handleOpenURL. Yo cambie de

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { [FBSession.activeSession facebookSession handleOpenURL:url]; } 

a esto

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { [session facebookSession handleOpenURL:url]; }