First off. I'm really new to Google Ads API.

I'm trying to created a small C# console app to retrieve some basic ads 
info (clicks, impressions..)

I have created a cloud app to get a client ID and secret. Enabled Google Ad 
API.
I have the developer token from Google Ads API Center.
(It is still in Test Access level. I have applied for basic access, but 
waiting on approval)

Then I needed to get a refresh token for my user. I used a tutorial program 
to get that, so now (I think) I have all the GoogleAdsAPI info that I added 
to app.config.
<GoogleAdsApi>
  <add key="DeveloperToken" value="0ZkDzlCf7...removed..."/>
  <add key = 'OAuth2Mode' value = 'APPLICATION' />
  <add key = 'OAuth2ClientId' value = 
'75347...removed...apps.googleusercontent.com' />
  <add key = 'OAuth2ClientSecret' value = 'GOCSPX-o...removed...' />
  <add key = 'OAuth2RefreshToken' value = '1//0chFAQh_a-BDWCg...removed...' 
/>
  <add key = 'LoginCustomerId' value = '9434...removed...' />
</GoogleAdsApi>

I then have this code I try to run:
      GoogleAdsServiceClient googleAdsService = 
client.GetService(Services.V14.GoogleAdsService);

      string query =
                 @"SELECT
                 ad_group.id,
                 ad_group.name,
                 campaign.id,
                 campaign.name,
                 metrics.impressions,
                 metrics.clicks,
                 segments.device,
                 segments.day,
             FROM ad_group
             WHERE segments.date DURING LAST_7_DAYS
                 AND ad_group.status IN ('ENABLED','PAUSED')
             ORDER BY metrics.impressions DESC
             LIMIT 50";
      try
      {
        // Issue a search request.
        googleAdsService.SearchStream(customerId.ToString(), query,
            delegate (SearchGoogleAdsStreamResponse resp)
            {
              // Display the results.
              foreach (GoogleAdsRow criterionRow in resp.Results)
              {
                Console.WriteLine(
                            $"'{criterionRow.AdGroup.Name}' with ID " +
                            $"{criterionRow.AdGroup.Id} in campaign " +
                            $"'{criterionRow.Campaign.Name}' with ID " +
                            $"{criterionRow.Campaign.Id} had " +
                            $"{criterionRow.Metrics.Impressions.ToString()} 
impressions, " +
                            $"{criterionRow.Metrics.Clicks} clicks " +
                            "during the last 7 days.");
              }
            }
        );
      }
      catch (GoogleAdsException e)
      {
        Console.WriteLine("Failure:");
        Console.WriteLine($"Message: {e.Message}");
        Console.WriteLine($"Failure: {e.Failure}");
        Console.WriteLine($"Request ID: {e.RequestId}");
        throw;
      }

But I get this error:
System.AggregateException: 'One or more errors occurred. 
(Status(StatusCode="Internal", Detail="Error starting gRPC call. 
TokenResponseException: Error:"invalid_request", Description:"Missing 
required parameter: refresh_token", Uri:""", 
DebugException="Google.Apis.Auth.OAuth2.Responses.TokenResponseException: 
Error:"invalid_request", Description:"Missing required parameter: 
refresh_token", Uri:""
   at 
Google.Apis.Auth.OAuth2.Responses.TokenResponse.FromHttpResponseAsync(HttpResponseMessage
 
response, IClock clock, ILogger logger)
   at 
Google.Apis.Auth.OAuth2.Requests.TokenRequestExtenstions.ExecuteAsync(TokenRequest
 
request, HttpClient httpClient, String tokenServerUrl, CancellationToken 
taskCancellationToken, IClock clock, ILogger logger)
   at 
Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow.FetchTokenAsync(String 
userId, TokenRequest request, CancellationToken taskCancellationToken)
   at 
Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow.FetchTokenAsync(String 
userId, TokenRequest request, CancellationToken taskCancellationToken)
   at 
Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow.RefreshTokenAsync(String 
userId, String refreshToken, CancellationToken taskCancellationToken)
   at 
Google.Apis.Auth.OAuth2.UserCredential.RefreshTokenAsync(CancellationToken 
taskCancellationToken)
   at Google.Apis.Auth.OAuth2.TokenRefreshManager.RefreshTokenAsync()
   at 
Google.Apis.Auth.OAuth2.UserCredential.GetAccessTokenWithHeadersForRequestAsync(String
 
authUri, CancellationToken cancellationToken)
   at 
Google.Apis.Auth.OAuth2.TokenRefreshManager.<GetAccessTokenForRequestAsync>g__LogException|10_0(Task
 
task)
   at 
Grpc.Auth.GoogleAuthInterceptors.<>c__DisplayClass3_0.<<FromCredential>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at 
Grpc.Net.Client.Internal.GrpcProtocolHelpers.ReadCredentialMetadata(DefaultCallCredentialsConfigurator
 
configurator, GrpcChannel channel, HttpRequestMessage message, IMethod 
method, CallCredentials credentials)
   at 
Grpc.Net.Client.Internal.GrpcCall`2.ReadCredentials(HttpRequestMessage 
request)
   at Grpc.Net.Client.Internal.GrpcCall`2.RunCall(HttpRequestMessage 
request, Nullable`1 timeout)"))'

It says the refresh token isn't there... But it is in my config file...
What I'm I missing/doing wrong??

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/f15a4b90-00a7-4e2a-8f19-9df67d504106n%40googlegroups.com.

Reply via email to