Spring 社交 Facebook 上未填充位置

Location not populated on Spring Social Facebook

我正在尝试获取用户在 Spring 社交 Facebook 中的位置:

Facebook fb = ((Facebook) connection.getApi());
Page pg = fb.pageOperations().getPage(fb.userOperations().getUserProfile().getLocation().getId());

问题是 pg.getLocation() returns null.

我也试过

fb.fetchObject(fb.userOperations().getUserProfile().getLocation().getId(), org.springframework.social.facebook.api.Location.class)

但它只填充名称,不填充国家或其他字段。

按预期在 Graph API Explorer /v2.6/112286918797929?fields=id,name,location returns 上尝试:

{
  "id": "112286918797929",
  "name": "Sacele",
  "location": {
    "city": "Sacele",
    "country": "Romania",
    "latitude": 45.6167,
    "longitude": 25.6833
  }
}

这是 Spring 社交 Facebook 的问题吗?

我正在使用 Spring Social 1.1.4 和 Spring Social Facebook 2.0.3。

我也试过Spring Social for Facebook - get user location,但不幸的是,并非所有地方都遵循名称约定城市,国家,其中一些名称中仅包含城市,而不是国家也是。另外,如何获得地理坐标?

正如你所说,下面的命令

fb.fetchObject(fb.userOperations().getUserProfile().getLocation().getId(), org.springframework.social.facebook.api.Location.class)

给出来自参考的名称的响应。

有 2 个 public 方法:getId()getName()

getLocation()这样的一些方法取决于权限。如果任何用户允许您查看他的位置,那么您可以访问此方法。

From documentation:

getLocation

public Reference getLocation()

The user's location. Available only with "user_location" or "friends_location" permission.

Returns: a Reference to the user's location, if available

代码示例:

  Page profile=facebookTemplate.pageOperations().getPage(id);
  String name=profile.getName();
  String webside=profile.getWebsite();
  String logo="http://graph.facebook.com/" + id + "/picture";
  party=new FullPoliticalParty(name,color,logo,webside);
  String phone=profile.getPhone() == null ? "No disponible" : profile.getPhone();
  party.setPhone(phone);
  org.springframework.social.facebook.api.Location loc=profile.getLocation();
  if (loc != null) {
    location=new LocationMapa(loc.getCity(),loc.getCountry(),loc.getStreet(),loc.getZip());
  }
  party.setLocation(location);

资源Link:

  1. Location class
  2. Java 的代码示例 org.springframework.social.facebook.api.Page


更新 1:

我认为您需要通过 Graph API 获得用户权限。然后您可以访问您向特定用户请求的位置或其他信息。 Checking Current PermissionsHandling Missing Permissionsthis link 中给出。

对于用户权限:

/* make the API call */
new GraphRequest(
    AccessToken.getCurrentAccessToken(),
    "/{user-id}/permissions",
    null,
    HttpMethod.GET,
    new GraphRequest.Callback() {
        public void onCompleted(GraphResponse response) {
            /* handle the result */
        }
    }
).executeAsync();

用户权限,可以通过this tutorial

用户位置可以通过this tutorial.

获得相关权限后,您还可以获得访问位置、经纬度等信息。

我终于明白了。首先,它不适用于 PageOperations,但它适用于 GraphApi

密码是

UserProfile userProfile = fb.userOperations().getUserProfile();
Page pg = fb.fetchObject(userProfile.getLocation().getId(), Page.class, "location");

诀窍是指定第三个参数,它表示字段(您可以将多个字段指定为字符串)。现在该页面已填充,您可以获得 pg.getLocation().getCountry().

这样的国家/地区