ios - seccion - no puedo ver inicio en facebook
La aplicaciĆ³n nativa de Facebook no se abre con el inicio de sesiĆ³n de Facebook en iOS 9 (12)
@dan tiene razón. Para proporcionar la mejor experiencia para los usuarios de iOS 9, el nuevo SDK determina automáticamente el mejor flujo de inicio de sesión. Si está ejecutando iOS 8 o anterior, aún se preferirá el cambio de aplicación.
He actualizado iPhone 6 plus a iOS 9 beta e intento realizar el inicio de sesión de Facebook, pero cada vez se presenta UIWebView con el formulario de inicio de sesión de Facebook.
Tengo Facebook SDK
FB_IOS_SDK_VERSION_STRING @"3.24.0"
FB_IOS_SDK_TARGET_PLATFORM_VERSION @"v2.2"
Y estoy usando los siguientes métodos para iniciar sesión en Facebook
NSArray *permissions = @[@"email",@"user_birthday",@"public_profile"];
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
fromViewController:nil
completionHandler:completionHandler];
} else {
[self clearAllUserInfo];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
// create a new facebook session
FBSession *fbSession = [[FBSession alloc] initWithPermissions:permissions];
[FBSession setActiveSession:fbSession];
[fbSession openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent
fromViewController:nil
completionHandler:completionHandler];
}
Tengo la siguiente configuración en archivo plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
<string>fbapi20131010</string>
<string>fbapi20131219</string>
<string>fbapi20140410</string>
<string>fbapi20140116</string>
<string>fbapi20150313</string>
<string>fbapi20150629</string>
<string>fb-messenger-api20140430</string>
<string>fbauth</string>
<string>fbauth2</string>
<array>
Por favor, hágame saber lo que me falta aquí.
Primero está comprobando la
iPhone device Setting-> Facebook credentials
pero nunca abra la aplicación de Facebook para iniciar sesión.
Parece que no reconoce la aplicación de Facebook instalada en el dispositivo.
Agregar las siguientes líneas al archivo
.plist
me ayudó:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
<string>fbapi20131010</string>
<string>fbapi20131219</string>
<string>fbapi20140410</string>
<string>fbapi20140116</string>
<string>fbapi20150313</string>
<string>fbapi20150629</string>
<string>fbauth</string>
<string>fbauth2</string>
<string>fb-messenger-api20140430</string>
</array>
Al final cambié mi Podfile a la versión anterior de FB:
De:
pod ''FBSDKCoreKit'' pod ''FBSDKLoginKit'' pod ''FBSDKShareKit''
A:
pod ''FBSDKCoreKit'',''~>4.5.1''
pod ''FBSDKLoginKit'',''~>4.5.1''
pod ''FBSDKShareKit'',''~>4.5.1''
Desde mi punto de vista, Facebook debería verificar el último inicio de sesión del usuario y, en función de ello, desencadenar el flujo de inicio de sesión correcto (y mantener a los pequeños desarrolladores fuera de la "guerra web contra la guerra nativa").
Con el lanzamiento de iOS 9, Apple introdujo algunos cambios significativos en el cambio de aplicaciones. Esto ha afectado las aplicaciones iOS 9 integradas con Facebook. La mayoría de las personas lo notarán en su experiencia al usar el inicio de sesión de Facebook. En las aplicaciones que usan el SDK más reciente (v4.6 y v3.24), mostraremos un flujo usando Safari View Controller (SVC) en lugar de cambio rápido de aplicación (FAS) debido a intersticiales de diálogo adicionales que agregan pasos adicionales a proceso de inicio de sesión en FAS en iOS 9. Además, los datos que hemos visto de más de 250 aplicaciones indican que esta es la mejor experiencia para las personas a largo plazo. Por favor, siga leyendo para más detalles. developers.facebook.com/blog/post/2015/10/29/…
Después de configurar todas las claves .plist necesarias como se menciona en esta columna, utilicé la siguiente solución para salir del problema de inicio de sesión.
var fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web
Para que siempre inicie sesión en la aplicación.
Esto es por diseño. Facebook todavía tiene algún problema con iOS9.
Consulte el equipo de Facebook en respuesta: https://developers.facebook.com/bugs/786729821439894/?search_id Gracias
Esto funcionó para mí.
Agregue esto a su
.plist
.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
</array>
Para iOS9, necesitamos agregar clave a nuestro
.plist
para esquemas de URL.
Facebook ha cambiado el comportamiento de inicio de sesión de Facebook para iOS9.
Aquí está la cita de la publicación del blog de Facebook :
Hemos estado monitoreando datos y CTR para más de 250 aplicaciones durante las últimas 6 semanas desde que se lanzó iOS 9. La tasa de clics (CTR) del inicio de sesión SVC supera al CTR del inicio de sesión de cambio de aplicación y está mejorando a un ritmo 3 veces mayor que la experiencia de cambio de aplicación. Esto indica que la experiencia SVC es mejor para las personas y los desarrolladores de hoy, y probablemente será la mejor solución a largo plazo. Por esta razón, el último SDK de Facebook para iOS utiliza SVC como la experiencia predeterminada para iniciar sesión.
Poner este en appdelegate resolvió mi problema
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
Sé que es viejo
Pero puede poner este código en su
application:(UIApplication *)application didFinishLaunchingWithOptions:
SEL useNativeSel = sel_getUid("useNativeDialogForDialogName:");
Class FBSDKServerConfiguration = NSClassFromString(@"FBSDKServerConfiguration");
Method useNativeMethod = class_getInstanceMethod(FBSDKServerConfiguration, useNativeSel);
IMP returnYES = imp_implementationWithBlock(^BOOL(id me, id dialogName) {
return YES;
});
method_setImplementation(useNativeMethod, returnYES);
Y
FacebookSDK
iniciará sesión a través de la aplicación nativa cuando la aplicación esté instalada en lugar del navegador.
Safari View Controller está por defecto en el SDK de Facebook. Para aquellos de ustedes que desean volver a la experiencia anterior, vea a continuación. Funciona solo para 3.x SDK, esto no funcionará en 4.x.
Si desea que el SDK v3.x (probado en v3.24.1) funcione como antes (sin abrir Safari View Controller y hacer que la aplicación cambie) llame a este código en algún lugar al inicio de la aplicación, por ejemplo didFinishLaunchingWithOptions:
SEL useSafariSel = sel_getUid("useSafariViewControllerForDialogName:");
SEL useNativeSel = sel_getUid("useNativeDialogForDialogName:");
Class FBDialogConfigClass = NSClassFromString(@"FBDialogConfig");
Method useSafariMethod = class_getClassMethod(FBDialogConfigClass, useSafariSel);
Method useNativeMethod = class_getClassMethod(FBDialogConfigClass, useNativeSel);
IMP returnNO = imp_implementationWithBlock(^BOOL(id me, id dialogName) {
return NO;
});
method_setImplementation(useSafariMethod, returnNO);
IMP returnYES = imp_implementationWithBlock(^BOOL(id me, id dialogName) {
return YES;
});
method_setImplementation(useNativeMethod, returnYES);
Mezcla dos métodos de FBDialogConfig.
No olvide importar el encabezado objc / runtime.h:
#import <objc/runtime.h>
@SimonCross algunas personas simplemente no quieren entender que Safari View Controller ofrece la mejor experiencia de usuario: piensan, o saben con certeza, que sus usuarios no han iniciado sesión en Facebook en Safari, pero sí lo están en la aplicación de Facebook .
A continuación se muestra el proceso completo para el nuevo "inicio de sesión de Facebook".
así es como he revisado mi integración de Facebook Login para que funcione en la última actualización.
Xcode 7.x , iOS 9 , Facebook SDK 4.x
Paso 1. Descargue el último SDK de Facebook (incluye cambios importantes).
Paso 2. Agregue FBSDKCoreKit.framework y FBSDKLoginKit.framework a su proyecto.
Paso 3. Ahora vaya a Proyecto> Fases de compilación> agregue SafariServices.framework
Paso 4. Hay tres cambios en info.plist que debemos verificar.
4.1 Asegúrese de tener a continuación en su archivo info.plist
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string><your fb id here eg. fbxxxxxx></string> </array> </dict> </array> <key>FacebookAppID</key> <string><your FacebookAppID></string> <key>FacebookDisplayName</key> <string><Your_App_Name_Here></string>
4.2 Ahora agregue a continuación para los servidores de Facebook de la Lista Blanca, esto es imprescindible para iOS 9
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>facebook.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>fbcdn.net</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>akamaihd.net</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict>
4.3 Agregar esquemas de URL
<key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fb-messenger-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array>
Paso 5. Ahora abra el archivo AppDelegate.m
5.1 Agregue a continuación las declaraciones de importación (elimine la anterior).
#import <FBSDKLoginKit/FBSDKLoginKit.h> #import <FBSDKCoreKit/FBSDKCoreKit.h>
5.2 actualización siguiendo los siguientes métodos
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[FBSDKAppEvents activateApp];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return [[FBSDKApplicationDelegate sharedInstance] application:application
didFinishLaunchingWithOptions:launchOptions];
}
Paso 6. Ahora necesitamos modificar nuestro controlador de inicio de sesión, donde hacemos la tarea de inicio de sesión
6.1 Agregar estas importaciones en Login ViewController.m
#import <FBSDKCoreKit/FBSDKCoreKit.h> #import <FBSDKLoginKit/FBSDKLoginKit.h>
6.2 Agregar botón de inicio de sesión de Facebook
FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init];
loginButton.center = self.view.center;
[self.view addSubview:loginButton];
6.3 Haga clic en el botón Iniciar sesión
-(IBAction)facebookLogin:(id)sender
{
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
if ([FBSDKAccessToken currentAccessToken])
{
NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);
[self fetchUserInfo];
}
else
{
[login logInWithReadPermissions:@[@"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
if (error)
{
NSLog(@"Login process error");
}
else if (result.isCancelled)
{
NSLog(@"User cancelled login");
}
else
{
NSLog(@"Login Success");
if ([result.grantedPermissions containsObject:@"email"])
{
NSLog(@"result is:%@",result);
[self fetchUserInfo];
}
else
{
[SVProgressHUD showErrorWithStatus:@"Facebook email permission error"];
}
}
}];
}
}
6.4 Obtener información del usuario (nombre, correo electrónico, etc.)
-(void)fetchUserInfo
{
if ([FBSDKAccessToken currentAccessToken])
{
NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, email"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error)
{
NSLog(@"results:%@",result);
NSString *email = [result objectForKey:@"email"];
NSString *userId = [result objectForKey:@"id"];
if (email.length >0 )
{
//Start you app Todo
}
else
{
NSLog(@“Facebook email is not verified");
}
}
else
{
NSLog(@"Error %@",error);
}
}];
}
}
Paso 7. Ahora puede construir un proyecto, debería aparecer debajo de la pantalla.
Espero que esto los ayude, chicos.
Referencias : Gracias a documentos de Facebook, publicaciones de y Google.