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交互中重复使用它。