no se puede obtener el token de acceso a través de en iphone sdk

Estoy creando una aplicación de Facebook. Implementé el inicio de sesión usando la clase FBSDKLoginManager. En la primera vez que inicio sesión en facebook, el bloque de éxito devuelve el objeto FBSDKLoginManagerLoginResult que contiene el objeto token de acceso (objeto FBSDKAccessToken) que se usa por completo para compartir el contenido. Pero en la segunda vez (después de relanzar la aplicación) cuando bash obtener el token de acceso usando la función [FBSDKAccessToken currentAccessToken] return nil. Entonces, ¿cómo obtener el token de acceso (objeto FBSDKAccessToken) por segunda vez sin iniciar sesión de nuevo?

Pruebe este código. Basado en Facebook SDK versión 4.0

AppDalegate.m

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; } 

ViewController.m

 - (IBAction)btnFacebookPressed:(id)sender { FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; [login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { if (error) { // Process error } else if (result.isCancelled) { // Handle cancellations } else { if ([result.grantedPermissions containsObject:@"email"]) { NSLog(@"result is:%@",result); [self fetchUserInfo]; } } }]; } -(void)fetchUserInfo { if ([FBSDKAccessToken currentAccessToken]) { NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]); [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location ,friends ,hometown , friendlists"}] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (!error) { NSLog(@"resultis:%@",result); } else { NSLog(@"Error %@",error); } }]; } } 

viewDidLoad llama a este método para obtener token de acceso después de iniciar sesión

 [self fetchUserInfo]; 

Tienes que llamar

 [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions] 

antes de

 [FBSDKAccessToken currentAccessToken] 

Pruebe este código. Basado en Facebook SDK versión 6.0 y superior

 - (IBAction)fbIntegration:(id)sender { FBSDKLoginManager *loginmanager = [[FBSDKLoginManager alloc] init]; [loginmanager logInWithReadPermissions:@[@"email",@"public_profile"] fromViewController:Nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { if (error) { // Process error NSLog(@"======error%@",error); } else if (result.isCancelled) { // Handle cancellations NSLog(@"canceled"); } else { if ([result.grantedPermissions containsObject:@"email"]) { NSLog(@"result is:%@",result); [self fetchUserInfo]; } } }]; } -(void)fetchUserInfo { if ([FBSDKAccessToken currentAccessToken]) { NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]); [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location ,friends ,hometown , friendlists"}] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (!error) { NSLog(@"%@",connection); } else { NSLog(@"Error %@",error); } }]; } } 

Espero que esto ayude a otros.

Si está probando su aplicación en el simulador, intente con un dispositivo real porque el simulador tiene un error por defecto del usuario.

Falling back to loading access token from NSUserDefaults because of simulator bug