2011-04-14 2 views
7

Sé que era posible antes de la API de gráficos.iOS: Conéctese a Facebook sin dejar la aplicación para autorización

Trabajo en una aplicación de iPhone que puede no estar en segundo plano (uno de los requisitos).
Además, hay una pantalla de inicio de sesión en el inicio de la aplicación.
Por lo tanto, no es adecuado ir a un segundo plano para autenticarse en Facebook y luego regresar a la aplicación y volver a iniciar sesión cada vez que el usuario quiera compartir algo.

Por lo tanto, mi pregunta es si hay una forma de autenticarse con Facebook sin salir de la aplicación.

Por cierto, he intentado usar la antigua API.
Funcionó al principio pero ayer dejó de funcionar.
Acabo de ver una pantalla en blanco dentro de la antigua vista web de inicio de sesión de Facebook.
También he comprobado una de mis aplicaciones anteriores que usan esa antigua API de Facebook Connect y también obtengo la misma pantalla de inicio de sesión en blanco en esa aplicación.

Cualquier idea será apreciada.

Gracias de antemano.

-
Michael.

Respuesta

8

En Facebook.m

- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth 
        safariAuth:(BOOL)trySafariAuth { 
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
           _appId, @"client_id", 
           @"user_agent", @"type", 
           kRedirectURL, @"redirect_uri", 
           @"touch", @"display", 
           kSDKVersion, @"sdk", 
           nil]; 

método comentario cabo esta

UIDevice *device = [UIDevice currentDevice]; 
    if ([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported]) { 
    if (tryFBAppAuth) { 
     NSString *fbAppUrl = [FBRequest serializeURL:kFBAppAuthURL params:params]; 
     didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]]; 
    } 

    if (trySafariAuth && !didOpenOtherApp) { 
     NSString *nextUrl = [NSString stringWithFormat:@"fb%@://authorize", _appId]; 
     [params setValue:nextUrl forKey:@"redirect_uri"]; 

     NSString *fbAppUrl = [FBRequest serializeURL:loginDialogURL params:params]; 
     didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]]; 
    } 
    } 

Esto evitará la aplicación de ir a fondo y le mostrará el cuadro de diálogo FB estándar.

+0

gracias. Gran solución –

+0

Gracias de mí también: un cliente estaba desesperado por esto en vez de iniciar sesión único y me ahorró mucho trabajo. ¿Puedes confirmar que esto continuará funcionando después de que Facebook elimine el soporte para OAUTH 1 y el viejo SDK? –

+0

Creo que debería funcionar, pero le aconsejo que actualice la aplicación si algo sucede con FB. –

6

Aquí tiene una solución alternativa.

Si no te gusta cambiar el código de Facebook SDK y quieren una solución que le permite elegir entre SSO o el anticuado mecanismo, se puede implementar una extensión de esta manera:

//Facebook_SSOExtension.h 
-------------------------------------------------------- 

@interface Facebook(SSOExtension) 
-(void) authorize:(NSArray*)permissions useSSO:(BOOL) useSSO; 
@end 

//Facebook_SSOExtension.m 
-------------------------------------------------------- 

//So warnings do not appear 
@interface Facebook(PrivateSSOExtension) 
- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth 
        safariAuth:(BOOL)trySafariAuth; 
-(void) setPermissions:(NSArray*) permissions; 
@end 

@implementation Facebook(SSOExtension) 
-(void) authorize:(NSArray*)permissions useSSO:(BOOL) useSSO 
{ 
    [self setPermissions: permissions]; 
    [self authorizeWithFBAppAuth:useSSO safariAuth:useSSO]; 
} 
@end 

Incluso aunque esto requiere más trabajo que comentar el código sso, podrá actualizar el facebook-sdk sin mayores problemas (si cambian el nombre authorizeWithFBAppAuth: safariAuth: su extensión no funcionará, use afirma para detectar este problema rápidamente). Además, si está creando un componente reutilizable para interactuar con Facebook sin repetir las cosas una y otra vez, esto también le ahorrará trabajo.

Saludos.

+0

Buen punto :) –

+0

actualmente - setPermissions provoca un bloqueo. [Facebook setPermissions:]: selector no reconocido –

Cuestiones relacionadas