RestFB:使用Facebook应用程序获取用户访问令牌

时间:2012-12-02 17:18:59

标签: java facebook restfb

这就是我所拥有的:

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,但这对我有什么好处,因为下一行我需要提供访问令牌作为字符串,我无法转换它。任何帮助?

5 个答案:

答案 0 :(得分:11)

首先,不要将app令牌与用户令牌(more info

混淆

要获得用户令牌,您必须

  1. 为用户提供一种方式对Facebook进行身份验证(more info)并接收“代码” - 每个登录请求唯一的加密字符串。
  2. 使用此代码获取用户令牌。
  3. 您可以通过以下方式获得具有纯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();
    

答案 1 :(得分: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();
    }

}

答案 2 :(得分:5)

请尝试以下代码:

AccessToken accessToken = new DefaultFacebookClient().obtainAppAccessToken(appid,appsecret);
String token=accessToken.getAccessToken();

答案 3 :(得分:1)

Per restfb.FacebookClient.AccessToken,您应该能够调用accessToken.getAccessToken() - 它应该返回您要查找的String。

答案 4 :(得分:0)

这将有效

AccessToken accessToken = new DefaultFacebookClient().obtainAppAccessToken("XXXX", "XXXX");
String token=accessToken.getAccessToken();
DefaultFacebookClient facebookClient = new DefaultFacebookClient(token);