- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
在任何事情之前,我都阅读了 this和 this在提问之前解决下面的问题。
我的问题是,当 accessToken 过期时(无论是因为过期日期,还是通过从我的 Facebook 的应用程序中心删除应用程序手动删除)以下代码:
if ([[FBSession activeSession] isOpen]) {
//do something
}
else {
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
if(FB_ISSESSIONOPENWITHSTATE(status)) {
//do something
}
}
}];
}
在打开 FBSession.activeSession 的情况下进入 else block ,但是当执行“做某事”时,accessToken 无效,因此请求获得错误:HTTP 状态代码:400。当我尝试立即执行整个过程两次时,FBSession 请求许可(iOS6 的 UIAlertView 集成 facebook、Facebook 应用程序或 Safari 中的 Facebook 网站),其余运行顺利。
我担心的是为什么我必须将每件事都做两次才能正常工作,以及为什么 Facebook SDK 无法在第一时间检测到 activeSession 和 accessToken 无效。
提前谢谢大家!
最佳答案
您链接的问题很相关,尤其是 Facebook SDK 3.1 - Error validating access token这解释了设备上的 Facebook 帐户与服务器不同步的问题(即,如果您从 App Center 删除了该应用程序)。正如那里提到的,在 3.1.1 中,只有当它从服务器收到无效响应时,SDK 才会调用更新设备 token 。这是为了减少往返服务器的便利性而做出的权衡。
假设您的代码块是在 applicationDidFinishLaunching 或类似的东西上执行的,它将转到 else block ,因为应用程序从一个新 session 开始。当它调用 openActiveSessionWithReadPermissions 时,iOS 6 设备认为 token 有效并会让状态进入打开状态,然后您的“做某事”就会被执行。只有这样,SDK 才会从服务器收到无效响应并使设备 token 无效。因此,下次调用该过程时,它会适本地提示用户再次授权。
这是故意的。现在,如果错误代码描述了无效 token ,您可以考虑在您的应用程序中自动重试。例如,请参阅 Scrumptious 示例 postOpenGraph 重试代码。在你的情况下,它可能看起来更接近于类似的东西(出于演示目的,我使用 requestForMe 作为“做某事”):
else {
[FBSessionopenActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
if(FB_ISSESSIONOPENWITHSTATE(status)) {
//do something
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if (!error){
NSLog(@"success on first try");
} else if ([[error userInfo][FBErrorParsedJSONResponseKey][@"body"][@"error"][@"code"] compare:@190] == NSOrderedSame) {
//requestForMe failed due to error validating access token (code 190), so retry login
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
if (!error){
//do something again, or consider recursive call with a max retry count.
NSLog(@"success on retry");
}
}];
}
}];
}
}];
}
关于objective-c - 在 Facebook iOS 3.1.1 SDK 中使用 FBSession openActiveSessionWithReadPermissions 处理无效的 accessToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12745235/
我正在为 ios 使用 facebook sdk 3.0.8。当我尝试使用 Facebook 登录时,它工作正常,但有时当我在注销后尝试登录时,应用程序崩溃了。 这里是异常消息 *** Asserti
我正在尝试按照使用 Facebook 登录的 Parse 教程进行操作。但是,示例代码与指南不符,所以那里的代码没有用。我完全按照指南操作,但在我登录后,它会将我定向到 Facebook 应用程序,我
我第一次尝试打开 facebook session 时遇到问题 - 我收到 facebook 错误 5(未授权)。事实上,我没有得到要求用户权限的弹出窗口。但是,如果我停止应用程序并再次运行它,一切正
在我的 swift 项目中,我正在使用桥接文件集成 facebook SDK。 if FBSession.activeSession().state == FBSessionState.Created
我通过 facebook 的 SDK 使用了 facebook 身份验证。如果 fbaccount 可用,则它工作正常,但在没有 fbaccount 的情况下,它会因以下错误而崩溃: FBSessio
我正经历着最艰难的时期来完成这项工作。我有一个 IOS 应用程序,我正在尝试集成到 Facebook SDK 3.1。用户可以选择登录 Facebook,如果他们这样做的话,我正在缓存 token 。
H,在我的应用程序中,用户可以使用 facebook 登录应用程序。我可以使用 fbsession 成功登录,但我无法从 fbsession 注销。一旦用户登录到应用程序,我就会手动注销fb sess
我有一个应用程序,用户可以在其中选择登录 FB。我的代码主要基于 FB 上的教程,在大多数情况下,应用程序和 FB 集成按预期工作。我遇到的问题是应用程序从启动到启动都不记得用户已选择将应用程序连接到
我正在尝试使用 iOS 上的 Facebook SDK 从用户那里获得发帖权限。 我在一个方法中调用下面的代码,如果应用程序没有发布到用户 facebook 墙上所需的发布权限,则会调用该方法。
我正在观察以下...... 我通过以下方式对用户进行身份验证(请注意,在完成 block 中我正在记录权限) NSArray *permissions = [[NSArray alloc] init
我正在使用 Facebook SDK 来获取应用程序中的用户组但我得到一个空访问 token 。我在viewDidLoad中的代码如下。 - (void)viewDidLoad { [supe
我最初使用 FBLoginView 在最新的 Facebook SDK (3.5) 中启动登录过程。但是,由于某种循环,这会使应用程序崩溃。然后我读到我应该尝试使用下面的代码登录作为测试: [FBSe
我正在使用 facebook sdk 3.5 开发一个用于在 ios 中发布 FB 墙的应用程序。我正在使用两个 View 。第一个是启动画面,第二个是 facebook 登录 View 。当我激活这
我正在更新一个应用程序以使用最新的 Facebook SDK,以便获得对 iOS6 原生 Facebook 支持的访问权。它目前使用相当旧的 Facebook SDK 版本。 该应用程序需要 Face
我正在使用 Facebook SDK 实现 OAuth 登录,但是 FBSession.openActiveSessionWithReadPermissions:allowLoginUI:comple
我发现了一个有趣的问题。 当我请求新的发布权限时,fb sdk 会显示带有“跳过”按钮的对话框。我是这样处理的 [[[appDelegate facebook] session] re
我刚刚使用适用于 iOS 的新 Facebook 3.0 SDK 更新了我的应用程序。在此之前,我使用的是利用 FBSessionDelegate 和 FBRequestDelegate 的 SDK。
我一直在尝试使用 Facebook 开发 iOS 应用程序,但我是新手。所以我一直在努力让 使用 Facebook 登录,遵循 Facebook 上的教程并尝试实现它。 但是我遇到过,找不到[FBSe
我正在尝试在我的 Swift 项目中使用 FBSession。但我不知道如何导入它。 我已将这些导入到我的桥接 header 中 #import #import 有什么想法吗? 我正在尝试将下面的
尝试在 Swift 中实现这个 Objective C 代码: // Whenever a person opens the app, check for a cached session
我是一名优秀的程序员,十分优秀!