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

Native Facebook Login перестает работать после обновления SDK до версии 3.14

Обновить. Как-то похоже, что поведение изменилось. Я больше не получаю сообщение об ошибке, но родной вход по-прежнему не работает. Вместо этого я перенаправлен на веб-диалог, если приложение Facebook не установлено. Удалил ли Facebook поддержку имени для последнего SDK? Разрешения, которые я запрашивал, были "public_profile", "email" и "user_likes". Я также попытался удалить разрешение "user_likes", так как он не является частью основных разрешений, как указано здесь: https://developers.facebook.com/docs/ios/ui-controls#iosintegration Тем не менее внутренний диалог входа не появляется!

Недавно я обновил свой проект iOS для использования версии SDK версии 3.14.0 (обновлен от версии 3.13.0 через CocoaPods). Я прочитал заметки об обновлении и изменил разрешение "basic_info" на "public_profile", как рекомендовано.

Если я теперь звоню

FBSession openActiveSessionWithReadPermissions:
                                   allowLoginUI:
                              completionHandler:

он работает только через интернет или в Facebook. Если я вхожу в исходное состояние в настройках ОС, логин завершается с ошибкой

Error Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. (com.facebook.sdk error 2.)"

Кто-нибудь сталкивался с подобными проблемами? Разве это не так? Или это проблема с "измененными" разрешениями?

Отношения К

4b9b3361

Ответ 1

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

Нижняя строка
Из-за нового процесса входа в систему, в котором пользователи теперь могут одобрять/отклонять каждое запрошенное разрешение (что не поддерживается встроенным входом для iOS), Facebook изменил поведение входа в систему по умолчанию sdk, чтобы сначала попробовать быстрый переключатель Facebook, а затем вернуться к веб-представление, полностью игнорируя любые учетные данные Facebook на уровне системы ios.

Это указано в руководстве по обновлению (форма 3.13 > 3.14) здесь: https://developers.facebook.com/docs/ios/upgrading

Релевантная часть:
"Поведение входа по умолчанию изменилось с FBSessionLoginBehaviorUseSystemAccountIfPresent на FBSessionLoginBehaviorWithFallbackToWebView".

Итак, что делать?
Ну, если вам не нужны какие-либо новые вещи, FBLikeControl и т.д., Которые были введены в 3.14, вы можете просто понизить до 3.13. Однако, если вам нужно/нужно использовать 3.14n, существует метод экземпляра FBSession, который принимает параметр FBSessionLoginBehavior как параметр: https://developers.facebook.com/docs/reference/ios/current/class/FBSession/#openWithBehavior:completionHandler:

Я обновил тело моего метода для открытия сеанса Facebook:

    [FBSession openActiveSessionWithReadPermissions:@[@"email", @"user_location"]
                                       allowLoginUI:YES
                                  completionHandler:
                                          ^(FBSession *session, FBSessionState state, NSError *error) {
                                              [self sessionStateChanged:session state:state error:error];
                                          }
    ];

в

    FBSessionStateHandler completionHandler = ^(FBSession *session, FBSessionState status, NSError *error) {
        [self sessionStateChanged:session state:status error:error];
    };

    if ([FBSession activeSession].state == FBSessionStateCreatedTokenLoaded) {
        // we have a cached token, so open the session
        [[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent
                  completionHandler:completionHandler];
    } else {
        [self clearAllUserInfo];
        // create a new facebook session
        FBSession *fbSession = [[FBSession alloc] initWithPermissions:@[@"email", @"user_location"]];
        [FBSession setActiveSession:fbSession];
        [fbSession openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent
                  completionHandler:completionHandler];
    }

ПРИМЕЧАНИЕ. мой метод clearAllUserInfo включает в себя следующие строки:

    [FBSession.activeSession closeAndClearTokenInformation];
    [FBSession renewSystemCredentials:^(ACAccountCredentialRenewResult result, NSError *error) {
        NSLog(@"%@", error);
    }];
    [FBSession setActiveSession:nil];

Также стоит проверить документацию в Facebook на понимание сеансов: http://developers.facebook.com/docs/facebook-login/ios/v2.0#sessions

Ответ 2

Проверьте разрешения, о которых вы просите, в новом SDK (3.14) разрешение basic_info устарело, и вам необходимо отправить приложение для просмотра для расширенных разрешений. Основные разрешения: public_profile, email и user_friends

Дополнительная информация здесь: https://developers.facebook.com/docs/ios/upgrading

Ответ 3

Возможно, вам может не хватать этот метод:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return [FBSession.activeSession handleOpenURL:url];
}

Это помогло моему делу, в котором мне пришлось перенестись с 3.9.0 до последней. Надеюсь, что это поможет.

Ответ 4

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

Ответ 5

если вы используете Facebook SDK 4.0, можно установить логин. Значение по умолчанию FBSDKLoginBehaviorNative, но вы можете установить его на FBSDKLoginBehaviorSystemAccount.

См. ниже код:

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
login.loginBehavior = FBSDKLoginBehaviorSystemAccount;
[loginManager logInWithReadPermissions:@[@"email"]
                    fromViewController:self
                               handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
  //TODO: process error or result
 }];