Разобрать недействительный токен сеанса (Код: 209, Версия: 1.7.1)

Я только что обновил и мой Parse, и Facebook SDK (1.7.1 и 4.0 соответственно) - и это было абсолютной болью для работы, я мог бы добавить!

Однако теперь я получаю 209 ошибок при попытке войти через Facebook.

Вот пример моего кода:

- (void)loginWithFacebook:(HMSuccessBlock)completion{
NSArray *permissionsArray = @[@"user_about_me",@"user_location",@"user_friends",@"user_relationships"];

// Login PFUser using Facebook

[PFFacebookUtils logInInBackgroundWithReadPermissions:permissionsArray block:^(PFUser *user, NSError *error) {
    if (!user) {
        NSLog(@"Uh oh. The user cancelled the Facebook login.");
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Log In Error"
                                                        message:error.localizedDescription
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"Dismiss", nil];
        [alert show];
        completion(NO, error);

    } else if (user.isNew) {
        NSLog(@"User signed up and logged in through Facebook!");
        if (completion) {
            completion(YES, nil);
        }
    } else {
        NSLog(@"User logged in through Facebook!");
           completion(YES, nil);
    }
}];
}

Который выдает следующее [Ошибка]: недопустимый токен сеанса (Код: 209, Версия: 1.7.1)

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

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [FBAppCall handleOpenURL:url
              sourceApplication:sourceApplication
                    withSession:[PFFacebookUtils session]];
}

Однако я не могу найти что-либо, чтобы повторить это в обновленной версии, поэтому мой код

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                      openURL:url
                                            sourceApplication:sourceApplication
                                                   annotation:annotation];
}

Любая помощь будет принята с благодарностью.

4 ответа

Решение

Некоторые из опубликованных ответов были временными исправлениями - однако проблема могла повториться позже, если пользователь вышел из системы и попытался снова войти в систему - я думаю, что это было из-за того, что я позволил анонимным пользователям также - единственный способ, которым я мог очистить это, состоит в том, чтобы позвонить [pfuser logout] до входа

Удалите приложение с симулятора или телефона, затем пересоберите и снова запустите приложение. Иногда старый токен кэшируется. Я только что решил эту проблему для своего приложения.

Проверьте эту страницу: https://parse.com/tutorials/session-migration-tutorial

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

    [PFUser enableRevocableSessionInBackground];

На веб-сайте Parse есть раздел по обработке этой ошибки, который может вам помочь: https://www.parse.com/docs/ios_guide.

Я думаю, что нужно выполнить еще несколько шагов:

  1. Вы должны добавить [FBSDKAppEvents activateApp] в applicationDidBecomeActive,

  2. Ты должен написать
    return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; в методе didFinishLaunchingWithOptions в AppDelegate,

Попытки вышеупомянутых шагов должны работать для вас.

При использовании отзываемых сеансов ваш текущий токен сеанса может стать недействительным, если соответствующий ему объект сеанса будет удален из облака анализа. Это может произойти, если вы реализуете пользовательский интерфейс диспетчера сеансов, который позволяет пользователям выходить из других устройств, или если вы вручную удалите сеанс с помощью облачного кода, REST API или браузера данных. Сессии также могут быть удалены из-за автоматического истечения срока действия (если настроено в настройках приложения). Когда токен сеанса устройства больше не соответствует объекту сеанса в облаке синтаксического анализа, все запросы API от этого устройства завершатся ошибкой "Ошибка 209: недопустимый токен сеанса".

Другие вопросы по тегам