2013-06-18 11 views
5

Użyłem facebook SDK do uwierzytelnienia z Facebookiem. Gdy nie ma konta facebook włączona w ustawieniach następnie kliknąć w przycisk aplikacji idzie na safari do uwierzytelniania tjACAccountType zawsze pokazuje 0 kont

if (appDelegate.session.state != FBSessionStateCreated) 
    { 
     appDelegate.session = [[FBSession alloc] init]; 
    } 

    [appDelegate.session openWithCompletionHandler:^(FBSession *session, 
                FBSessionState status, 
                NSError *error) { 
     // and here we make sure to update our UX according to the new session state 
     [self updateView]; 
    }]; 

inaczej jeśli konto Facebook jest włączona wtedy

NSArray *fbAccounts=nil; 
    ACAccountType *accountTypeFB; 
    if ((_accountStore = [[ACAccountStore alloc] init]) && 
     (accountTypeFB = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook])){ 
     fbAccounts = [_accountStore accountsWithAccountType:accountTypeFB]; 
     NSLog(@" %d fbAccounts",[fbAccounts count]); 
    } 
    if ([fbAccounts count]!=0) { 

     [FBSession openActiveSessionWithAllowLoginUI:YES]; 
     NSArray *permissions = [[NSArray alloc] initWithObjects: 
           @"email", 
           nil]; 

     [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 
      if (error) { 
       NSLog(@"Failure"); 
       NSLog(@"error %@",error); 
      } 
      else 
      { 
       NSLog(@" active session opened "); 
       if (self.gotUserDetails) 
       { 
        return; 
       } 
       [self fetchuserinfo]; 
      } 
     }]; 
    } 

enter image description here}

ten obraz pokazujący ostrzeżenie, aby uzyskać dostęp do informacji o użytkowniku. Działa dobrze na symulatorze. Ale w urządzeniu zawsze idzie do safari lub w aplikacji facebook do uwierzytelniania nawet konto Facebook jest włączone w ustawieniach. Pomóż mi znaleźć ten problem.

Dziękuję wszystkim.

+0

Czy nazwałeś 'requestAccessToAccountsWithType: options: completion:'? – Wain

+0

@ Wain, gdzie powinienem to nazwać? –

Odpowiedz

1

Nie możesz po prostu zadzwonić pod numer accountTypeWithAccountTypeIdentifier, aby uzyskać dostęp do konta FB, musisz podać właściwości. Należy to zrobić, używając requestAccessToAccountsWithType:options:completion: i ma odpowiedź asynchroniczną.

Przenieś swój autorski backup na inny sposób, a następnie sprawdź, czy możesz utworzyć magazyn kont tak jak w rzeczywistości. Jeśli nie, zadzwoń do metody internetowej. Jeśli możesz, spróbuj uzyskać dostęp do konta FB pod numerem requestAccessToAccountsWithType:options:completion:. W bloku zakończenia otrzymasz dostęp lub zadzwonisz do metody internetowej.

Ten kod powinien działać w głównym wątku. Odpowiedź asynchroniczną można wywołać na innym wątku, przełączając się z powrotem na główny wątek, aby zakończyć obsługę.


Wypełnij części ....

- (void)webAuthorise {...} 

- (void)authorise { 
if(!_accountStore) 
    _accountStore = [[ACAccountStore alloc] init]; 

ACAccountType *facebookTypeAccount = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 

if (facebookTypeAccount == nil) { 
    NSLog(@"Failed, No account"); 
    [self webAuthorise]; 
    return; 
} 

[_accountStore requestAccessToAccountsWithType:facebookTypeAccount 
             options:@{ACFacebookAppIdKey: @"...", ACFacebookPermissionsKey: @[@"email"]} 
            completion:^(BOOL granted, NSError *error) { 
             dispatch_async(dispatch_get_main_queue(), ^{ 
             if(granted){ 
              NSArray *accounts = [_accountStore accountsWithAccountType:facebookTypeAccount]; 
              _facebookAccount = [accounts lastObject]; 
              NSLog(@"Success"); 

              [self ...]; 
             } else { 
              NSLog(@"Failed, Error: %@", error); 

              [self webAuthorise]; 
             } 
             }); 
            }]; 
} 
+0

Czy możesz podać przykładowy kod @Wain –

+0

Czy problem został rozwiązany, czy nadal potrzebujesz przykładowego kodu? – Wain

+0

Nie rozwiązany @Wain –

Powiązane problemy