Facebook Graph API v2.3 の互換性の問題
Graph API v2.2 のサポート終了日が近づく中、開発者は次のことを行っています。 v2.3 にアップグレードすることをお勧めします。ただし、切り替え中に予期せぬ問題が多く発生しました。
API レスポンスがありません
アルバム データの取得に使用される次のようなリクエストは、結果を返さなくなりました。 :
https://graph.facebook.com/v2.3/{$user_id}?date_format=U&fields=albums.order(reverse_chronological).limit(100).offset(0){id,count,name,created_time}
ユーザー プロファイルの損失情報
ユーザー エンドポイントへの呼び出しに「誕生日」フィールドが含まれなくなりました:
https://graph.facebook.com/v2.3/{$user_id}
解決策
根本的な原因これらの問題は、PHP バージョン 5.3 と互換性のある Facebook SDK バージョン 3.2.2 にあります。 v2.3 の OAuth アクセス トークン形式の大幅な変更により、SDK は以前のバージョンで使用されていた URL エンコード形式ではなく、JSON として応答を解析する必要があります。
SDK コード更新
この問題に対処するには、SDK の getAccessTokenFromCode 関数を更新して、応答を次のように解析します。 JSON:
$response = json_decode($access_token_response); if (!isset($response->access_token)) { return false; } return $response->access_token;
追加の変更
さらに、適切なトークン拡張を確保し、短いトークンに関する潜在的な問題を回避するために、setExtendedAccessToken() 関数にも同様の変更を加える必要があります。 -生存トークン。更新されたコードは次のとおりです:
public function setExtendedAccessToken() { try { // need to circumvent json_decode by calling _oauthRequest // directly, since response isn't JSON format. $access_token_response = $this->_oauthRequest( $this->getUrl('graph', '/oauth/access_token'), $params = array( 'client_id' => $this->getAppId(), 'client_secret' => $this->getAppSecret(), 'grant_type' => 'fb_exchange_token', 'fb_exchange_token' => $this->getAccessToken(), ) ); } catch (FacebookApiException $e) { // most likely that user very recently revoked authorization. // In any event, we don't have an access token, so say so. return false; } if (empty($access_token_response)) { return false; } //Version 2.3 and up. $response = json_decode($access_token_response); if (!isset($response->access_token)) { return false; } $this->destroySession(); $this->setPersistentData( 'access_token', $response->access_token ); }
これらの変更を実装することで、開発者はアプリが Facebook Graph API v2.3 で期待どおりに機能し続けることを確認できます。
以上がFacebook Graph API v2.3 のアップグレードにより互換性の問題が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。