iOS Facebook SDK:必须使用活动访问令牌来查询有关当前用户的信息

G__*_*ROW 13 facebook ios facebook-ios-sdk

我已经关注了许多示例并查看了有关此访问令牌错误的许多问题,但我似乎无法找出我为什么会得到它或如何解决它.

我像他们在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];
     }];
Run Code Online (Sandbox Code Playgroud)

这很好用,并要求用户在Safari中接受应用程序权限,然后返回到应用程序.当用户返回到应用程序时,我的FBSessionState是FBSessionStateOpen.

当我尝试这个:

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

                     [self showAlert:@"logged in?" result:result error:error];
                 }];
Run Code Online (Sandbox Code Playgroud)

或这个:

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];
                                        }];
Run Code Online (Sandbox Code Playgroud)

但我得到:

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}}
Run Code Online (Sandbox Code Playgroud)

我从我的FBSession获取了访问令牌并将其放入Facebook的访问令牌调试器中,它显示我有一个很好的令牌:

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
Run Code Online (Sandbox Code Playgroud)

我必须在设置或其他东西中遗漏一些小细节.

谢谢大家!

C A*_*thy 29

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

"请求使用[FBSession activeSession]表示的活动会话."

这适用于处理请求的静态方法.所以你要做的是确保你设置活动会话.请执行下列操作:

[FBSession setActiveSession:self.fb];
Run Code Online (Sandbox Code Playgroud)

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


hta*_*oya 11

好了一段时间后,注意到FBSession.activeSession不是nil,我在发送请求之前缺少的是:

    if (!FBSession.activeSession.isOpen) {
        [FBSession openActiveSessionWithAllowLoginUI: YES];
    }
Run Code Online (Sandbox Code Playgroud)