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)

通过 Facebook iOS Sdk iphone 以编程方式对新闻提要进行喜欢/评论

iPhone应用程序中的Facebook SDK登录

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