Подтвердить что ты не робот

Как мне отменить предыдущий вызов повторной авторизации Facebook?

Быстрый вопрос о SDK для iOS для Facebook. Я пытаюсь реализовать функции для пользователя, чтобы предоставить моему приложению доступ к расширенным разрешениям.

Пока код работает нормально, когда пользователь принимает запрос расширенного разрешения (из приложения iOS для Facebook, к которому пользователь перенаправляется), у меня возникают проблемы с обнаружением, когда пользователь вернулся к приложению, не приняв разрешения, или нажмите "Отмена", а затем вернитесь в приложение.

Если я нажму "Отменить" и снова включит многозадачность в приложении, ничего не будет зарегистрировано и ничего не будет показано на экране. Когда я снова пытаюсь повторить авторизацию, SDK для Facebook генерирует исключение:

FBSession: неверно повторять авторизацию, пока предыдущий вызов повторной авторизации еще не завершен.

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

Здесь код, который я использую в данный момент:

@try {
    [[FBSession activeSession] reauthorizeWithPermissions:[self requiredPermissions]
                                             behavior:FBSessionLoginBehaviorWithFallbackToWebView
                                    completionHandler:^(FBSession *session, NSError *error) {
        if (!error) {
            [self fetchUserPermissionsWithCompletionHandler:^(BOOL extendedGranted) {
                if (extendedGranted) {
                    [self setCanPostToActivityStream:YES];
                }
            }];
        }
        else {
            NSLog(@"%@", [error localizedDescription]);
        }
    }];
}
@catch (NSException *exception) {
    NSLog(@"%@", exception);
}

Теперь проблема не в коде выше - код работает нормально. Проблема, с которой я снова сталкиваюсь, отменяет повторный авторизации предыдущего, когда пользователь не возвращается к приложению после разрешения разрешений. SDK для Facebook, так как он, похоже, никак не предупреждает приложение этой ситуации.

4b9b3361

Ответ 1

Из вашего делегата приложения, когда вызывается - (void)applicationDidBecomeActive:(UIApplication*)application, вам необходимо сделать вызов активного сеанса handleDidBecomeActive. После этого обработчик завершения, связанный с вашим вызовом reauthorizeWithPublishPermissions, будет вызван и предоставит соответствующую ошибку.

- (void)applicationDidBecomeActive:(UIApplication*)application
{
    [[FBSession activeSession] handleDidBecomeActive];
}

Ответ 2

То, что вы должны увидеть, возвращаясь из SDK, является ошибкой обработчика завершения повторного авторизации.

{
    "com.facebook.sdk:ErrorLoginFailedReason" = "com.facebook.sdk:ErrorReauthorizeFailedReasonUserCancelled";
}

Я протестировал что-то подобное со следующей настройкой: Xcode 4.5, iOS 5, Authorize против m.facebook.com. После первоначальной авторизации я помещаю код, чтобы нажать reauthorize, затем нажмите "Отмена" и получил эту ошибку.

    [FBSession.activeSession
     reauthorizeWithPublishPermissions:
     [NSArray arrayWithObject:@"publish_actions"]
     defaultAudience:FBSessionDefaultAudienceFriends
     completionHandler:^(FBSession *session, NSError *error) {
        if (!error) {
            // Success case
        } else {
            // Check the error, info
            // [[error userInfo] objectForKey:@"com.facebook.sdk:ErrorLoginFailedReason"]
        }
    }];

Если вы этого не видите, это ошибка, и вы можете захотеть записать ее с помощью Facebook.