почему Spring social facebook -2.0.3 использует устаревшую версию Graph API 2.5, которая устарела

Мы используем последнюю версию jar spring-social-facebook-2.0.3 в производственной среде.

В апреле 2018 года Graph API v2.5 будет закрыт. Но последняя версия jar spring-social-facebook-2.0.3 по-прежнему использует этот устаревший API графа внутри.

Кто-нибудь что-нибудь знает,
команда Spring собирается выпустить новую версию spring-social-facebook до следующего месяца (например, до апреля 2018 года)?


person Abhishek Singh    schedule 19.03.2018    source источник
comment
Не должно иметь большого значения, даже если это не так, потому что вызовы API, указывающие устаревшую версию API, автоматически преобразуются в использование самой низкой версии, доступной в настоящее время.   -  person CBroe    schedule 19.03.2018
comment
@CBroe: не могли бы вы уточнить это подробнее. На самом деле то, что я вижу в spring-social jar, использует жестко запрограммированный график версии 2.5. Итак, как он будет автоматически указывать на самую низкую доступную версию. Мы на самом деле беспокоимся о том, что приложение для производства будет работать должным образом?   -  person Abhishek Singh    schedule 22.03.2018
comment
Facebook позаботится об этом со своей стороны — ваше приложение делает запрос, используя версию API, которая больше недоступна, поэтому они автоматически и молча обрабатывают его, как если бы он был сделан с использованием самой низкой доступной версии.   -  person CBroe    schedule 22.03.2018
comment
Спасибо @CBroe. ты кажешься мне очень точным. Но моя компания не будет полагаться на ваши слова, пока не увидит доказательств от Facebook. Речь идет об их производственном приложении, которым пользуются полмиллиона пользователей. Итак, можете ли вы поделиться каким-либо письменным документом, в котором это показано? если возможно. Или любой другой источник.   -  person Abhishek Singh    schedule 26.03.2018
comment
"Это вопрос их производственного приложения, которым пользуются полмиллиона пользователей" – это хорошо для них. Хотя в этом случае я ожидал, что они должным образом подготовятся к этому сами для начала ... и не отдадут это на аутсорсинг в последнюю минуту.   -  person CBroe    schedule 26.03.2018


Ответы (3)


Решение для тех, кто хочет изменить используемую версию API в выпуске 2.0.3, а инструмент обновления API Facebook говорит, что это не влияет на их приложения:

public class FacebookCustomApiVersionConnectionFactory extends OAuth2ConnectionFactory<Facebook> {

  public FacebookCustomApiVersionConnectionFactory(String apiVersion, String appId, String appSecret) {
    super("facebook", new FacebookCustomApiVersionServiceProvider(apiVersion, appId, appSecret, null), new FacebookAdapter());
  }
}


/**
 * Facebook ServiceProvider implementation that allows to change Facebook API version.
 */
public class FacebookCustomApiVersionServiceProvider extends AbstractOAuth2ServiceProvider<Facebook> {

  private final String appNamespace;

  private final String apiVersion;

  /**
   * Creates a FacebookServiceProvider for the given API version, application ID, secret, and namespace.
   *
   * @param apiVersion   Facebook API version
   * @param appId        The application's App ID as assigned by Facebook
   * @param appSecret    The application's App Secret as assigned by Facebook
   * @param appNamespace The application's App Namespace as configured with Facebook. Enables use of Open Graph operations.
   */
  public FacebookCustomApiVersionServiceProvider(String apiVersion, String appId, String appSecret, String appNamespace) {
    super(getOAuth2Template(apiVersion, "https://graph.facebook.com/v" + apiVersion + "/", appId, appSecret));
    this.apiVersion = apiVersion;
    this.appNamespace = appNamespace;
  }

  private static OAuth2Template getOAuth2Template(String apiVersion, String graphApiUrl, String appId, String appSecret) {
    OAuth2Template oAuth2Template = new OAuth2Template(appId, appSecret,
            "https://www.facebook.com/v" + apiVersion + "/dialog/oauth",
            graphApiUrl + "oauth/access_token");
    oAuth2Template.setUseParametersForClientAuthentication(true);
    return oAuth2Template;
  }

  public Facebook getApi(String accessToken) {
    FacebookTemplate facebook = new FacebookTemplate(accessToken, appNamespace);
    facebook.setApiVersion(apiVersion);
    return facebook;
  }
}

Социальная конфигурация Spring

@Configuration
@EnableSocial
public class SocialConfiguration implements SocialConfigurer {

  @Override
  public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) {
    cfConfig.addConnectionFactory(new FacebookCustomApiVersionConnectionFactory("2.7", "appId","appSecret");

  }
...
}
person Marek Raki    schedule 29.03.2018

Мы можем просто изменить версию API следующим образом

FacebookTemplate facebookTemplate=new FacebookTemplate(accessToken);
facebookTemplate.setApiVersion("3.2");
System.out.println("graph url"+facebookTemplate.getBaseGraphApiUrl());
person ramesh bommakanti    schedule 22.07.2019

Этот проект устарел. Они объявили об окончании срока службы в 2018 году, чтобы вступить в силу в 2019 году: https://spring.io/blog/2018/07/03/spring-social-end-of-life-announcement

Вместо этого они рекомендуют просто использовать Spring Security.

person Mehdi    schedule 18.02.2020