FaceBook API,登录应用程序

时间:2011-08-06 23:28:57

标签: ios facebook facebook-graph-api facebook-ios-sdk

我跟着this guide,我已经通过Facebook集成成功创建了我的应用程序。

有什么问题?

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

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

2 个答案:

答案 0 :(得分:3)

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

但是,您可以修改Facebook.m以在您的应用程序中进行身份验证,但不会记住您的用户凭据。您可以看到,如果您的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,则可以获得您正在寻找的行为。

答案 1 :(得分:2)

要禁用此行为,请修改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];
}