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

Вход в Facebook - iOS 9 - Без сафари

Он отлично работал для входа в logInWithReadPermissions в iOS 8, но как только после обновления до iOS 9 он продолжает открывать Safari или модальный UIWebView.

Есть ли у кого-то такая же проблема?

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login setLoginBehavior:FBSDKLoginBehaviorNative];
[login logInWithReadPermissions:@[@"public_profile",@"email"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
    NSLog(@"");
}];
4b9b3361

Ответ 2

Кажется, нет никакого способа получить предыдущее поведение, используя новинки FB SDK в iOS9+. Для этого вы можете использовать старый SDK. Здесь ответ от facebook на этот вопрос: введите описание изображения здесь

Ответ 3

Теперь вы можете изменить loginBehavior на FBSDKLoginBehaviorSystemAccount, поэтому FBSDKLoginManager получает Facebook, зарегистрированный пользователем из настроек iOS Facebook;)

FBSDKLoginManager *fbLogin = [[FBSDKLoginManager alloc] init];
fbLogin.loginBehavior = FBSDKLoginBehaviorSystemAccount;

От FBSDKLoginManager:

Декларация: FBSDKLoginBehaviorSystemAccount
Описание. Если учетная запись недоступна для приложения (либо не настроена пользователем, либо определена SDK), это поведение возвращается к FBSDKLoginBehaviorNative.
Примечание. Если учетная запись недоступна для приложения (либо не настроена пользователем, либо определена SDK), это поведение возвращается к FBSDKLoginBehaviorNative.

Ответ 4

Если вы хотите использовать последнюю версию SDK, а также собственное поведение входа на iOS 9

Изменить FBSDKServerConfiguration.m функцию, чтобы всегда возвращать true

- (BOOL)useNativeDialogForDialogName:(NSString *)dialogName
{
  return @YES;
}

Возвращение в Safari по-прежнему работает, если приложение Facebook не установлено

Ответ 5

Я заметил, что в обоих списках изменений:

Facebook SDK для iOS Changelog v4.x

(v4.6.0 - 10 сентября 2015 г.) Кроме того, диалоги SDK, такие как Login, Like, Share Dialogs, автоматически определяют лучший пользовательский интерфейс на основе устройства, в том числе SFSafariViewController, а не Safari. Следуйте инструкциям нашего Руководства по подготовке к iOS 9.

Facebook SDK для iOS Changelog v3.x

(v3.24.0 - 10 сентября 2015 г.) Кроме того, диалоги SDK, такие как Login, Like, Share Dialogs, автоматически определяют лучший пользовательский интерфейс на основе устройства, в том числе SFSafariViewController, а не Safari. Следуйте инструкциям нашего Руководства по подготовке к iOS 9.

Ответ 6

Я следовал за доком здесь: https://developers.facebook.com/docs/ios/ios9

после добавления пунктов 2 и 3 мое приложение переключается на собственное приложение facebook для входа в систему...

Ответ 7

если вы хотите, чтобы модальная функция открывалась и запрашивала учетные данные в facebook отдельно от приложения Safari или Facebook, просто используйте последнюю версию sdk facebook и задайте поведение входа

FBSDKLoginManager *fbLogin = [[FBSDKLoginManager alloc] init];
[login setLoginBehavior:FBSDKLoginBehaviorWeb];

это сделает процесс выхода более удобным и менее запутанным для пользователей.

Ответ 8

Использование этой версии с CocoaPods:

pod 'FBSDKCoreKit', '4.4.0'
pod 'FBSDKLoginKit', '4.4.0'
pod 'FBSDKShareKit', '4.4.0'

Ответ 9

В быстрых случаях Когда выбранным вами поведение входа в систему является Web, затем откройте webView popUp. В браузере Safari нет переадресации входа в систему

// Try to login with permissions
    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()

    fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web

Ответ 10

Вы хотите изменить поведение входа по умолчанию, как показано ниже.

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logOut];

login.loginBehavior = FBSDKLoginBehaviorSystemAccount;

[login logInWithReadPermissions:@[@"public_profile", @"email", @"gender",@"user_friends"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
    if (error)
    {
        // Process error
    }
    else if (result.isCancelled)
    {
        // Handle cancellations
    }
    else
    {       
        // Now that we are authorized to view public profile and email, request that data get data from 'me'
        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields" : @"first_name, last_name,email,name,gender,birthday"}] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
        {
        }];
    }
 }];

если у пользователя нет имени пользователя и пароля в facebook в приложении Настройки, тогда появится сафари.

Ответ 11

РЕШЕНИЕ! iOS 9.2.1 Facebook SDK 4.10.0

  • Установите Facebook SDK через Cocoapods

  • Set:

    FBSDKLoginManager * loginManager = [[FBSDKLoginManager alloc] init]; loginManager.loginBehavior = FBSDKLoginBehaviorNative;

  • В ~/FBSDKCoreKit/FBSDKServerConfigurationManager.m

Изменить:

NSOperatingSystemVersion iOS9Version = { .majorVersion = 9, .minorVersion = 0, .patchVersion = 0 };
BOOL useNativeFlow = ![FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS9Version];

To:

BOOL useNativeFlow = YES;
  1. В ~/FBSDKLoginKit/FBSDKLoginManager.m

Изменить:

BOOL useNativeDialog = [serverConfiguration useNativeDialogForDialogName:FBSDKDialogConfigurationNameLogin];

To:

BOOL useNativeDialog = YES;
  1. Найти в Pods:

    BOOL useNativeDialog

& внести те же изменения, если вы хотите использовать другие функции. Например: App Invite.

Теперь приложение использует встроенное приложение Facebook для входа.

Это решение работает для меня. Надеюсь, что это поможет.

P.S. Не забывайте вносить изменения после обновления FB SDK.