iOS Facebook SDK : An active access token must be used to query information about the current user

标签 ios facebook facebook-ios-sdk

我已经遵循了许多示例并查看了有关此访问 token 错误的许多问题,但我似乎无法找出我为什么会得到它或如何修复它。

我像他们在 3.1 sdk 示例中那样初始化 Facebook:

 NSArray* permissions = [[NSArray alloc] initWithObjects:@"publish_stream", @"publish_actions", nil];
 self.fb = [[FBSession alloc] initWithPermissions:permissions];
 [self.fb openWithCompletionHandler:^(FBSession *session,
                                         FBSessionState status,
                                         NSError *error)
     {
         [self sessionStateChanged:session :status :error];
     }];

这工作正常,用户被要求在 Safari 中接受应用程序权限,然后返回到应用程序。当用户返回应用程序时,我的 FBSessionState 是 FBSessionStateOpen。​​

当我尝试这样做时:

[FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error)
                 {

                     [self showAlert:@"logged in?" result:result error:error];
                 }];

或者这个:

NSMutableDictionary* fbPost = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"post from iOS", @"message", nil];
[FBRequestConnection startWithGraphPath:@"me/feed" parameters:fbPost HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
                                        {

                                            [self showAlert:@"message posted?" result:result error:error];
                                        }];

但我得到:

FBSDKLog: FBURLConnection <#1126>:

  Duration: 936 msec

Response Size: 0 kB

  MIME type: text/javascript

  Response:

{"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500}}

我已经从我的 FBSession 中获取访问 token 并将其放入 Facebook 的访问 token 调试器中,它显示我有一个好的 token :

App ID: <hidden>
Metadata: {"sso":"iphone-safari"}
User ID: <hidden>
Issued:  1351525817 (about an hour ago)
Expires: 1356709817 (in about 2 months)
Valid:  True
Origin: Mobile Web Faceweb
Scopes: create_note photo_upload publish_actions publish_stream share_item status_update video_upload

我一定是在设置中遗漏了一些小细节之类的。

提前谢谢大家!

最佳答案

根据文档,https://developers.facebook.com/docs/reference/ios/3.1/class/FBRequestConnection

“请求使用由 [FBSession activeSession] 表示的事件 session 。”

这适用于处理请求的静态方法。所以你要做的是确保你设置了事件 session 。执行以下操作:

[FBSession setActiveSession:self.fb];

就在调用第一个 FBRequestConnection start* 方法之前。

关于iOS Facebook SDK : An active access token must be used to query information about the current user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13127282/

相关文章:

ios - Facebook 登录和 FBSDKLoginKit Pod 之间的差异以及使用哪一个?

ios - CPTBarPlot (Core-Plot) 上的定位标签

iOS NSURLConnection _resourceLoadLoop 崩溃

ios - 共享按钮作为 UITabBarController 上的选项卡栏项目,没有关联的 Controller

android - Facebook 受众 SDK

node.js - facebook-pasport 的回调可以动态构造吗?

ios - iOS FB请求对话框无法正常工作?

ios - Xcode5无法安装SDK6

android - 应用程序被 E/com.facebook.internal.AttributionIdentifiers 卡住

ios - 如何为 Facebook 图形 API 实现注销功能