11

这就是我所拥有的:

static AccessToken accessToken = new DefaultFacebookClient().obtainExtendedAccessToken("<my app id>", "<my app secret>");
static FacebookClient client = new DefaultFacebookClient();
public static void main(String args[]) {
    System.out.print("Enter Your Status: ");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    String status= null;

      try {
         userName = br.readLine();
         System.out.println("..........");
      } catch (IOException ioe) {
         System.out.println("!");
         System.exit(1);
      }

    FacebookType publishMessageResponse =
                client.publish("me/feed", FacebookType.class,
                Parameter.with("message", status));

因此,第一行获取令牌并将其存储为 AccessToken 类型,但这对我有什么好处,因为下一行我需要将访问令牌作为字符串提供,而我无法转换它。有什么帮助吗?

4

5 回答 5

11

首先不要将应用令牌与用户令牌混淆(更多信息

要获取用户令牌,您必须

  1. 为用户提供一种针对 Facebook 进行身份验证的方式(更多信息)并接收“代码”——每个登录请求唯一的加密字符串。
  2. 使用此代码获取用户令牌。

您可以通过以下方式使用纯 RestFB 获取用户令牌:

private FacebookClient.AccessToken getFacebookUserToken(String code, String redirectUrl) throws IOException {
    String appId = "YOUR_APP_ID";
    String secretKey = "YOUR_SECRET_KEY";

    WebRequestor wr = new DefaultWebRequestor();
    WebRequestor.Response accessTokenResponse = wr.executeGet(
            "https://graph.facebook.com/oauth/access_token?client_id=" + appId + "&redirect_uri=" + redirectUrl
            + "&client_secret=" + secretKey + "&code=" + code);

    return DefaultFacebookClient.AccessToken.fromQueryString(accessTokenResponse.getBody());
}

调用很简单:

FacebookClient.AccessToken token = getFacebookUserToken(code, redirectUrl);
String accessToken = token.getAccessToken();
Date expires = token.getExpires();
于 2013-08-09T02:21:29.397 回答
9

除了 Jack 所说的 AccessToken.getAccessToken() 返回 accessToken 的字符串值之外,您还可以DefaultFacebookClient通过如下扩展来避免实例化两次DefaultFacebookClient

import com.restfb.DefaultFacebookClient;

public class LoggedInFacebookClient extends DefaultFacebookClient {

    public LoggedInFacebookClient(String appId, String appSecret) {
        AccessToken accessToken = this.obtainAppAccessToken(appId, appSecret);
        this.accessToken = accessToken.getAccessToken();
    }

}
于 2013-01-21T07:21:22.383 回答
5

试试下面的代码:

AccessToken accessToken = new DefaultFacebookClient().obtainAppAccessToken(appid,appsecret);
String token=accessToken.getAccessToken();
于 2013-06-17T07:33:26.147 回答
1

根据restfb.FacebookClient.AccessToken,您应该能够调用 accessToken.getAccessToken() - 这应该返回您正在寻找的字符串。

于 2013-01-09T15:14:24.397 回答
0

这将起作用

AccessToken accessToken = new DefaultFacebookClient().obtainAppAccessToken("XXXX", "XXXX");
String token=accessToken.getAccessToken();
DefaultFacebookClient facebookClient = new DefaultFacebookClient(token);
于 2016-01-28T07:15:33.167 回答