2016-06-22 3 views
2

Недавно я получил уведомление Facebook Разработчик:Обновление Facebook API версии

Graph API v2.1 Upgrade Примечание

foobarapplication предпринимает недавние API вызовы Graph API v2.0, который достигнет конца 2-летнего окна устаревания в понедельник, 8 августа 2016 года. Миграция всех вызовов на v2.1 или выше для того, чтобы избежать возможных нарушений.

Мы рекомендуем использовать наш новый инструмент обновления API Graph API, чтобы узнать, какие из ваших вызовов повлияли на это изменение, а также на любые замены в новых версиях. Вы также можете использовать наш журнал изменений, чтобы просмотреть полный список изменений .

Год назад я обновил Facebook для данного PHP-приложения, извлекая SDK PHP и меняя исходные коды. Обзор регистрации был успешным, и с тех пор серьезных проблем не было. Тем не менее, приложение должно скоро перейти с Facebook API 2.0. У меня есть идея о том, как этого достичь, но я не уверен, насколько я прав. Рассмотрим следующие функции:

FacebookRedirectLoginHelper класс:

/** 
    * Stores CSRF state and returns a URL to which the user should be sent to 
    * in order to continue the login process with Facebook. The 
    * provided redirectUrl should invoke the handleRedirect method. 
    * 
    * @param array $scope List of permissions to request during login 
    * @param string $version Optional Graph API version if not default (v2.0) 
    * @param boolean $displayAsPopup Indicate if the page will be displayed as a popup 
    * 
    * @return string 
    */ 
    public function getLoginUrl($scope = array(), $version = null, $displayAsPopup = false) 
    { 
    $version = ($version ?: FacebookRequest::GRAPH_API_VERSION); 
    $this->state = $this->random(16); 
    $this->storeState($this->state); 
    $params = array(
     'client_id' => $this->appId, 
     'redirect_uri' => $this->redirectUrl, 
     'state' => $this->state, 
     'sdk' => 'php-sdk-' . FacebookRequest::VERSION, 
     'scope' => implode(',', $scope) 
    ); 

    if ($displayAsPopup) 
    { 
     $params['display'] = 'popup'; 
    } 

    return 'https://www.facebook.com/' . $version . '/dialog/oauth?' . 
     http_build_query($params, null, '&'); 
    } 

    /** 
    * Returns a URL to which the user should be sent to re-request permissions. 
    * 
    * @param array $scope List of permissions to re-request 
    * @param string $version Optional Graph API version if not default (v2.0) 
    * 
    * @return string 
    */ 
    public function getReRequestUrl($scope = array(), $version = null) 
    { 
    $version = ($version ?: FacebookRequest::GRAPH_API_VERSION); 
    $this->state = $this->random(16); 
    $this->storeState($this->state); 
    $params = array(
     'client_id' => $this->appId, 
     'redirect_uri' => $this->redirectUrl, 
     'state' => $this->state, 
     'sdk' => 'php-sdk-' . FacebookRequest::VERSION, 
     'auth_type' => 'rerequest', 
     'scope' => implode(',', $scope) 
    ); 
    return 'https://www.facebook.com/' . $version . '/dialog/oauth?' . 
     http_build_query($params, null, '&'); 
    } 

FacebookRequest класс:

/** 
    * FacebookRequest - Returns a new request using the given session. optional 
    * parameters hash will be sent with the request. This object is 
    * immutable. 
    * 
    * @param FacebookSession $session 
    * @param string $method 
    * @param string $path 
    * @param array|null $parameters 
    * @param string|null $version 
    * @param string|null $etag 
    */ 
    public function __construct(
    FacebookSession $session, $method, $path, $parameters = null, $version = null, $etag = null 
) 
    { 
    $this->session = $session; 
    $this->method = $method; 
    $this->path = $path; 
    if ($version) { 
     $this->version = $version; 
    } else { 
     $this->version = static::GRAPH_API_VERSION; 
    } 
    $this->etag = $etag; 

    $params = ($parameters ?: array()); 
    if ($session 
     && !isset($params["access_token"])) { 
     $params["access_token"] = $session->getToken(); 
    } 
    if (FacebookSession::useAppSecretProof() 
     && !isset($params["appsecret_proof"])) { 
     $params["appsecret_proof"] = $this->getAppSecretProof(
     $params["access_token"] 
    ); 
    } 
    $this->params = $params; 
    } 

FacebookCurlHttpClient класс:

/** 
    * Detect versions of Curl which report incorrect header lengths when 
    * using Proxies. 
    * 
    * @return boolean 
    */ 
    private static function needsCurlProxyFix() 
    { 
    $ver = self::$facebookCurl->version(); 
    $version = $ver['version_number']; 

    return $version < self::CURL_PROXY_QUIRK_VER; 
    } 

Моя идея заключается в следующем:

  • getLoginUrl вызывается из приложения; версия 2.6. должны быть указаны теперь
  • Я действительно не использовать getReRequestUrl, поэтому я не буду вносить изменения в код для его
  • FacebookRequest будет экземпляр с $version из 2,6
  • needsCurlProxyFix останется, как это

В принципе, я буду использовать PHP lib, выпущенный в 2014 году, но с указанием $ версии при вызовах. Является ли мой подход выполнимым, или я должен использовать новую клиентскую библиотеку?

+0

Я столкнулся с такой же проблемой, что и у вас есть какой-либо soution, с помощью которого мы можем обновить графику facebook с 2,1 до 2,6 php. Спасибо – usama

+0

@usama, что оказалось для меня проблемой, поскольку мое приложение уже совместимо и все тесты были успешными. Ознакомьтесь с инструментом Facebook API Upgrade Tool: https: //developers.facebook.com/tools/api_versioning/241490879195373 Там вы увидите, что нужно изменить –

+0

Я попробовал это показывает мне это сообщение Ваше приложение не вызвало достаточно вызовов API-интерфейса Graph, чтобы показывать какую-либо информацию, или нет изменений для методы, выбранные между версиями v2.3 и v2.7. Не могли бы вы рассказать мне, что я делаю неправильно здесь? – usama

ответ

1

Как выяснилось, моя версия была актуальной, и мне не нужно было никаких изменений для обновления Facebook до версии 2.1. кроме изменения используемого имени версии.

Смежные вопросы