【问题标题】:Error:An active access token must be used to query information about the current user错误:必须使用活动访问令牌来查询有关当前用户的信息
【发布时间】:2018-05-08 18:50:40
【问题描述】:
 {com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode=2500, com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey={
    body =     {
        error =         {
            code = 2500;
            "fbtrace_id" = DiBO16GER0C;
            message = "An active access token must be used to query information about the current user.";
            type = OAuthException;
        };
    };
    code = 400;
}, com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey=400, com.facebook.sdk:FBSDKErrorDeveloperMessageKey=An active access token must be used to query information about the current user., com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey=0}

我正面临上述错误。我知道这已经讨论过了,但他们使用 FBSession 进行了修复。在最新的 SDK 中,我没有看到 FBSession。请帮助我,我整天都在坚持这个。

出现的问题: 我有 3 个页面(登录页面、用户名页面、查找朋友页面)。在登录页面中,我只是通过 facebook 进行身份验证并从 graphAPI 获取用户信息,它工作正常。然后从用户来到页面用户名这里正常注册过程。然后我来到这里的查找朋友页面,我面临的问题是,如果我有流程(登录 -> 用户名 -> 查找朋友页面),我可以使用 graphAPI BUT 列出 facebook 朋友当我杀死应用程序并直接打开此页面时无法获取好友列表,它显示上述错误。我不知道如何从这件事中恢复过来。请帮助之前有这种感觉的人。

我的代码如下, 寻找朋友页面:

 if ([FBSDKAccessToken currentAccessToken]) 
{
    [[[FBSDKGraphRequest alloc] initWithGraphPath:url parameters:@{ @"fields": @"id,picture"}]
                 startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
                 {
                       NSLog(@"result === %@",result);
                       if (!error)
                       {}
                       else
                       {}
    }];
  }
else
{
  NSLog(@"There is no current access token");
}        

注意: 当我终止应用程序并再次返回用户名页面时,当前访问令牌为空。

【问题讨论】:

    标签: ios objective-c facebook facebook-graph-api


    【解决方案1】:

    知道了!

    这肯定会对某人有所帮助,实际上我在这个地方犯了错误,[[[FBSDKGraphRequest alloc] initWithGraphPath:url parameters:@{ @"fields": @"id,picture"}] 这种方法永远没有访问令牌。但奇怪的是整个应用程序中都没有启用访问令牌。当我杀死应用程序后转到下一页时,它将为空。所以我只是将令牌字符串保存在 NSUserDefaults 中,例如

    NSString *access_token=[FBSDKAccessToken currentAccessToken].tokenString;
    [NSUSER setObject:access_token forKey:@"fb_token"];
     [NSUSER synchronize];
    

    然后无论我在哪里调用graphAPI,我都会使用这个方法和tokenstring,比如,

    [[[FBSDKGraphRequest alloc] initWithGraphPath:url parameters:@{ @"fields": @"id,picture"} tokenString:[NSUSER objectForKey:@"fb_token"] version:nil HTTPMethod:@"GET"]
                 startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
                 {
    }];
    

    很简单,但是找起来时间太长了。很高兴!

    【讨论】:

      【解决方案2】:

      这将在 swift 2.0 中帮助您

      func application(application: UIApplication,
                       openURL url: NSURL,
                               sourceApplication: String?,
                               annotation: AnyObject) -> Bool {
          return FBSDKApplicationDelegate.sharedInstance().application(
              application,
              openURL: url,
              sourceApplication: sourceApplication,
              annotation: annotation)
      }
      

      【讨论】:

        【解决方案3】:

        对我来说工作正常 Swift 3 将此代码放在收到朋友列表或 fb 用户数据的位置:看看

        let token = FBSDKAccessToken.current().tokenString  
        UserDefaults.standard.setValue(token, forKey: "fb_token")
        UserDefaults.standard.synchronize()
        
        
        let params = ["fields": "id, first_name, last_name, name, picture"]
        
        
        let graphRequest = FBSDKGraphRequest(graphPath: "/me/friends", parameters: params, tokenString: UserDefaults.standard.value(forKey: "fb_token") as! String, version: nil, httpMethod: "GET")
        

        【讨论】:

          【解决方案4】:

          我认为是 Facebook 的 bug,你需要这样调用图 api:

              NSString *graphPath = [NSString stringWithFormat:@"%@/videos?access_token=%@", @"me", [FBSDKAccessToken currentAccessToken].tokenString];
              FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:graphPath parameters:dict tokenString:alreadyAuthToken version:@"v2.12" HTTPMethod:@"POST"];
          

          只要把access_token放在request url中,其他参数放在param 'parameters:'中

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-04-26
            • 1970-01-01
            • 1970-01-01
            • 2017-04-23
            • 2016-07-07
            相关资源
            最近更新 更多