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