0

В моем приложении iOS я использую с Social Framework API Facebook, чтобы сделать запрос для обмена с Facebook, но теперь я получаю этот код статуса от Facebook:Социальный API Facebook iOS: «Ошибка проверки токена доступа: сеанс истек»

{ 
    error =     { 
        code = 190; 
        "error_subcode" = 463; 
        message = "Error validating access token: Session has expired on 25 marzo 2014 16.20. The current time is 18 aprile 2014 8.45."; 
        type = OAuthException; 
    }; 
} 

Это код я использую:

ACAccountType *facebookTypeAccount = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 

NSDictionary *options = @{ACFacebookAppIdKey: @"##myfbid###",ACFacebookPermissionsKey: @[@"email"]}; 

[accountStore requestAccessToAccountsWithType:facebookTypeAccount 
    options:options 
    completion:^(BOOL granted, NSError *error) { 
     if(granted){ 
      NSArray *accounts = [accountStore accountsWithAccountType:facebookTypeAccount]; 
      facebookAccount = [accounts lastObject]; 
      //NSLog(@"Success"); 

      NSURL *meurl = [NSURL URLWithString:@"https://graph.facebook.com/me"]; 
      SLRequest *merequest = [SLRequest requestForServiceType:SLServiceTypeFacebook 
       requestMethod:SLRequestMethodGET 
       URL:meurl 
       parameters:nil]; 
      merequest.account = facebookAccount; 
      [merequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
       NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error]; 
       //this json conaints the log i write above 
     } 

]; 

так я пытался выйти из учетной записи Facebook в iPhone Настройка, а затем войти в систему снова, поэтому мой вопрос есть способ автоматически обновлять этот токен каждый раз, когда приложение открыто, чтобы избежать этой проблемы?

ответ

4

Вы не можете «автоматически» обновить токен доступа. Всякий раз, когда вы получаете ответ, вы должны проверить наличие ошибки, и если существует ошибка, обновите токен. Этот код может помочь вам.

.... 
if([json.profileDictionary objectForKey:@"error"]!=nil){ 
    [self renewCredentials]; 
} 

-(void)renewCredentials{ 
    [self.accountStore renewCredentialsForAccount:(ACAccount *)self.facebookAccount completion:^(ACAccountCredentialRenewResult renewResult, NSError *error){ 
     if(!error){ 
      switch (renewResult) { 
       case ACAccountCredentialRenewResultRenewed: 
        NSLog(@"Good to go"); 
        [self getFacebookAccount]; 
        break; 
       case ACAccountCredentialRenewResultRejected: 
        NSLog(@"User declined permission"); 
        break; 
       case ACAccountCredentialRenewResultFailed: 
        NSLog(@"non-user-initiated cancel, you may attempt to retry"); 
        break; 
       default: 
        break; 
      } 
     } 
     else{ 
      //handle error 
      NSLog(@"error from renew credentials%@",error); 
     } 
    }]; 
} 

Надеюсь, что это поможет!

Смежные вопросы