2014-06-10 16 views
0

我(使用图形API)搜索FB用户并获取其名称等,但是我试图提取它们的位置,但它总是无。 我尝试了各种不同的方式来提取,但其始终为零。iOS上的FB图形API:FBGraphUser中的FBGraphPlace始终为零

我不认为它的用户没有设置他们的位置的情况下,因为如果我搜索一些随机的名称,并取回数百个结果,然后我无法获得任何他们的位置。

这里有一个如何我试图获得该位置的一个例子:

NSString* graphRequest = [NSString stringWithFormat: @"search?q=%@&type=user", person]; 
FBRequest *fbRequest = [FBRequest requestForGraphPath: graphRequest]; 

[fbRequest startWithCompletionHandler: 
^(FBRequestConnection *connection, id result, NSError *theError) 
{ 
    if (theError) 
    { 
     // handle error 
    } 
    else 
    { 
     NSDictionary<FBGraphObject> *dict = (NSDictionary<FBGraphObject> *) result; 
     if (dict) 
     { 
      NSArray *data = [dict objectForKey:@"data"]; 
      if (data) 
      { 
       for (FBGraphObject<FBGraphUser> *searchResult in data) 
       { 
        // here searchResult has valid data for the id and name etc. 

        id<FBGraphPlace> fbPlace = [searchResult location]; 
        // but here fbPlace is nil 

        id<FBGraphLocation> fbLocation = [fbPlace location]; 
        NSString *userCity = [fbLocation city]; 
        NSString *userCountry = [fbLocation country]; 
        NSString *name = fbPlace.name; 

       } 
     } 
    } 
}]; 

我已经试过以上的变种提取位置,例如:

FBGraphObject<FBGraphPlace> *place = (FBGraphObject<FBGraphPlace>*)searchResult.location; 

但是,没有不管我做什么,它总是零。

回答

1

问题是该字段位置未包含在公共配置文件中。字段位置受到“user_location”权限的保护。但是,即使您需要具有此权限的访问令牌,它也只会允许查看应用用户的位置。 你可以尝试一下在Facebook图形API浏览器:https://developers.facebook.com/tools/explorer/

  1. 点击“获取访问令牌”,并确认您拥有“USER_LOCATION”权限
  2. 搜索你的名字和姓氏(用空格分开它们或%20),并要求位置字段(类似的东西在用户列表中只有你的用户的位置(如果你已经设定,这个search?type=user&fields=id,name,picture,location&q=John%20Doe
  3. 确认)

但是一个有选项也可以看到应用用户朋友的位置。在这种情况下,您必须使用v1.0 API(将在April 30th, 2015之后停用)并获取带有permission_location权限的访问令牌。

您可以在Graph API Explorer也证实了这一点:在版本切换上右上方按钮

  1. 点击并选择V1.0
  2. 点击“获取访问令牌”选项卡友的数据权限,并确认您有“friends_location”权限
  3. 搜索已设置其位置的您的朋友,并且您会注意到您可以在结果中看到它。
  4. 切换的API v2.0和再次尝试搜索 - 地点是不是在结果了

所以得出的结论是 - 位置只能访问你的应用程序(访问令牌)和他/用户她的朋友(如果您使用v1.0 API,在不到一年的时间内将停用)。