2014-06-10 22 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,在不到一年的時間內將停用)。