Обработчик reauthorizeWithPublishPermissions вызывается с ErrorReauthorizedFailedReasonUserCancelled

Я использую iOS SDK 3.1.1 и пытаюсь получить разрешение на чтение и публикацию одновременно. Как говорится в руководстве, я вызываю FBSession openActiveSessionWithReadPermissions и в его обработчике — обработчике A — вызываю [[FBSession activeSession] reauthorizeWithPublishPermissions, только если обработчик A вызывается с состоянием сеанса FBSessionStateOpen.

Когда у меня есть учетная запись facebook, установленная в настройках iOS 6, обработчик reauthorizeWithPublishPermissions — обработчик B — вызывается нормально с аргументом ошибки, равным nil.

Однако, если у меня нет учетной записи facebook в настройках iOS 6, обработчик B вызывается с ошибкой повторной аутентификации с именем «ErrorReauthorizeFailedReasonUserCancelled», когда приложение переключается на Safari для получения разрешения на публикацию.

Еще более странно вот что. В обоих случаях перед вызовом обработчика B вызывается обработчик A с состоянием сеанса FBSessionStateOpenTokenExtended.

Это нормальное или ожидаемое поведение нового SDK? Если да, то не должен ли я проверить, является ли ошибка нулевой в обработчике B?


person minorblend    schedule 29.10.2012    source источник
comment
developers.facebook.com/bugs/ сообщил об этом в систему отслеживания ошибок Facebook.   -  person minorblend    schedule 02.11.2012
comment
у меня тоже такое бывает, вы нашли обходной путь?   -  person marchinram    schedule 29.11.2012


Ответы (1)


случилось со мной, и после некоторого поиска я нашел решение для этого. Вы должны вызвать reauthorizeWithPublishPermissions в dispatch_async в обработчике A openActiveSessionWithReadPermissions:

dispatch_async(dispatch_get_current_queue(), ^{
    [[FBSession activeSession] reauthorizeWithPublishPermissions:permissions
                                                 defaultAudience:FBSessionDefaultAudienceEveryone
                                               completionHandler:^(FBSession *session, NSError *error) {
                                                   // handle the flow here
                                           }];
});
person haynar    schedule 30.12.2012
comment
не могли бы вы предоставить полный образец, пожалуйста? нужно ли вызывать dispatch_async в завершенииHandler openActiveSessionWithReadPermissions? - person Nico AD; 24.01.2013
comment
да, вы должны сделать это в обработчике завершения openActiveSessionWithReadPermissions - person haynar; 24.01.2013