2013-06-18 22 views
5

Facebook ile kimlik doğrulama için facebook SDK kullandım. facebook hesabı sonraACAccountType her zaman 0 hesap görüntüleniyor

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}

Bu etkinleştirildiğinde aksi takdirde daha sonra düğme uygulamalar üzerinde tıklayarak ayarlarında etkinleştirilmiş hiçbir facebook hesabı

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

yani kimlik doğrulaması için safari gidildiği zaman kullanıcı bilgilerine erişmek için uyarıyı gösteren resim. Simülatörde iyi çalışıyor. Ancak cihazda her zaman safari gider veya facebook hesabında kimlik doğrulama için facebook hesabı bile ayarlarda etkinleştirilir. Lütfen bu sorunu bulmak için bana yardımcı olun.

Herkese teşekkürler.

+0

'requestAccessToAccountsWithType: options: completion: '? – Wain

+0

@Wain Nerede arayayım? –

cevap

1

FB hesabına erişmek için accountTypeWithAccountTypeIdentifier'u arayamazsınız, özellikleri sağlamanız gerekir. Bunun requestAccessToAccountsWithType:options:completion: kullanılarak yapılması ve eşzamansız bir yanıtı olması gerekir.

Yedek web tabanlı kimliğinizi farklı bir yönteme taşıyın, daha sonra hesap deposunu sizin oluşturup oluşturamayacağınızı kontrol edin. Değilse, web yöntemini arayın. Yapabiliyorsanız, requestAccessToAccountsWithType:options:completion: numaralı FB hesabına erişmeyi deneyin. Tamamlama bloğunda ya erişim izni verilecek ya da web yöntemini arayacaksınız.

Bu kodun tamamı ana iş parçacığı üzerinde çalışmalıdır. Eşzamansız yanıt farklı bir iş parçacığı üzerinde çağrılabilir, böylece işleminizi tamamlamak için ana iş parçacığına geri dönün.


... parçalarını doldurun.

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

Bazı örnek kod sağlayabilir @Wain –

+0

Sorununuz çözüldü mü yoksa hala örnek kod gerekiyor mu? – Wain

+0

Hata düzeltildi @Wain –

İlgili konular