检索 Android Facebook 企业令牌
Retrieve Android Facebook Token for Business
我正在尝试从我已经从 ME 请求中获得的 GraphUser 中检索 token_for_business。每次都返回 null。我能够从 ME 请求中成功检索到许多其他信息。例如:
public String getEmail() {
if (Session.getActiveSession().getPermissions().contains("email")) {
return (String) mUser.getProperty("email");
} else {
return "";
}
}
我已多次验证 Facebook 控制面板已设置为使用商业令牌。我知道我可以尝试直接查询业务管理器 API,但是我已经链接了几个 API 调用并且更愿意使用我应该已经拥有的数据。
public String getTokenForBusiness() {
return (String) mUser.getProperty("token_for_business");
}
documentation 表示此 属性 存在,前提是用户已登录到该应用程序。当然,ME请求是在Session状态被识别为打开后才发起的,所以据我理解,用户已经登录了。
我是否缺少权限?使用这个属性还有其他规定吗?
更新:我尝试使用业务映射 API。它可以将应用程序识别为我们业务的有效部分,但它不包含我需要的 token_for_business。所以这条路行不通。我还尝试在整个登录过程完成后访问令牌,以确保在完成某些操作之前我没有调用它,但是我仍然得到令牌的空值。我还尝试使用此请求:
/* make the API call */
new Request(
session,
"/{user-id}",
null,
HttpMethod.GET,
new Request.Callback() {
public void onCompleted(Response response) {
Log.i("TFB", response.toString());
Log.i("TFB", (String) response.getGraphObject().getProperty("token_for_business") + "");
}
}
).executeAsync();
当然,我用实际用户 ID 替换了 {user-id}。此响应包含我期望的信息,不包括 token_for_business.
所以这不是一个理想的解决方案,但在试验 Graph API Explorer 之后,我想到了这个。
Bundle bundle = new Bundle();
bundle.putString("fields", "token_for_business");
new Request(Session.getActiveSession(), "/me/", bundle, HttpMethod.GET, new Request.Callback() {
@Override
public void onCompleted(final Response response) {
if (response != null) {
GraphUser user = response.getGraphObjectAs(GraphUser.class);
Log.i("TFB", user.getProperty("token_for_business"));
}
}
}).executeAsync();
此解决方案的问题是您需要将 GraphUser 的所有方面添加到 "fields" 参数。例如,如果您需要知道用户的名字和性别,则相应的包将包含:
bundle.putString("fields", "token_for_business,first_name,gender");
所以对于不介意额外通话的人来说,最好将 token_for_business 与 ME 请求分开,以防万一 Facebook 更新他们的 SDK/API 并破坏它将来某个时候解决。
我正在尝试从我已经从 ME 请求中获得的 GraphUser 中检索 token_for_business。每次都返回 null。我能够从 ME 请求中成功检索到许多其他信息。例如:
public String getEmail() {
if (Session.getActiveSession().getPermissions().contains("email")) {
return (String) mUser.getProperty("email");
} else {
return "";
}
}
我已多次验证 Facebook 控制面板已设置为使用商业令牌。我知道我可以尝试直接查询业务管理器 API,但是我已经链接了几个 API 调用并且更愿意使用我应该已经拥有的数据。
public String getTokenForBusiness() {
return (String) mUser.getProperty("token_for_business");
}
documentation 表示此 属性 存在,前提是用户已登录到该应用程序。当然,ME请求是在Session状态被识别为打开后才发起的,所以据我理解,用户已经登录了。
我是否缺少权限?使用这个属性还有其他规定吗?
更新:我尝试使用业务映射 API。它可以将应用程序识别为我们业务的有效部分,但它不包含我需要的 token_for_business。所以这条路行不通。我还尝试在整个登录过程完成后访问令牌,以确保在完成某些操作之前我没有调用它,但是我仍然得到令牌的空值。我还尝试使用此请求:
/* make the API call */
new Request(
session,
"/{user-id}",
null,
HttpMethod.GET,
new Request.Callback() {
public void onCompleted(Response response) {
Log.i("TFB", response.toString());
Log.i("TFB", (String) response.getGraphObject().getProperty("token_for_business") + "");
}
}
).executeAsync();
当然,我用实际用户 ID 替换了 {user-id}。此响应包含我期望的信息,不包括 token_for_business.
所以这不是一个理想的解决方案,但在试验 Graph API Explorer 之后,我想到了这个。
Bundle bundle = new Bundle();
bundle.putString("fields", "token_for_business");
new Request(Session.getActiveSession(), "/me/", bundle, HttpMethod.GET, new Request.Callback() {
@Override
public void onCompleted(final Response response) {
if (response != null) {
GraphUser user = response.getGraphObjectAs(GraphUser.class);
Log.i("TFB", user.getProperty("token_for_business"));
}
}
}).executeAsync();
此解决方案的问题是您需要将 GraphUser 的所有方面添加到 "fields" 参数。例如,如果您需要知道用户的名字和性别,则相应的包将包含:
bundle.putString("fields", "token_for_business,first_name,gender");
所以对于不介意额外通话的人来说,最好将 token_for_business 与 ME 请求分开,以防万一 Facebook 更新他们的 SDK/API 并破坏它将来某个时候解决。