2013-05-15 25 views
11

Tôi đã tìm thấy sự cố thú vị.Yêu cầu FBSessionNewPublishPermissions cách xử lý hành động "Bỏ qua" của người dùng

Khi tôi yêu cầu quyền xuất bản mới, fb sdk hiển thị hộp thoại bằng nút "Bỏ qua". Tôi đang xử lý nó như thế này

 

     [[[appDelegate facebook] session] requestNewPublishPermissions:permissions 
                 defaultAudience:FBSessionDefaultAudienceEveryone 
                completionHandler:^(FBSession *session, NSError *error) 
     { 
      if (!error) 
      { 
        //do smth if there is no error 
      } 
     }]; 

Nhưng khi người dùng nhấn "Bỏ qua" bên trong hộp thoại - lỗi là không.

Làm cách nào để xử lý? Có lẽ tôi không hiểu smth. Thx.

+0

dunno người frack downvoted này ... bạn đã lưu ass của tôi. –

+0

tìm thấy cùng một vấn đề. Hộp thoại Facebook hiển thị nút "bỏ qua" từ hư không –

Trả lời

8

giống với tôi, có vẻ như đây là lỗi trong Facebook SDK, nhưng tôi không chắc chắn. Tôi đã thêm kiểm tra bổ sung nếu phiên có quyền mới.

- (void)postToFacebookWithMessage:(NSString *)message completionBlock:(void (^)(NSError *))completionBlock 
    { 
     NSArray *permissions = @[@"publish_actions"]; 

     void (^completionHandler)(FBSession *session, NSError *error) = ^(FBSession *session, NSError *error) { 
      if (error != nil) 
      { 
       if (completionBlock != nil) 
       { 
        completionBlock(error); 
       } 
      } 
      else if(![self activeSessionHasPermissions:permissions]) 
      { 
       NSError *error = [NSError errorWithDomain:@"Facebook" code:FBAccessDisabledCode userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"Facebook access disabled", @"Facebook access disabled")}]; 
       if (completionBlock != nil) 
       { 
        completionBlock(error); 
       } 
      } 
      else 
      { 
       NSMutableDictionary<FBGraphObject> *action = [FBGraphObject graphObject]; 
       action[@"message"] = message; 

       [FBRequestConnection startForPostWithGraphPath:@"me/og.posts" graphObject:action completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
        // internal error 1611231 means that this was already posted 
        if (error.code == 5) 
        { 
         error = [NSError errorWithDomain:@"Facebook" code:FBDuplicateActionErrorCode userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"Already posted to Facebook", @"Already posted to Facebook")}]; 
        } 

        if (completionBlock != nil) 
        { 
         completionBlock(error); 
        } 
       }]; 
      } 
     }; 

     if ([self activeSessionHasPermissions:permissions]) 
     { 
      completionHandler([FBSession activeSession], nil); 
     } 
     else 
     { 
      [[FBSession activeSession] requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone completionHandler:completionHandler]; 
     } 
    } 

    - (BOOL)activeSessionHasPermissions:(NSArray *)permissions 
    { 
     __block BOOL hasPermissions = YES; 
     for (NSString *permission in permissions) 
     { 
      NSInteger index = [[FBSession activeSession].permissions indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 
       if ([obj isEqualToString:permission]) 
       { 
        *stop = YES; 
       } 
       return *stop; 
      }]; 

      if (index == NSNotFound) 
      { 
       hasPermissions = NO; 
      } 
     } 
     return hasPermissions; 
    } 

hy vọng điều này sẽ giúp

+2

bạn là người đàn ông thô lỗ. Tôi không biết ai downvoted này xem xét ngay cả những ứng dụng mẫu hảo hạng từ facebook bị this.I didnt mong đợi mức độ này của plebbery trong ứng dụng mẫu friggin. –

+5

Bạn chỉ có thể kiểm tra [[FBSession activeSession] .permissions containsObject: @ "publication_actions"] cho đúng thay vì sử dụng phương thức activeSessionHasPermissions: @evfemist đã viết. –

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