2013-06-18 11 views
5

Ho usato Facebook SDK per l'autenticazione con Facebook. Quando non ci sono account facebook abilitata nelle impostazioni poi cliccando sulle applicazioni pulsante va a Safari per l'autenticazione cioèACAccountType mostra sempre 0 account

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

altrimenti se account facebook è abilitata,

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}

Questo immagine che mostra l'avviso per accedere alle informazioni dell'utente. Funziona bene nel simulatore. Ma nel dispositivo va sempre in safari o in app di Facebook per l'autenticazione anche l'account facebook è abilitato nelle impostazioni. Per favore aiutami a trovare questo problema.

Grazie a tutti.

+0

Avete chiamato 'requestAccessToAccountsWithType: options: completion:'? – Wain

+0

@Wain dove dovrei chiamarlo? –

risposta

1

Non è possibile chiamare semplicemente accountTypeWithAccountTypeIdentifier per accedere all'account FB, è necessario fornire proprietà. Questo deve essere fatto usando requestAccessToAccountsWithType:options:completion: e ha una risposta asincrona.

Sposta l'autenticazione di backup basata sul Web in un metodo diverso, quindi, controlla se è possibile creare l'archivio account come sei. In caso contrario, chiamare il metodo web. Se puoi, prova ad accedere all'account FB con requestAccessToAccountsWithType:options:completion:. Nel blocco di completamento ti sarà stato concesso l'accesso o chiamerai il metodo web.

Questo codice dovrebbe essere eseguito sul thread principale. La risposta asincrona può essere chiamata su un thread diverso, quindi tornare al thread principale per completare la gestione.


Compilare le parti ....

- (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

È possibile fornire un codice di esempio @Wain –

+0

Il problema è stato risolto o è ancora necessario un codice di esempio? – Wain

+0

Non risolto @Wain –

Problemi correlati