FaceBook API,登录应用程序

我遵循了这个指南,并通过Facebook集成成功创建了我的应用程序。

有什么问题?

当用户必须登录时,应用程序退出浏览器(或在Facebook应用程序中,如果已安装)

如何将身份validation完全保留在应用程序中?

oAuth登录的重点是它不会在您的应用程序中发生。 它使用快速应用程序切换在受信任的环境(Safari或Facebook应用程序)中执行身份validation。

但是,您可以修改Facebook.m以在您的应用程序中进行身份validation,但不会记住您的用户凭据。 您可以看到,如果您的iOS设备不支持多任务处理,则会有一个备份登录对话框。

摘自Facebook.m(第160行):

if ([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported]) { if (tryFBAppAuth) { NSString *scheme = kFBAppAuthURLScheme; if (_localAppId) { scheme = [scheme stringByAppendingString:@"2"]; } NSString *urlPrefix = [NSString stringWithFormat:@"%@://%@", scheme, kFBAppAuthURLPath]; NSString *fbAppUrl = [FBRequest serializeURL:urlPrefix params:params]; didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]]; } if (trySafariAuth && !didOpenOtherApp) { NSString *nextUrl = [self getOwnBaseUrl]; [params setValue:nextUrl forKey:@"redirect_uri"]; NSString *fbAppUrl = [FBRequest serializeURL:loginDialogURL params:params]; didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString: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]; } 

如果删除第一个条件并且包含代码并将didOpenOtherApp设置为NO,则可以获得所需的行为。

要禁用此行为,请修改Facebook.m第275行并将两个选项都设置为NO。

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