2015-05-06 3 views
3

Я реализую v4.1 SDK для iOS, и когда я пытаюсь вызвать publishPermissions:, я не получаю обратного вызова.FBSDKLoginManager не обрабатывает logInWithPublishPermissions: правильно

По какой-то причине все работает отлично, когда я запускаю logInWithReadPermissions :, но когда я запускаю logInWithPublishPermissions: он никогда не ударяет моего обработчика ответов. Ничего не произошло.

Чтобы проверить это, я переустанавливаю свой loginManager перед запуском logInWithPublishPermissions:, и, к моему удивлению, он работал тогда (так называется NSLog (@ "RESULT")).

Я что-то пропустил, как работает loginManager? Разве я не могу использовать его, не перезагружая его?

// FacebookController.m 

@implementation FacebookController 

FBSDKLoginManager *loginManager; 
static FacebookController *_shared = nil; 

- (id)init { 
    self = [super init]; 
    if (self != nil) { 
     userData = [[NSMutableDictionary alloc] init]; 

     loginManager = [[FBSDKLoginManager alloc] init]; 
    } 
    return self; 
} 

+ (id)getInstance { 
    if (!_shared) { 
     _shared = [[self alloc] init]; 
    } 
    return _shared; 
} 

- (bool)hasPublishPermissions { 
    FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken]; 

    if(accessToken != NULL){ 
     NSSet *permissions = [accessToken permissions]; 
     if([permissions containsObject:@"publish_actions"]){ 
      return TRUE; 
     } 
    } 
    return FALSE; 
} 

- (void)requestPublishPermissionsWithDelegate:(id)aDelegate { 
    if(![self hasPublishPermissions]){ 
     // FOR SOME REASON IT WORKS IF I RESET LOGIN MANAGER AS FOLLOWS 
     // loginManager = [[FBSDKLoginManager alloc] init]; 

     [loginManager logInWithPublishPermissions:@[@"publish_actions"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
      NSLog(@"RESULT: %@", result); 
     }]; 
    } 
} 

- (void)connectToFacebookWithDelegate:(id)aDelegate {   
    FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken]; 

    if(accessToken != nil){ 
     [aDelegate performSelector:@selector(facebookSignedIn)]; 
    } else { 
     [loginManager logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
      if (error) { 
       // Process error 
       NSLog(@"ERROR"); 
      } else if (result.isCancelled) { 
       // Handle cancellations 
       NSLog(@"CANCELLED"); 
      } else { 
       NSLog(@"SUCCESS"); 
       [aDelegate performSelector:@selector(facebookSignedIn)]; 
      } 
     }]; 
    } 
} 
@end 

Edit # 1: Включая видео он работает и не работает для данных сценариев:

Не работает (loginManager переинициализация закомментирована): https://dl.dropboxusercontent.com/u/14277258/not-working.mov

Рабочая (loginManager реинициализирована): https://dl.dropboxusercontent.com/u/14277258/working.mov

+0

Привет, мы должны отправить его для просмотра, чтобы добавить опубликованные действия из статуса и обзора? –

+0

все еще проблема до сегодняшнего дня –

ответ

1

Трассировка видеопакета указывает, что вы вызываете запрос на публикацию разрешений внутри обработчика для вашего первоначального входа. Этого следует избегать:

  1. Вы вызываете другой логин после того, как пользователь уже предоставил вам некоторые разрешения - это не очень хорошо для пользователя, чтобы увидеть другое диалоговое окно входа в систему сразу после его завершения.
  2. Вы запрашиваете разрешения на публикацию, когда вам это не нужно - это может нарушить политику разработчиков Facebook и снова не лучший пользовательский интерфейс. Вместо этого вы должны запрашивать публикацию только тогда, когда вам это нужно (т. Е. Во время совместного использования).

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

+0

Да, я проверил это. –

+0

даже запускает переключатель приложения для входа в систему (т. Е. Вы видите диалоговое окно входа в систему)? Я не могу воспроизвести этот симптом, поэтому дополнительная информация была бы полезной - вы также можете отправить отчет разработчикам .facebook.com/bugs, если вы хотите включить конфиденциальный код. –

+1

Добавлено редактирование с помощью пары ссылок на видеоролики, показывающие код и симулятор для обеих ситуаций. –

Смежные вопросы