1

ユーザーにGoogleアナリティクスアカウントへのオフラインアクセスを許可するオプションを提供するウェブアプリケーションがあります。私が直面する問題は、複数のGoogleアナリティクスアカウントから一度にデータを出力する必要がある場合です。各ユーザーのアクセストークンを更新してデータを取得しようとすると、常に最初に格納されたアクセストークンからデータが受信されます。Google APIを使用して複数のGoogleアナリティクスアカウントからデータを取得するにはどうすればよいですか?

以下は、2つのリフレッシュトークンをループし、それぞれのアクセストークンを作成および設定し、各ユーザーがアクセスできるプロファイルIDを取得するPHPコードの例です。ループ内のアクセストークンをリセットするので、各ユーザーがアクセスできるプロファイルを出力すると予想されますが、最初のユーザーが2回アクセスしたプロファイルが出力されます。私は第2のリフレッシュトークンで開始するループを変更した場合も同様に、へのアクセスとして、第2のユーザが重複して印刷されたプロファイル:

$refresh_token1 = "123"; 
$refresh_token2 = "456"; 

foreach(array($refresh_token1,$refresh_token2) as $r){ 
    $access_token = array("access_token" => "", "token_type" => "Bearer", "expires_in" => 0, "refresh_token" => $r, "created" => 0); 
    $client->setAccessToken($access_token); 

    $analytics = new Google_Service_Analytics($client); 
    $obj = $analytics->management_profiles->listManagementProfiles('~all', '~all'); 
    if (count($obj->getItems()) > 0) { 
     $items = $obj->getItems(); 
     foreach($items as $item){ 
      echo $item->getId()."<BR>"; 
     } 
    } 
} 

は、私はまた、「$クライアント - > refreshToken($を呼び出して試してみましたr) "コマンドを最初のループの後に実行しても、どちらも機能していないようです。

+0

クライアントの更新トークンも更新していることを確認してください。クライアントライブラリは、リフレッシュトークンを使用して必要に応じて新しいアクセストークンを自動的に取得します。 – DaImTo

+0

@DaImTo、それは$ client-> setAccessToken($ access_token)呼び出しの動作ではありませんか? –

答えて

1

アクセストークンを更新するだけでは不十分です。ループ内に新しいクライアントを作成して、各ユーザーに固有のデータを取得する必要があります。

$refresh_token1 = "123"; 
$refresh_token2 = "456"; 

foreach(array($refresh_token1,$refresh_token2) as $r){ 

    $client = new Google_Client(); 
    $client->setAuthConfig(__DIR__ . '/client_secrets.json'); 
    $client->addScope(Google_Service_Analytics::ANALYTICS_READONLY); 

    $access_token = array("access_token" => "", "token_type" => "Bearer", "expires_in" => 0, "refresh_token" => $r, "created" => 0); 
    $client->setAccessToken($access_token); 

    $analytics = new Google_Service_Analytics($client); 
    $obj = $analytics->management_profiles->listManagementProfiles('~all', '~all'); 
    if (count($obj->getItems()) > 0) { 
     $items = $obj->getItems(); 
     foreach($items as $item){ 
      echo $item->getId()."<BR>"; 
     } 
    } 
} 
関連する問題