RestFB: использование приложения facebook для доступа к токенам пользователей

Это то, что у меня есть:

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, но что хорошо делает для меня, потому что следующая строка мне нужно предоставить токен доступа в виде строки, и я не могу ее преобразовать. Любая помощь?

Ответ 1

В дополнение к тому, что Джек сказал о 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

Прежде всего не путайте токен приложения с токеном пользователя (подробнее)

Чтобы получить токен пользователя, вы должны

  • Предоставьте пользователю возможность аутентифицироваться в Facebook (подробнее) и получить "код" - зашифрованную строку, уникальную для каждого запроса на вход.
  • Получить токен пользователя с помощью этого кода.

Вы можете получить токен пользователя с чистым 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();

Ответ 3

Попробуйте использовать следующий код:

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

Ответ 4

Per restfb.FacebookClient.AccessToken, вы должны иметь возможность вызвать accessToken.getAccessToken(), который должен вернуть строку, которую вы ищете для.

Ответ 5

Это будет работать

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