필드 마스크

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가 어떤 캠페인이 실행되고 있는지 알 수 있도록 합니다. 이(가) 업데이트되었습니다. statusPAUSED로 설정됩니다.

그런 다음 코드는 CampaignOperation 객체를 만들고 이전 캠페인을 만들었습니다. 그런 다음 FieldMasks::allSetFieldsOf() 드림 변경된 모든 필드를 사용하여 캠페인에 대한 필드 마스크를 만듭니다. 마지막으로 는 반환된 마스크를 캠페인 작업 객체에 전달합니다.

참고: FieldMasks::allSetFieldsOfFieldMasks::compare() 전달된 객체를 동일한 클래스의 빈 객체와 비교합니다. 대상 예를 들어 이전 코드에서는 allSetFieldsOf() 대신 FieldMasks::compare(new Campaign(), $campaign)를 사용할 수 있습니다.

메시지 필드 및 하위 필드 업데이트

MESSAGE 필드에는 하위 필드 (예: 다음 세 가지를 포함하는 MaximizeConversions: target_cpa_micros, cpc_bid_ceiling_microscpc_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 필드를 지웁니다.