Ios 错误:必须使用活动访问令牌来查询有关当前用户的信息

Ios 错误:必须使用活动访问令牌来查询有关当前用户的信息,ios,objective-c,facebook,facebook-graph-api,Ios,Objective C,Facebook,Facebook Graph Api,我面临着上述错误。我知道这已经讨论过了,但是他们使用FBSession进行了修复。在最新的SDK中,我没有看到FBSession。请帮帮我,我一整天都在忙这个 下发问题: 我有3个页面(登录页面,用户名页面,查找朋友页面)。在登录页面中,我只是通过facebook进行身份验证,并从graphAPI获取用户信息,它工作正常。然后来到这里的页面用户名正常注册过程中从用户。然后我来到这里的“查找好友”页面,我面临的问题是,如果我使用流(登录->用户名->查找好友页面),我可以使用graphAPI列出f

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

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

下面是我的代码, 查找朋友页面:

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

明白了

这肯定会对某人有所帮助,实际上我在这里犯了错误,
[[FBSDKGraphRequest alloc]initWithGraphPath:url参数:@{@“fields”:@“id,picture”}]
此方法从未启用过访问令牌。但奇怪的是,整个应用中都没有启用访问令牌。在杀死应用后,当我移动到下一页时,它将为空。因此,我只将令牌字符串保存在NSUserDefault中,如

 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");
}        
然后无论我在哪里调用graphAPI,我都会使用这个方法,比如tokenstring

NSString *access_token=[FBSDKAccessToken currentAccessToken].tokenString;
[NSUSER setObject:access_token forKey:@"fb_token"];
 [NSUSER synchronize];
很简单,但要花很长时间才能找到。很高兴!

明白了

这肯定会对某人有所帮助,实际上我在这里犯了错误,
[[FBSDKGraphRequest alloc]initWithGraphPath:url参数:@{@“fields”:@“id,picture”}]
此方法从未启用过访问令牌。但奇怪的是,整个应用中都没有启用访问令牌。在杀死应用后,当我移动到下一页时,它将为空。因此,我只将令牌字符串保存在NSUserDefault中,如

 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");
}        
然后无论我在哪里调用graphAPI,我都会使用这个方法,比如tokenstring

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

很简单,但查找时间太长。很高兴!

这将在swift 2.0中帮助您

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

这将在swift 2.0中帮助您

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

对我来说工作很好斯威夫特3 将此代码放在收到好友列表或fb用户数据的位置:have look

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

对我来说工作很好斯威夫特3 将此代码放在收到好友列表或fb用户数据的位置:have look

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

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

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")

只需将access_令牌放在请求url中,其他参数放在param‘parameters:’

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

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")
只需将access_令牌放在请求url中,其他参数放在param'参数:'