3

Oauth 2.0 を使用して、Google アナリティクスで WP プラグインに取り組んでいます。

この 1 つの問題を除いて、すべての認証とデータ プルは正常に機能します。新しい Google 認証コード (例: "4/-xbSbg....") を初めて取得し、認証してから、新しい Google_AnalyticsService() オブジェクト、それはエラーを投げ返します:

「Google_Exception」と「認証後にサービスを追加できません」というメッセージ

これは 109 行にあります: http://code.google.com/p/google-api-php-client/source/browse/trunk/src/apiClient.php?r=258

このコードを呼び出すページを更新すると、問題なく動作します。つまり、check_login() の最初のブランチは問題ありませんが、認証呼び出しが正しく機能していません。

最初に認証を行ったため、コードが不平を言っているように見えますが、メッセージには、それを行うべきではないことが示されています。コメントとコードは、私の問題が何であるかを本当に混乱させました(ログインコードはまだあまりきれいではありません、私は理解しています)。

重要な注意: インストール済みアプリに Google 認証を使用しているため、ユーザーに認証コードを要求し、それを使用して認証トークンを取得しています。

get_option()、set_option() & update_option() は問題の一部ではない WP ネイティブ関数です

これが私のコードです:

class GoogleAnalyticsStats
{
var $client = false;

function GoogleAnalyticsStats()
{       
$this->client = new Google_Client();

$this->client->setClientId(GOOGLE_ANALYTICATOR_CLIENTID);
$this->client->setClientSecret(GOOGLE_ANALYTICATOR_CLIENTSECRET);
$this->client->setRedirectUri(GOOGLE_ANALYTICATOR_REDIRECT);  
$this->client->setScopes(array(GOOGLE_ANALYTICATOR_SCOPE));

// Magic. Returns objects from the Analytics Service instead of associative arrays.
$this->client->setUseObjects(true);
}

function checkLogin()
{
$ga_google_authtoken  = get_option('ga_google_authtoken');
if (!empty($ga_google_authtoken)) 
{
        $this->client->setAccessToken($ga_google_authtoken);
}
else
{
    $authCode = get_option('ga_google_token');

    if (empty($authCode)) return false;

    $accessToken = $this->client->authenticate($authCode);
    $this->client->setAccessToken($accessToken);
    update_option('ga_google_authtoken', $accessToken);         

}   

return true;
 }

function getSingleProfile()
{
$analytics = new Google_AnalyticsService($this->client);
}

}
4

1 に答える 1

1

$analytics = new Google_AnalyticsService($this->client);内に移動する必要がありfunction GoogleAnalyticsStats()、できれば $analytics をメンバー変数に変換します。

class GoogleAnalyticsStats
{
  var $client = false;
  var $analytics = false;

  function GoogleAnalyticsStats()
  {       
    $this->client = new Google_Client();

    $this->client->setClientId(GOOGLE_ANALYTICATOR_CLIENTID);
    $this->client->setClientSecret(GOOGLE_ANALYTICATOR_CLIENTSECRET);
    $this->client->setRedirectUri(GOOGLE_ANALYTICATOR_REDIRECT);  
    $this->client->setScopes(array(GOOGLE_ANALYTICATOR_SCOPE));

    // Magic. Returns objects from the Analytics Service instead of associative arrays.
    $this->client->setUseObjects(true);

    $this->analytics = new Google_AnalyticsService($this->client);
  }
  ...

これで、 内から分析 API を呼び出すことができますgetSingleProfile

于 2012-09-14T16:52:29.623 に答える