Google Ads API에서 업데이트는 필드 마스크를 사용하여 이루어집니다. 필드 마스크는
업데이트로 변경하려는 모든 필드와 지정된 필드
필드 마스크에 없는 필드는 서버로 전송되더라도 무시됩니다. 나
수동으로 필드 마스크를 생성할 수 있습니다.
Google\Protobuf\FieldMask
님,
변경하려는 모든 필드의 이름으로 채워진 배열을 만듭니다.
필드 마스크의 경로 필드에 할당하면 됩니다.
또한 기본 제공 필드 마스크 유틸리티를 (FieldMasks) 이렇게 하면 구체적인 세부정보가 많이 숨겨지고, 입력란을 생성할 수 있습니다. 항목의 필드에 대한 변경사항을 모니터링하여 자동으로 마스킹합니다.
다음은 캠페인을 업데이트하는 예입니다.
$campaign = new Campaign([
'resource_name' => ResourceNames::forCampaign($customerId, $campaignId),
'status' => CampaignStatus::PAUSED
]);
$campaignOperation = new CampaignOperation();
$campaignOperation->setUpdate($campaign);
$campaignOperation->setUpdateMask(FieldMasks::allSetFieldsOf($campaign));
이 코드는 먼저 Campaign 객체를 만든 다음
ResourceNames
: API가 어떤 캠페인이 실행되고 있는지 알 수 있도록 합니다.
이(가) 업데이트되었습니다. status
도 PAUSED
로 설정됩니다.
그런 다음 코드는 CampaignOperation
객체를 만들고 이전
캠페인을 만들었습니다. 그런 다음
FieldMasks::allSetFieldsOf()
드림
변경된 모든 필드를 사용하여 캠페인에 대한 필드 마스크를 만듭니다. 마지막으로
는 반환된 마스크를 캠페인 작업 객체에 전달합니다.
참고:
FieldMasks::allSetFieldsOf
는
FieldMasks::compare()
전달된 객체를 동일한 클래스의 빈 객체와 비교합니다. 대상
예를 들어 이전 코드에서는 allSetFieldsOf()
대신 FieldMasks::compare(new
Campaign(), $campaign)
를 사용할 수 있습니다.
메시지 필드 및 하위 필드 업데이트
MESSAGE
필드에는 하위 필드 (예:
다음 세 가지를 포함하는 MaximizeConversions
:
target_cpa_micros
,
cpc_bid_ceiling_micros
및 cpc_bid_floor_micros
)의 경우 값이 없을 수 있습니다.
전혀 (예: ManualCpm
)
정의된 하위 필드가 없는 메시지 필드
하위 필드로 정의되지 않은 MESSAGE
필드를 업데이트할 때는 다음을 사용합니다.
FieldMasks
를 사용하여 이전에 설명한 대로 필드 마스크를 생성합니다.
하위 필드가 정의된 메시지 필드
다음이 없는 하위 필드로 정의된 MESSAGE
필드를 업데이트할 때
명시적으로 해당 메시지의 하위 필드를 명시적으로 설정하려면
다음과 같이 변경 가능한 각 MESSAGE
하위 필드를 FieldMask
에 추가합니다.
처음부터 필드 마스크를 만든 이전 예시를 참조하세요.
한 가지 일반적인 예는
새 입찰 전략의 입력란입니다. 아래 코드는
사용할 수 있도록
MaximizeConversions
입찰 전략
로 확장됩니다.
이 경우 allSetFieldsOf()
및 compare()
메서드를 사용하여
FieldMasks
이(가) 의도한 목표를 달성하지 못합니다.
다음 코드는 maximize_conversions
를 포함하는 필드 마스크를 생성합니다.
그러나 Google Ads API에서는 트래픽이 실패하는 것을 방지하기 위해
실수로 필드를 지워서
FieldMaskError.FIELD_HAS_SUBFIELDS
드림
오류가 발생했습니다.
// Creates a campaign with the proper resource name and an empty
// MaximizeConversions field.
$campaign = new Campaign([
'resource_name' => ResourceNames::forCampaign($customerId, $campaignId),
'maximize_conversions' => new MaximizeConversions()
]);
// Constructs an operation, using the FieldMasks' allSetFieldsOf utility to
// derive the update mask. The field mask will include 'maximize_conversions`,
// which will produce a FieldMaskError.FIELD_HAS_SUBFIELDS error.
$campaignOperation = new CampaignOperation();
$campaignOperation->setUpdate($campaign);
$campaignOperation->setUpdateMask(FieldMasks::allSetFieldsOf($campaign));
// Sends the operation in a mutate request that will result in a
// FieldMaskError.FIELD_HAS_SUBFIELDS error because empty MESSAGE fields cannot
// be included in a field mask.
$campaignServiceClient = $googleAdsClient->getCampaignServiceClient();
$response = $campaignServiceClient->mutateCampaigns($customerId, [$campaignOperation]);
다음 코드는
하위 필드를 설정하지 않은 MaximizeConversions
입찰 전략이 있습니다.
// Creates a Campaign object with the proper resource name.
$campaign = new Campaign([
'resource_name' => ResourceNames::forCampaign($customerId, $campaignId)
]);
// Creates a field mask from the existing campaign and adds all of the mutable
// fields (only one in this case) on the MaximizeConversions bidding strategy to
// the field mask. Because this field is included in the field mask but
// excluded from the campaign object, the Google Ads API will set the campaign's
// bidding strategy to a MaximizeConversions object without any of its subfields
// set.
fieldMask = FieldMasks::allSetFieldsOf($campaign);
// Only include 'maximize_conversions.target_cpa_micros' in the field mask
// as it is the only mutable subfield on MaximizeConversions when used as a
// standard bidding strategy.
//
// Learn more about standard and portfolio bidding strategies here:
// https://developers.google.com/google-ads/api/docs/campaigns/bidding/assign-strategies
$fieldMask->setPaths(array_merge(
iterator_to_array($fieldMask->getPaths()->getIterator()),
['maximize_conversions.target_cpa_micros']
));
// Creates an operation to update the campaign with the specified fields.
$campaignOperation = new CampaignOperation();
$campaignOperation->setUpdate($campaign);
$campaignOperation->setUpdateMask($fieldMask);
필드 지우기
일부 필드는 명시적으로 지울 수 있습니다. 앞의 예와 마찬가지로
이러한 필드를 필드 마스크에 명시적으로 추가해야 합니다. 예를 들어
MaximizeConversions
입찰 전략을 사용하고
target_cpa_micros
필드가 0
보다 큰 값으로 설정됩니다.
다음 코드가 실행됩니다. 하지만 maximize_conversions.target_cpa_micros
는
이 필드 마스크에 추가되지 않으므로
target_cpa_micros
필드:
// Creates a campaign with the proper resource name and a MaximizeConversions
// object with target_cpa_micros set to 0.
$campaign = new Campaign([
'resource_name' => ResourceNames::forCampaign($customerId, $campaignId),
'maximize_conversions' => new MaximizeConversions(['target_cpa' => 0]),
'status' => CampaignStatus::PAUSED
]);
// Constructs an operation, using the FieldMasks' allSetFieldsOf utility to
// derive the update mask. However, the field mask will NOT include
// 'maximize_conversions.target_cpa_micros'.
$campaignOperation = new CampaignOperation();
$campaignOperation->setUpdate($campaign);
$campaignOperation->setUpdateMask(FieldMasks::allSetFieldsOf($campaign));
// Sends the operation in a mutate request that will succeed but will NOT update
// the 'target_cpa_micros' field because
// 'maximize_conversions.target_cpa_micros' was not included in the field mask.
$campaignServiceClient = $googleAdsClient->getCampaignServiceClient();
$response = $campaignServiceClient->mutateCampaigns($customerId, [$campaignOperation]);
다음 코드는 target_cpa_micros
를 올바르게 지우는 방법을 보여줍니다.
MaximizeConversions
입찰 전략의 필드입니다.
// Creates a Campaign object with the proper resource name.
$campaign = new Campaign([
'resource_name' => ResourceNames::forCampaign($customerId, $campaignId)
]);
// Constructs a field mask from the existing campaign and adds the
// 'maximize_conversions.target_cpa_micros' field to the field mask, which will
// clear this field from the bidding strategy without impacting any other fields
// on the bidding strategy.
$fieldMask = FieldMasks::allSetFieldsOf($campaign);
$fieldMask->setPaths(array_merge(
iterator_to_array($fieldMask->getPaths()->getIterator()),
['maximize_conversions.target_cpa_micros']
));
// Creates an operation to update the campaign with the specified field.
$campaignOperation = new CampaignOperation();
$campaignOperation->setUpdate($campaign);
$campaignOperation->setUpdateMask($fieldMask);
'잘못된' 정의된 필드에서 코드가 제대로 작동하지
Google Ads API protocol buffers
에서 optional
으로 표현합니다. 그러나
target_cpa_micros
드림
optional
입력란이 아닙니다. '잘못됨' 코드를 실행하지 않는
입찰 전략을 사용하여 target_cpa
필드를 지웁니다.