iPhone / iOS Facebook SDK – 您可以在应用程序内登录,并保留登录凭据吗?

是否可以使用Facebook iOS SDK在应用程序内进行身份validation(而不是访问Safari),并为下次启动应用程序保留这些身份validation凭据?

当我尝试在模拟器中使用演示应用程序时,它总是去safari进行身份validation,这看起来有点糟糕。 然后,当我进行身份validation时…如果我完全杀死了应用程序,它会要求再次进行身份validation(然后告诉我我已经登录)

有没有办法,只为用户提供一个电子邮件字段和一个密码字段,然后在应用程序中保留该信息?

看看这个问题和答案: Iphone facebook连接示例呼叫safari。 我不想使用safari 。 此外,您还需要将身份validation内容存储在NSUserDefaults并检查它们以防止重新登录。

编辑一些示例代码:

要保存登录内容:

 [[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:@"AccessToken"]; [[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:@"ExpirationDate"]; [[NSUserDefaults standardUserDefaults] synchronize]; 

要检查登录内容:

 _facebook = [[[Facebook alloc] initWithAppId:@"[app_id]"] retain]; _facebook.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"]; _facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"]; if (![_facebook isSessionValid]) { [_facebook authorize:_permissions delegate:self]; } else { [_facebook requestWithGraphPath:@"me" andDelegate:self]; } 

如果这是你真正想要的,你可以破解它来阻止它,记住从旧的Facebook连接api迁移到图表的大多数其他应用程序将以新的方式运行

在facebook.m中找到以下方法

 - (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth safariAuth:(BOOL)trySafariAuth 

找到didOpenOtherApp逻辑的底部并注释掉它上面的所有内容,以便它始终打开内联并调整!didOpenOtherApp括号中包含的这段代码

 // 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]; } 

但是,这样做会让用户更有可能输入他们的凭据,这肯定比采用快速应用切换方法更糟糕吗?

首次validation时,请确保您要求“offline_access”权限。 这将使OAuth返回给您的令牌不会在会话结束时失效,而是保持有效,直到它们出现并使用API​​将您的应用程序记录到Facebook之外。

然后,显然,你需要保存令牌(我觉得NSUserDefaults是一个很好的地方)并在以后的FB交互中重复使用它。