繁体   English   中英

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

[英]RestFB: Using a facebook app to get the users Access Token

这就是我所拥有的:

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

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

要获得用户令牌,您必须这样做

  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();

除了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();
    }

}

请尝试以下代码:

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

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

这会奏效

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM