Facebook iOS 3.1 sdk login с отзывами разрешений на публикацию - программирование
Подтвердить что ты не робот

Facebook iOS 3.1 sdk login с отзывами разрешений на публикацию

У меня возникли проблемы с входом в систему с разрешениями публикации в facebook 3.1 ios sdk.

В моем приложении есть кнопка для совместного использования видео, и когда пользователь нажимает на нее, я хочу добавить базовое + публичное разрешение. Насколько я понимаю, мне нужно сделать два вызова -

  • openActiveSessionWithReadPermissions, а затем
  • reauthorizeWithPublishPermissions

Вот код, который я использую сейчас:

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

Я вижу, что блок в openSessionForReadPermissions вызывается дважды (один раз с FBSessionStateOpen и один раз с FBSessionStateOpenTokenExtended из вызова openSessionForPublishPermissions), и я получаю ErrorReauthorizeFailedReasonUserCancelled при первом попытке входа в приложение (если O удалил все разрешения приложений раньше).

Каков правильный способ внедрения этого входа? Приложение не требует входа в систему Facebook, кроме этой одной функции, поэтому процесс входа в систему должен быть одним нажатием кнопки.

Спасибо!

4b9b3361

Ответ 1

Я столкнулся с этой проблемой. Решение, которое я нашел, завершает вызов [self openSessionForPublishPermissions]; в блоке dispatch_async.

Пример:

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

Причина в том, что вызов reauthorize.. должен быть после цикла событий, из которого вызывается openActiveSession..

Ответ 2

Есть ли вероятность, что это может быть тайм-аут для достижения точки останова? Получил эту ошибку один раз, но не повторил после запуска с отключенными точками останова.