2012-10-16 21 views
16

Tôi đang gặp sự cố khi đăng nhập với quyền xuất bản trong SDK 3.1 ios facebook.Đăng nhập Facebook iOS 3.1 sdk với quyền gọi lại xuất bản

Ứng dụng của tôi có nút chia sẻ video và khi người dùng nhấp vào, tôi muốn thêm quyền + xuất bản cơ bản. Theo tôi được biết, tôi phải làm hai cuộc gọi -

  1. openActiveSessionWithReadPermissions, và sau đó
  2. reauthorizeWithPublishPermissions

Dưới đây là đoạn code tôi đang sử dụng hiện nay:

//Opens a Facebook session and optionally shows the login UX. 
- (void)openSessionForReadPermissions 
{ 
    [FBSession openActiveSessionWithReadPermissions:nil 
             allowLoginUI:YES 
            completionHandler: 
    ^(FBSession *session, 
     FBSessionState state, NSError *error) { 

     //this is called even from the reauthorizeWithPublishPermissions 
     if (state == FBSessionStateOpen && !error) 
     { 
      [self openSessionForPublishPermissions]; 
     } 
     else if (state == FBSessionStateClosedLoginFailed) 
     { 
      [FBSession.activeSession closeAndClearTokenInformation]; 

      [[NSNotificationCenter defaultCenter] postNotificationName:FBLoginErrorNotification object:session]; 
     } 
    }]; 
} 

-(void)openSessionForPublishPermissions 
{  
    NSArray* permissions = [NSArray arrayWithObject:@"publish_stream"]; 

    [[FBSession activeSession] reauthorizeWithPublishPermissions:permissions 
               defaultAudience:FBSessionDefaultAudienceFriends 
               completionHandler: 
    ^(FBSession *session, NSError *error) 
    { 
     if (!error) 
     { 
      [[NSNotificationCenter defaultCenter] 
       postNotificationName:FBLoginSuccessNotification 
       object:session]; 
     } 
     else 
     { 
      [[NSNotificationCenter defaultCenter] 
       postNotificationName:FBLoginErrorNotification 
       object:session]; 
     } 
    }]; 
} 

tôi thấy rằng khối trong openSessionForReadPermissions được gọi hai lần (một lần với FBSessionStateOpen và một lần với FBSessionStateOpenTokenExtended từ cuộc gọi openSessionForPublishPermissions), một Tôi nhận được một ErrorReauthorizeFailedReasonUserCancelled khi lần đầu tiên cố gắng đăng nhập vào ứng dụng (nếu O đã xóa tất cả quyền ứng dụng trước đó).

Cách thích hợp để triển khai thông tin đăng nhập này là gì? Ứng dụng không yêu cầu đăng nhập Facebook, ngoại trừ một tính năng này, vì vậy quá trình đăng nhập phải được đẩy cùng một nút.

Cảm ơn!

+0

+1 Chúng tôi đang mắc kẹt với cùng một vấn đề, đặc biệt là kể từ khi các cuộc gọi cho phép hỗn hợp là depricated. –

+0

reauthorizeWithPublishPermissions bị khấu hao. Sử dụng requestNewPublishPermissions để thay thế. – John

Trả lời

26

Tôi đã gặp phải vấn đề tương tự này. Giải pháp mà tôi tìm thấy đã được gọi đến [self openSessionForPublishPermissions]; trong khối dispatch_async.

Ví dụ:

dispatch_async(dispatch_get_current_queue(), ^{ 
    [self openSessionForPublishPermissions]; 
}); 

Lý do là cuộc gọi đến phép lại .. cần phải sau vòng lặp sự kiện trong đó openActiveSession .. được gọi.

+0

Cảm ơn bạn! Lỗi này đã phá hoại đầu tôi trong nhiều ngày. – Tiddly

0

Bất kỳ cơ hội nào có thể là thời gian chờ để đạt điểm ngắt? Có lỗi này một lần nhưng không một lần nữa sau khi chạy với các điểm ngắt bị vô hiệu hóa.