Inicio de sesión en Facebook – iOS 9 – Sin Safari

Funcionó bien para iniciar sesión con logInWithReadPermissions en iOS 8, pero tan pronto después de la actualización a iOS 9 sigue abriendo Safari o un UIWebView modal.

¿Alguien tiene el mismo problema?

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

Parece que no hay forma de obtener el comportamiento anterior usando newests FB SDK en iOS9 +. Puedes usar un viejo SDK para hacer eso. Aquí hay una respuesta del facebook a esa pregunta: enter image description here

A partir de ahora, puede cambiar loginBehavior a FBSDKLoginBehaviorSystemAccount, por lo que FBSDKLoginManager obtiene Facebook como usuario de la configuración de Facebook de iOS;)

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

Desde FBSDKLoginManager:

Declaración : FBSDKLoginBehaviorSystemAccount
Descripción : si la cuenta no está disponible para la aplicación (ya sea que no esté configurada por el usuario o según lo determine el SDK), este comportamiento regresa a FBSDKLoginBehaviorNative.
Nota : Si la cuenta no está disponible para la aplicación (ya sea que no esté configurada por el usuario o según lo determine el SDK), este comportamiento regresa a FBSDKLoginBehaviorNative.

Usando 20150708 me lo resolvió en iOS 9.

Enlace al SDK: https://developers.facebook.com/resources/FacebookSDKs-iOS-20150708.pkg

Si desea utilizar el último SDK y también el comportamiento de inicio de sesión nativo en iOS 9

Edite la función FBSDKServerConfiguration.m para que siempre devuelva verdadero

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

Volver a Safari sigue funcionando si la aplicación de Facebook no está instalada

Me di cuenta de que en ambos registros de cambios, también:

SDK de Facebook para el registro de cambios de iOS v4.x

(v4.6.0 – 10 de septiembre de 2015) Además, los cuadros de diálogo del SDK, como Login, Like, Share Dialogs determinan automáticamente la mejor interfaz de usuario basada en el dispositivo, incluido SFSafariViewController en lugar de Safari. Siga la guía de preparación para iOS 9.

Facebook SDK para iOS Changelog v3.x

(v3.24.0 – 10 de septiembre de 2015) Además, los cuadros de diálogo del SDK, como Login, Like, Share Dialogs determinan automáticamente la mejor interfaz de usuario basada en el dispositivo, incluido SFSafariViewController en lugar de Safari. Siga la guía de preparación para iOS 9.

Seguí el documento aquí: https://developers.facebook.com/docs/ios/ios9

después de agregar el punto 2 y 3, mi aplicación cambia a la aplicación de Facebook nativa para iniciar sesión …

si desea que un modal se abra y solicite credenciales de Facebook por separado desde la aplicación Safari o Facebook, simplemente use el último SDK de Facebook y establezca el comportamiento de inicio de sesión

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

esto hará que el proceso de cierre de sesión sea más conveniente y menos confuso para los usuarios.

Usando esta versión con CocoaPods:

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

In swift Cuando su comportamiento de inicio de sesión selectivo es Web, luego abra webView popUp. No hay un redireccionamiento de inicio de sesión al navegador safari

 // Try to login with permissions let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web 

Desea cambiar el comportamiento de inicio de sesión predeterminado de la siguiente manera

 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) { }]; } }]; 

si el usuario no tiene su nombre de usuario y contraseña de Facebook completados en la aplicación de configuración , aparecerá safari.

¡SOLUCIÓN! iOS 9.2.1 Facebook SDK 4.10.0

  1. Instalar el SDK de Facebook a través de Cocoapods

  2. Conjunto:

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

  3. En ~ / FBSDKCoreKit / FBSDKServerConfigurationManager.m

Cambio:

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

A:

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

Cambio:

 BOOL useNativeDialog = [serverConfiguration useNativeDialogForDialogName:FBSDKDialogConfigurationNameLogin]; 

A:

 BOOL useNativeDialog = YES; 
  1. Encuentra en las vainas:

    BOOL useNativeDialog

y realice los mismos cambios si desea usar otras funciones. Por ejemplo: aplicación de invitación.

Ahora la aplicación usa la aplicación nativa de Facebook para iniciar sesión.

Esta solución funciona para mí. Espero eso ayude.

PD No olvide hacer cambios después de actualizar FB SDK.