iPhone / iOS Facebook SDK - 您可以在应用内登录并保留登录凭据吗?
Posted
技术标签:
【中文标题】iPhone / iOS Facebook SDK - 您可以在应用内登录并保留登录凭据吗?【英文标题】:iPhone / iOS Facebook SDK - can you log in within the app, and keep the login credentials? 【发布时间】:2011-06-14 17:00:05 【问题描述】:是否可以使用 Facebook ios SDK 在应用程序内进行身份验证(而不是转到 Safari),并保留这些身份验证凭据以供下次启动应用程序使用?
当我尝试在模拟器中使用演示应用程序时,它总是去 safari 进行身份验证,这似乎有点糟糕。然后,当我进行身份验证时...如果我完全杀死该应用程序,它将要求再次进行身份验证(然后告诉我我已经登录)
有没有办法只向用户显示一个电子邮件字段和一个密码字段,然后将该信息保留在应用程序中?
【问题讨论】:
你不能使用 WebView 而不是启动 Safari 吗? 当然,但即使这样看起来也很业余。理想情况下,我只想要电子邮件和密码字段 如果您在模拟器中使用 SDK 或在未安装 Facebook 应用程序的手机上使用 SDK,那么将来遇到此问题的任何人都需要注意,Web 视图是预期的身份验证方法。如果 Facebook 应用程序可用,则流程更加无缝。但 Facebook 肯定不希望与帐户关联的电子邮件和密码保留在“应用程序内”。 (也就是说,在 3rd 方应用程序中。) 【参考方案1】:当您第一次进行身份验证时,请确保您请求“offline_access”权限。这将使 OAuth 返回给您的令牌不会在会话结束时失效,而是在字面上保持有效,直到他们出现并使用 API 将您的应用从 Facebook 注销。
然后,显然,您需要保存令牌(我觉得 NSUserDefaults 是一个很好的地方)并在以后的 FB 交互中重用它。
【讨论】:
【参考方案2】:看看这个问题和答案:Iphone facebook connect example calls safari. I don't want to use 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];
【讨论】:
我会尝试使用 nsuserdefaults。至于使用uiwebview,似乎有点笨拙。我可能会尝试使用电子邮件和密码 uitextfields 并使用 javascript 将它们注入到一个不可见的 uiwebview 中,然后使用 javascript 也单击确认按钮 我添加了更多示例代码。至于它看起来很笨拙.. 虽然我同意你的观点,Facebook 的实现看起来更好而且不那么“笨拙”,但我想说使用UIWebView
是完全可以接受的,并且(现在)可以用于 Facebook 登录。恕我直言,我不会太担心...【参考方案3】:
如果这是你真正想要的,你可以绕过它来阻止它,记住从旧的 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];
但是,这样做会让用户更有可能必须输入他们的凭据,这肯定比忍受快速应用切换方法更糟糕?
【讨论】:
以上是关于iPhone / iOS Facebook SDK - 您可以在应用内登录并保留登录凭据吗?的主要内容,如果未能解决你的问题,请参考以下文章
登录 facebook 时无法完成操作。(com.facebook.sdk 错误 2.0)错误。 iOS 6,iPhone3gs
Facebook iOs sdk iphone:从多个视图控制器调用
如何使用 facebook ios sdk for iphone 实现单点登录 (SSO)