检索Android Facebook商业令牌



我正试图从GraphUser中检索已从ME请求中获得的token_for_business。它每次都是空的。我能够成功地从ME请求中检索到许多其他信息。例如:

public String getEmail() {
    if (Session.getActiveSession().getPermissions().contains("email")) {
        return (String) mUser.getProperty("email");
    } else {
        return "";
    }
}

我已经多次验证了Facebook Dashboard是为使用商业代币而设置的。我知道我可以尝试直接查询Business Manager API,但是我已经链接了几个API调用,并且更愿意使用我应该已经拥有的数据。

public String getTokenForBusiness() {
    return (String) mUser.getProperty("token_for_business");
}

文档显示,如果用户已登录应用程序,则该属性存在。当然,ME请求是在会话状态被识别为打开之后才发出的,所以据我所知,用户已经登录

有没有我错过的许可?使用这处房产有其他规定吗?

更新:我尝试使用业务映射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资源管理器后,我想出了这个解决方案。

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/neneneba API并破坏此解决方案。

最新更新