FaceBook API, connectez-vous à l'application

J'ai suivi ce guide et j'ai créé mon application avec succès avec l'intégration de Facebook.

Quel est le problème?

Lorsque l'user doit effectuer la connection, l'application se ferme dans le browser (ou dans l'application Facebook, si elle est installée)

Comment puis-je conserver l'authentification entièrement dans l'application?

Le sharepoint connection oAuth est que cela ne se produit pas dans votre application. Il utilise la commutation rapide pour effectuer l'authentification dans un environnement sécurisé (Safari ou l'application Facebook).

Toutefois, vous pouvez modifier Facebook.m pour effectuer l'authentification dans votre application, mais les informations d'identification de votre user ne seront pas mémorisées. Vous pouvez voir que si votre appareil iOS ne prend pas en charge le multitâche, il existe une boîte de dialog de connection de sauvegarde.

Extrait de Facebook.m (vers la ligne 160):

if ([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported]) { if (tryFBAppAuth) { NSSsortingng *scheme = kFBAppAuthURLScheme; if (_localAppId) { scheme = [scheme ssortingngByAppendingSsortingng:@"2"]; } NSSsortingng *urlPrefix = [NSSsortingng ssortingngWithFormat:@"%@://%@", scheme, kFBAppAuthURLPath]; NSSsortingng *fbAppUrl = [FBRequest serializeURL:urlPrefix params:params]; didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithSsortingng:fbAppUrl]]; } if (trySafariAuth && !didOpenOtherApp) { NSSsortingng *nextUrl = [self getOwnBaseUrl]; [params setValue:nextUrl forKey:@"redirect_uri"]; NSSsortingng *fbAppUrl = [FBRequest serializeURL:loginDialogURL params:params]; didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithSsortingng:fbAppUrl]]; } } // If single sign-on failed, open an inline login dialog. This will require the user to // enter his or her credentials if (!didOpenOtherApp) { [_loginDialog release]; _loginDialog = [[FBLoginDialog alloc] initWithURL:loginDialogURL loginParams:params delegate:self]; [_loginDialog show]; } 

Si vous supprimez le premier conditionnel et qu'il contient du code et que vous définissez didOpenOtherApp sur NO, vous pouvez get le comportement que vous searchz.

Pour désactiver ce comportement, modifiez la ligne 275 de Facebook.m et définissez les deux options sur NON.

 - (void)authorize:(NSArray *)permissions { self.permissions = permissions; // with both options NO, authorization always happens in-app [self authorizeWithFBAppAuth:NO safariAuth:NO]; }