web-dev-qa-db-fra.com

impossible d'obtenir le jeton d'accès via [FBSDKAccessToken currentAccessToken] dans iphone sdk

Je crée une application facebook. J'ai implémenté la connexion en utilisant la classe FBSDKLoginManager. Lorsque je me connecte à Facebook pour la première fois, success block renvoie l'objet FBSDKLoginManagerLoginResult qui contient l'objet de jeton accès (objet FBSDKAccessToken) qui est utilisé à part entière pour le contenu .But à la seconde fois (après la relance app) lorsque j'essaie d'obtenir le jeton d'accès à l'aide de la fonction [FBSDKAccessToken currentAccessToken] return nil. Alors, comment obtenir le jeton accès (objet FBSDKAccessToken) seconde fois sans vous connecter à Facebook.

15
user2102502

Essayez ce code. Basé sur la version 4.0 du SDK de Facebook 

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 appeler cette méthode vous obtenez le jeton d'accès après la connexion 

[self fetchUserInfo];
22

Vous devez appeler 

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

Avant

[FBSDKAccessToken currentAccessToken]
18
AlexeyVMP

Essayez ce code. Basé sur Facebook SDK version 6.0 et supérieure

- (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);
             }
         }];

    }

}

espérons que cela aidera les autres.

3
Kishore Kumar

Si vous essayez d’appliquer votre application sur le simulateur, veuillez essayer sur un appareil réel, car le simulateur a un bogue par défaut.

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

1
mhmtkrgz