it-roy-ru.com

невозможно получить токен доступа через [FBSDKAccessToken currentAccessToken] в iphone sdk

Я создаю приложение на Facebook. Я реализовал логин с использованием класса FBSDKLoginManager. В первый раз, когда я захожу на Facebook, блок успеха возвращает объект FBSDKLoginManagerLoginResult , который содержит объект токена (объект FBSDKAccessToken) который используется полностью для совместного использования содержимого .But во второй раз (после перезапуска app), когда я пытаюсь получить токен доступа с помощью функции [FBSDKAccessToken currentAccessToken] return nil. Итак, как получить токен доступа (объект FBSDKAccessToken) второй раз без входа в Facebook снова.

15
user2102502

Попробуйте этот код. На основе Facebook SDK версии 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 вызов этого метода вы получите токен доступа после входа в систему 

[self fetchUserInfo];
22
Dharmesh Dhorajiya

Вам нужно позвонить 

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

До

[FBSDKAccessToken currentAccessToken]
18
AlexeyVMP

Попробуйте этот код. На основе Facebook SDK версии 6.0 и выше

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

    }

}

надеюсь, что это поможет другим.

3
Kishore Kumar

Если вы пробуете приложение на симуляторе, попробуйте на реальном устройстве, потому что симулятор имеет ошибку по умолчанию пользователя.

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

1
mhmtkrgz