ホームページ >バックエンド開発 >PHPチュートリアル >Facebook Graph API v2.3 のアップグレードにより互換性の問題が発生するのはなぜですか?

Facebook Graph API v2.3 のアップグレードにより互換性の問題が発生するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-09 17:03:11625ブラウズ

Why are Facebook Graph API v2.3 Upgrades Causing Compatibility Issues?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。