2013-06-18 32 views
5

Tôi đã sử dụng facebook SDK để xác thực với facebook. Khi không có tài khoản facebook bật trong cài đặt sau đó bằng cách click vào các ứng dụng nút đi Safari để xác thực tức làACAccountType luôn hiển thị 0 tài khoản

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

khác nếu tài khoản facebook được kích hoạt sau đó

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}

này hình ảnh hiển thị cảnh báo để truy cập thông tin người dùng. Nó hoạt động tốt trong trình mô phỏng. Nhưng trong thiết bị nó luôn luôn đi đến safari hoặc trong ứng dụng facebook để xác thực ngay cả tài khoản facebook được kích hoạt trong cài đặt. Xin hãy giúp tôi để tìm ra vấn đề này.

Cảm ơn tất cả.

+0

Bạn đã gọi 'requestAccessToAccountsWithType: options: completion:'? – Wain

+0

@Tôi nên gọi nó ở đâu? –

Trả lời

1

Bạn không thể chỉ gọi accountTypeWithAccountTypeIdentifier để truy cập tài khoản FB, bạn cần cung cấp các thuộc tính. Điều này cần được thực hiện bằng cách sử dụng requestAccessToAccountsWithType:options:completion: và có phản hồi không đồng bộ.

Chuyển auth web dựa trên sao lưu của bạn sang một phương thức khác, sau đó, kiểm tra xem bạn có thể tạo cửa hàng tài khoản như bạn không. Nếu không, hãy gọi phương thức web. Nếu bạn có thể, hãy thử truy cập vào tài khoản FB với requestAccessToAccountsWithType:options:completion:. Trong khối hoàn thành, bạn sẽ được cấp quyền truy cập hoặc bạn sẽ gọi phương thức web.

Tất cả mã này sẽ chạy trên chuỗi chính. Phản ứng không đồng bộ có thể được gọi trên một chủ đề khác để chuyển trở lại luồng chính để hoàn thành việc xử lý của bạn.


Điền vào các phần ....

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

Bạn có thể cung cấp một số mã mẫu @Wain –

+0

Sự cố của bạn có được giải quyết hoặc bạn vẫn cần mã mẫu không? – Wain

+0

Không được giải quyết @Wain –

Các vấn đề liên quan