Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Google Ads API to v18 #2740

Merged
merged 13 commits into from
Dec 20, 2024
2 changes: 1 addition & 1 deletion bin/GoogleAdsCleanupServices.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class GoogleAdsCleanupServices {
*
* @var string
*/
protected $version = 'V16';
protected $version = 'V18';

/**
* @var Event Composer event.
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
"Google\\Task\\Composer::cleanup",
"Automattic\\WooCommerce\\GoogleListingsAndAds\\Util\\SymfonyPolyfillCleanup::remove",
"Automattic\\WooCommerce\\GoogleListingsAndAds\\Util\\GoogleAdsCleanupServices::remove",
"composer run-script remove-google-ads-api-version-support -- 14 15 17 18",
"composer run-script remove-google-ads-api-version-support -- 16 17",
"php ./bin/prefix-vendor-namespace.php",
"bash ./bin/cleanup-vendor-files.sh",
"composer dump-autoload"
Expand Down
6 changes: 6 additions & 0 deletions js/src/pages/dashboard/all-programs-table-card/index.scss
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@
}
}

.components-card-footer {
.woocommerce-pagination {
display: none;
}
}

.program-actions {
display: flex;
justify-content: space-between;
Expand Down
12 changes: 6 additions & 6 deletions src/API/Google/Ads.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareTrait;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsInterface;
use Exception;
use Google\Ads\GoogleAds\Util\V16\ResourceNames;
use Google\Ads\GoogleAds\V16\Enums\AccessRoleEnum\AccessRole;
use Google\Ads\GoogleAds\V16\Enums\ProductLinkInvitationStatusEnum\ProductLinkInvitationStatus;
use Google\Ads\GoogleAds\V16\Resources\ProductLinkInvitation;
use Google\Ads\GoogleAds\V16\Services\ListAccessibleCustomersRequest;
use Google\Ads\GoogleAds\V16\Services\UpdateProductLinkInvitationRequest;
use Google\Ads\GoogleAds\Util\V18\ResourceNames;
use Google\Ads\GoogleAds\V18\Enums\AccessRoleEnum\AccessRole;
use Google\Ads\GoogleAds\V18\Enums\ProductLinkInvitationStatusEnum\ProductLinkInvitationStatus;
use Google\Ads\GoogleAds\V18\Resources\ProductLinkInvitation;
use Google\Ads\GoogleAds\V18\Services\ListAccessibleCustomersRequest;
use Google\Ads\GoogleAds\V18\Services\UpdateProductLinkInvitationRequest;
use Google\ApiCore\ApiException;
use Google\ApiCore\ValidationException;

Expand Down
20 changes: 10 additions & 10 deletions src/API/Google/AdsAsset.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@
use Automattic\WooCommerce\GoogleListingsAndAds\Google\Ads\GoogleAdsClient;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareTrait;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareInterface;
use Google\Ads\GoogleAds\V16\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V16\Enums\AssetTypeEnum\AssetType;
use Google\Ads\GoogleAds\V16\Resources\Asset;
use Google\Ads\GoogleAds\V16\Services\AssetOperation;
use Google\Ads\GoogleAds\V16\Services\MutateGoogleAdsRequest;
use Google\Ads\GoogleAds\V16\Services\MutateOperation;
use Google\Ads\GoogleAds\Util\V16\ResourceNames;
use Google\Ads\GoogleAds\V16\Common\TextAsset;
use Google\Ads\GoogleAds\V16\Common\ImageAsset;
use Google\Ads\GoogleAds\V16\Common\CallToActionAsset;
use Google\Ads\GoogleAds\V18\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V18\Enums\AssetTypeEnum\AssetType;
use Google\Ads\GoogleAds\V18\Resources\Asset;
use Google\Ads\GoogleAds\V18\Services\AssetOperation;
use Google\Ads\GoogleAds\V18\Services\MutateGoogleAdsRequest;
use Google\Ads\GoogleAds\V18\Services\MutateOperation;
use Google\Ads\GoogleAds\Util\V18\ResourceNames;
use Google\Ads\GoogleAds\V18\Common\TextAsset;
use Google\Ads\GoogleAds\V18\Common\ImageAsset;
use Google\Ads\GoogleAds\V18\Common\CallToActionAsset;
use Automattic\WooCommerce\GoogleListingsAndAds\Proxies\WP;
use Google\ApiCore\ApiException;
use Exception;
Expand Down
34 changes: 15 additions & 19 deletions src/API/Google/AdsAssetGroup.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,18 @@
use Automattic\WooCommerce\GoogleListingsAndAds\Google\Ads\GoogleAdsClient;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareInterface;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareTrait;
use Google\Ads\GoogleAds\Util\V16\ResourceNames;
use Google\Ads\GoogleAds\V16\Enums\ListingGroupFilterListingSourceEnum\ListingGroupFilterListingSource;
use Google\Ads\GoogleAds\V16\Enums\AssetGroupStatusEnum\AssetGroupStatus;
use Google\Ads\GoogleAds\V16\Enums\ListingGroupFilterTypeEnum\ListingGroupFilterType;
use Google\Ads\GoogleAds\V16\Resources\AssetGroup;
use Google\Ads\GoogleAds\V16\Resources\AssetGroupListingGroupFilter;
use Google\Ads\GoogleAds\V16\Services\AssetGroupListingGroupFilterOperation;
use Google\Ads\GoogleAds\V16\Services\AssetGroupOperation;
use Google\Ads\GoogleAds\V16\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V16\Services\MutateGoogleAdsRequest;
use Google\Ads\GoogleAds\V16\Services\MutateOperation;
use Google\Ads\GoogleAds\V16\Services\Client\AssetGroupServiceClient;
use Google\Ads\GoogleAds\Util\V18\ResourceNames;
use Google\Ads\GoogleAds\V18\Enums\ListingGroupFilterListingSourceEnum\ListingGroupFilterListingSource;
use Google\Ads\GoogleAds\V18\Enums\AssetGroupStatusEnum\AssetGroupStatus;
use Google\Ads\GoogleAds\V18\Enums\ListingGroupFilterTypeEnum\ListingGroupFilterType;
use Google\Ads\GoogleAds\V18\Resources\AssetGroup;
use Google\Ads\GoogleAds\V18\Resources\AssetGroupListingGroupFilter;
use Google\Ads\GoogleAds\V18\Services\AssetGroupListingGroupFilterOperation;
use Google\Ads\GoogleAds\V18\Services\AssetGroupOperation;
use Google\Ads\GoogleAds\V18\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V18\Services\MutateGoogleAdsRequest;
use Google\Ads\GoogleAds\V18\Services\MutateOperation;
use Google\Ads\GoogleAds\V18\Services\Client\AssetGroupServiceClient;
use Google\ApiCore\ApiException;
use Google\ApiCore\ValidationException;
use Google\Protobuf\FieldMask;
Expand Down Expand Up @@ -49,11 +49,6 @@ class AdsAssetGroup implements OptionsAwareInterface {
*/
protected const TEMPORARY_ID = -3;

/**
* The page size for the AdsAssetGroupQuery.
*/
protected const PAGE_SIZE = 1;

/**
* The Google Ads Client.
*
Expand Down Expand Up @@ -226,7 +221,7 @@ protected function temporary_resource_name() {
}

/**
* Get Asset Groups for a specific campaign.
* Get Asset Groups for a specific campaign. Limit to first AdsAssetGroup.
*
* @since 2.4.0
*
Expand All @@ -240,7 +235,7 @@ public function get_asset_groups_by_campaign_id( int $campaign_id, bool $include
try {
$asset_groups_converted = [];

$asset_group_results = ( new AdsAssetGroupQuery( [ 'pageSize' => self::PAGE_SIZE ] ) )
$asset_group_results = ( new AdsAssetGroupQuery() )
->set_client( $this->client, $this->options->get_ads_id() )
->add_columns( [ 'asset_group.path1', 'asset_group.path2', 'asset_group.id', 'asset_group.final_urls' ] )
->where( 'campaign.id', $campaign_id )
Expand All @@ -250,6 +245,7 @@ public function get_asset_groups_by_campaign_id( int $campaign_id, bool $include
/** @var GoogleAdsRow $row */
foreach ( $asset_group_results->getPage()->getIterator() as $row ) {
$asset_groups_converted[ $row->getAssetGroup()->getId() ] = $this->convert_asset_group( $row );
break; // Limit to only first asset group.
}

if ( $include_assets ) {
Expand Down
12 changes: 6 additions & 6 deletions src/API/Google/AdsAssetGroupAsset.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
use Automattic\WooCommerce\GoogleListingsAndAds\Google\Ads\GoogleAdsClient;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareInterface;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareTrait;
use Google\Ads\GoogleAds\V16\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V16\Resources\AssetGroupAsset;
use Google\Ads\GoogleAds\V18\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V18\Resources\AssetGroupAsset;
use Google\ApiCore\ApiException;
use Automattic\WooCommerce\GoogleListingsAndAds\Exception\ExceptionWithResponseData;
use Google\Ads\GoogleAds\V16\Services\MutateOperation;
use Google\Ads\GoogleAds\V16\Services\AssetGroupAssetOperation;
use Google\Ads\GoogleAds\Util\V16\ResourceNames;
use Google\Ads\GoogleAds\V18\Services\MutateOperation;
use Google\Ads\GoogleAds\V18\Services\AssetGroupAssetOperation;
use Google\Ads\GoogleAds\Util\V18\ResourceNames;



Expand All @@ -22,7 +22,7 @@
* Class AdsAssetGroupAsset
*
* Use to get assets group assets for specific asset groups.
* https://developers.google.com/google-ads/api/fields/V16/asset_group_asset
* https://developers.google.com/google-ads/api/reference/rpc/v18/AssetGroupAsset
*
* @since 2.4.0
*
Expand Down
56 changes: 24 additions & 32 deletions src/API/Google/AdsCampaign.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@
use Automattic\WooCommerce\GoogleListingsAndAds\Options\TransientsInterface;
use Automattic\WooCommerce\GoogleListingsAndAds\Proxies\WC;
use Google\Ads\GoogleAds\Util\FieldMasks;
use Google\Ads\GoogleAds\Util\V16\ResourceNames;
use Google\Ads\GoogleAds\V16\Common\MaximizeConversionValue;
use Google\Ads\GoogleAds\V16\Enums\AdvertisingChannelTypeEnum\AdvertisingChannelType;
use Google\Ads\GoogleAds\V16\Resources\Campaign;
use Google\Ads\GoogleAds\V16\Resources\Campaign\ShoppingSetting;
use Google\Ads\GoogleAds\V16\Services\Client\CampaignServiceClient;
use Google\Ads\GoogleAds\V16\Services\CampaignOperation;
use Google\Ads\GoogleAds\V16\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V16\Services\MutateGoogleAdsRequest;
use Google\Ads\GoogleAds\V16\Services\MutateOperation;
use Google\Ads\GoogleAds\Util\V18\ResourceNames;
use Google\Ads\GoogleAds\V18\Common\MaximizeConversionValue;
use Google\Ads\GoogleAds\V18\Enums\AdvertisingChannelTypeEnum\AdvertisingChannelType;
use Google\Ads\GoogleAds\V18\Resources\Campaign;
use Google\Ads\GoogleAds\V18\Resources\Campaign\ShoppingSetting;
use Google\Ads\GoogleAds\V18\Services\Client\CampaignServiceClient;
use Google\Ads\GoogleAds\V18\Services\CampaignOperation;
use Google\Ads\GoogleAds\V18\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V18\Services\MutateGoogleAdsRequest;
use Google\Ads\GoogleAds\V18\Services\MutateOperation;
use Google\ApiCore\ApiException;
use Google\ApiCore\ValidationException;
use Exception;
Expand Down Expand Up @@ -108,35 +108,37 @@ public function __construct( GoogleAdsClient $client, AdsCampaignBudget $budget,
*
* @param bool $exclude_removed Exclude removed campaigns (default true).
* @param bool $fetch_criterion Combine the campaign data with criterion data (default true).
* @param array $args Arguments for the Ads Campaign Query for example: per_page for limiting the number of results.
* @param bool $return_pagination_params Whether to return pagination params (default false).
* @param array $args Arguments for fetching campaigns, for example: per_page for limiting the number of results.
*
* @return array
* @throws ExceptionWithResponseData When an ApiException is caught.
*/
public function get_campaigns( bool $exclude_removed = true, bool $fetch_criterion = true, $args = [], $return_pagination_params = false ): array {
public function get_campaigns( bool $exclude_removed = true, bool $fetch_criterion = true, array $args = [] ): array {
try {
$query = ( new AdsCampaignQuery( $args ) )->set_client( $this->client, $this->options->get_ads_id() );
$query = ( new AdsCampaignQuery() )->set_client( $this->client, $this->options->get_ads_id() );

if ( $exclude_removed ) {
$query->where( 'campaign.status', 'REMOVED', '!=' );
}

$campaign_count = 0;
$count = 0;
$campaign_results = $query->get_results();
$converted_campaigns = [];

/** @var Page $page */
$page = $campaign_results->getPage();

foreach ( $page->getIterator() as $row ) {
++$campaign_count;
foreach ( $campaign_results->iterateAllElements() as $row ) {
++$count;
$campaign = $this->convert_campaign( $row );
$converted_campaigns[ $campaign['id'] ] = $campaign;

// Break early if we request a limited result.
if ( ! empty( $args['per_page'] ) && $count >= $args['per_page'] ) {
break;
}
}

if ( $exclude_removed ) {
// Cache campaign count.
$campaign_count = $campaign_results->getPage()->getResponseObject()->getTotalResultsCount();
$this->container->get( TransientsInterface::class )->set(
TransientsInterface::ADS_CAMPAIGN_COUNT,
$campaign_count,
Expand All @@ -148,16 +150,6 @@ public function get_campaigns( bool $exclude_removed = true, bool $fetch_criteri
$converted_campaigns = $this->combine_campaigns_and_campaign_criterion_results( $converted_campaigns );
}

if ( $return_pagination_params ) {
// Total results across all pages.
$total_results = $page->getResponseObject()->getTotalResultsCount();
$next_page_token = $page->getNextPageToken();
return [
'campaigns' => array_values( $converted_campaigns ),
'total_results' => $total_results,
'next_page_token' => $next_page_token,
];
}
return array_values( $converted_campaigns );
} catch ( ApiException $e ) {
do_action( 'woocommerce_gla_ads_client_exception', $e, __METHOD__ );
Expand All @@ -183,14 +175,14 @@ public function get_campaigns( bool $exclude_removed = true, bool $fetch_criteri
*/
public function get_campaign( int $id ): array {
try {
$campaign_results = ( new AdsCampaignQuery( [ 'per_page' => 1 ] ) )->set_client( $this->client, $this->options->get_ads_id() )
$campaign_results = ( new AdsCampaignQuery() )->set_client( $this->client, $this->options->get_ads_id() )
->where( 'campaign.id', $id, '=' )
->get_results();

$converted_campaigns = [];

// Get only the first element from campaign results
foreach ( $campaign_results->getPage()->getIterator() as $row ) {
foreach ( $campaign_results->iterateAllElements() as $row ) {
$campaign = $this->convert_campaign( $row );
$converted_campaigns[ $campaign['id'] ] = $campaign;
break;
Expand Down
10 changes: 5 additions & 5 deletions src/API/Google/AdsCampaignBudget.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareInterface;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareTrait;
use Google\Ads\GoogleAds\Util\FieldMasks;
use Google\Ads\GoogleAds\Util\V16\ResourceNames;
use Google\Ads\GoogleAds\V16\Resources\CampaignBudget;
use Google\Ads\GoogleAds\V16\Services\CampaignBudgetOperation;
use Google\Ads\GoogleAds\V16\Services\Client\CampaignBudgetServiceClient;
use Google\Ads\GoogleAds\V16\Services\MutateOperation;
use Google\Ads\GoogleAds\Util\V18\ResourceNames;
use Google\Ads\GoogleAds\V18\Resources\CampaignBudget;
use Google\Ads\GoogleAds\V18\Services\CampaignBudgetOperation;
use Google\Ads\GoogleAds\V18\Services\Client\CampaignBudgetServiceClient;
use Google\Ads\GoogleAds\V18\Services\MutateOperation;
use Google\ApiCore\ValidationException;
use Exception;

Expand Down
12 changes: 6 additions & 6 deletions src/API/Google/AdsCampaignCriterion.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@

namespace Automattic\WooCommerce\GoogleListingsAndAds\API\Google;

use Google\Ads\GoogleAds\Util\V16\ResourceNames;
use Google\Ads\GoogleAds\V16\Common\LocationInfo;
use Google\Ads\GoogleAds\V16\Enums\CampaignCriterionStatusEnum\CampaignCriterionStatus;
use Google\Ads\GoogleAds\V16\Resources\CampaignCriterion;
use Google\Ads\GoogleAds\V16\Services\CampaignCriterionOperation;
use Google\Ads\GoogleAds\V16\Services\MutateOperation;
use Google\Ads\GoogleAds\Util\V18\ResourceNames;
use Google\Ads\GoogleAds\V18\Common\LocationInfo;
use Google\Ads\GoogleAds\V18\Enums\CampaignCriterionStatusEnum\CampaignCriterionStatus;
use Google\Ads\GoogleAds\V18\Resources\CampaignCriterion;
use Google\Ads\GoogleAds\V18\Services\CampaignCriterionOperation;
use Google\Ads\GoogleAds\V18\Services\MutateOperation;

/**
* Class AdsCampaignCriterion
Expand Down
14 changes: 7 additions & 7 deletions src/API/Google/AdsCampaignLabel.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
use Automattic\WooCommerce\GoogleListingsAndAds\Google\Ads\GoogleAdsClient;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareInterface;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareTrait;
use Google\Ads\GoogleAds\Util\V16\ResourceNames;
use Google\Ads\GoogleAds\V16\Resources\Label;
use Google\Ads\GoogleAds\V16\Resources\CampaignLabel;
use Google\Ads\GoogleAds\V16\Services\LabelOperation;
use Google\Ads\GoogleAds\V16\Services\CampaignLabelOperation;
use Google\Ads\GoogleAds\V16\Services\MutateOperation;
use Google\Ads\GoogleAds\V16\Services\MutateGoogleAdsRequest;
use Google\Ads\GoogleAds\Util\V18\ResourceNames;
use Google\Ads\GoogleAds\V18\Resources\Label;
use Google\Ads\GoogleAds\V18\Resources\CampaignLabel;
use Google\Ads\GoogleAds\V18\Services\LabelOperation;
use Google\Ads\GoogleAds\V18\Services\CampaignLabelOperation;
use Google\Ads\GoogleAds\V18\Services\MutateOperation;
use Google\Ads\GoogleAds\V18\Services\MutateGoogleAdsRequest;

/**
* Class AdsCampaignLabel
Expand Down
26 changes: 13 additions & 13 deletions src/API/Google/AdsConversionAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareInterface;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareTrait;
use Exception;
use Google\Ads\GoogleAds\V16\Common\TagSnippet;
use Google\Ads\GoogleAds\V16\Enums\ConversionActionCategoryEnum\ConversionActionCategory;
use Google\Ads\GoogleAds\V16\Enums\ConversionActionStatusEnum\ConversionActionStatus;
use Google\Ads\GoogleAds\V16\Enums\ConversionActionTypeEnum\ConversionActionType;
use Google\Ads\GoogleAds\V16\Enums\TrackingCodePageFormatEnum\TrackingCodePageFormat;
use Google\Ads\GoogleAds\V16\Enums\TrackingCodeTypeEnum\TrackingCodeType;
use Google\Ads\GoogleAds\V16\Resources\ConversionAction;
use Google\Ads\GoogleAds\V16\Resources\ConversionAction\ValueSettings;
use Google\Ads\GoogleAds\V16\Services\ConversionActionOperation;
use Google\Ads\GoogleAds\V16\Services\Client\ConversionActionServiceClient;
use Google\Ads\GoogleAds\V16\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V16\Services\MutateConversionActionResult;
use Google\Ads\GoogleAds\V16\Services\MutateConversionActionsRequest;
use Google\Ads\GoogleAds\V18\Common\TagSnippet;
use Google\Ads\GoogleAds\V18\Enums\ConversionActionCategoryEnum\ConversionActionCategory;
use Google\Ads\GoogleAds\V18\Enums\ConversionActionStatusEnum\ConversionActionStatus;
use Google\Ads\GoogleAds\V18\Enums\ConversionActionTypeEnum\ConversionActionType;
use Google\Ads\GoogleAds\V18\Enums\TrackingCodePageFormatEnum\TrackingCodePageFormat;
use Google\Ads\GoogleAds\V18\Enums\TrackingCodeTypeEnum\TrackingCodeType;
use Google\Ads\GoogleAds\V18\Resources\ConversionAction;
use Google\Ads\GoogleAds\V18\Resources\ConversionAction\ValueSettings;
use Google\Ads\GoogleAds\V18\Services\ConversionActionOperation;
use Google\Ads\GoogleAds\V18\Services\Client\ConversionActionServiceClient;
use Google\Ads\GoogleAds\V18\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V18\Services\MutateConversionActionResult;
use Google\Ads\GoogleAds\V18\Services\MutateConversionActionsRequest;
use Google\ApiCore\ApiException;

/**
Expand Down
4 changes: 2 additions & 2 deletions src/API/Google/AdsReport.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareInterface;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareTrait;
use DateTime;
use Google\Ads\GoogleAds\V16\Common\Segments;
use Google\Ads\GoogleAds\V16\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V18\Common\Segments;
use Google\Ads\GoogleAds\V18\Services\GoogleAdsRow;
use Google\ApiCore\ApiException;

/**
Expand Down
Loading
Loading