是否有可能使用Facebook iOS SDK在应用程序内进行身份验证(而不是进入Safari),并且还可以保留这些身份验证凭据以供下次启动该应用程序使用?
当我在模拟器中尝试使用演示应用程序时,它总是会进入Safari进行身份验证,这似乎有些糟糕。然后,当我进行身份验证时...如果我完全杀死该应用程序,它将要求再次进行身份验证(然后告诉我已经登录)。
是否有一种方法,只向用户提供电子邮件字段和密码字段,然后在应用程序内保存这些信息?
是否有可能使用Facebook iOS SDK在应用程序内进行身份验证(而不是进入Safari),并且还可以保留这些身份验证凭据以供下次启动该应用程序使用?
当我在模拟器中尝试使用演示应用程序时,它总是会进入Safari进行身份验证,这似乎有些糟糕。然后,当我进行身份验证时...如果我完全杀死该应用程序,它将要求再次进行身份验证(然后告诉我已经登录)。
是否有一种方法,只向用户提供电子邮件字段和密码字段,然后在应用程序内保存这些信息?
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];
}
UIWebView
对于Facebook登录是完全可接受和(现在)预期的。在我看来,我不会太担心它... - donkim如果这是您真正想要的,您可以绕过它来停止它,但请注意,大多数从旧版Facebook连接API迁移到图形的其他应用程序将以新方式运行。
在facebook.m中找到以下方法:
- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth
safariAuth:(BOOL)trySafariAuth
// 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];
}
当您首次进行身份验证时,请确保请求“offline_access”权限。这将使OAuth返回给您的令牌在会话结束时不会失效,而是一直有效,直到他们使用API退出Facebook应用程序。
然后,显然,您需要保存该令牌(我认为NSUserDefaults是一个不错的地方),并在以后的FB交互中重复使用它。