W interfejsie Google Ads API aktualizacje są przeprowadzane przy użyciu maski pola. Maska pola zawiera listę wszystkich pól, które chcesz zmienić w ramach aktualizacji. Wszelkie określone pola, które nie znajdują się w masce pola, zostaną zignorowane, nawet jeśli zostaną wysłane na serwer.
FieldMaskUtil
Zalecamy generowanie masek pól za pomocą naszego wbudowanego narzędzia do tworzenia masek pól, które umożliwia generowanie masek pól ze zmodyfikowanego obiektu zamiast tworzenia ich od zera.
Oto przykład aktualizacji kampanii:
// Update campaign by setting its status to paused, and "Search network" to false.
Campaign campaignToUpdate = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
Status = CampaignStatus.Paused,
NetworkSettings = new NetworkSettings()
{
TargetSearchNetwork = false
}
};
// Create the operation.
CampaignOperation operation = new CampaignOperation()
{
Update = campaignToUpdate,
UpdateMask = FieldMasks.AllSetFieldsOf(campaignToUpdate)
};
// Update the campaign.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
customerId.ToString(), new CampaignOperation[] { operation });
Najpierw tworzymy pusty obiekt Campaign
. Następnie ustawiamy jego nazwę zasobu, aby interfejs API dokładnie wiedział, którą kampanię aktualizujemy.
W przykładzie użyto metody FieldMasks.AllSetFieldsOf
w kampanii, aby automatycznie utworzyć maskę pola wyliczającą wszystkie ustawione pola. Następnie możesz przekazać zwróconą maskę bezpośrednio do wywołania aktualizacji.
Czasami może być konieczne zmodyfikowanie istniejącego obiektu i zaktualizowanie kilku pól. W takich przypadkach zmodyfikuj kod w ten sposób:
Campaign existingCampaign;
// Obtain existingCampaign from elsewhere.
...
// Create a new campaign based off the existing campaign for update.
Campaign campaignToUpdate = new Campaign(existingCampaign);
// Update campaign by setting its status to paused, and "Search network" to
// false.
campaignToUpdate.Status = CampaignStatus.Paused;
campaignToUpdate.NetworkSettings = new NetworkSettings()
{
TargetSearchNetwork = false
}
// Create the operation.
CampaignOperation operation = new CampaignOperation()
{
Update = campaignToUpdate,
UpdateMask = FieldMasks.FromChanges(existingCampaign, campaignToUpdate)
};
Aby utworzyć maskę pola od zera, najpierw utwórz obiekt FieldMask
, a następnie utwórz tablicę zawierającą nazwy wszystkich pól, które chcesz zmienić, i na koniec dołącz zawartość tablicy do pola Path
maski pola.
FieldMask fieldMask = new FieldMask();
fieldMask.Paths.AddRange(new string[] { "status", "name" });
Aktualizowanie pól wiadomości i ich pól podrzędnych
Pola MESSAGE
mogą mieć pola podrzędne (np. MaximizeConversions
, które ma 3 pola: target_cpa_micros
, cpc_bid_ceiling_micros
i cpc_bid_floor_micros
) lub nie mieć ich wcale (np. ManualCpm
).
Pola wiadomości bez zdefiniowanych podpól
Podczas aktualizowania pola MESSAGE
, które nie jest zdefiniowane za pomocą żadnych pól podrzędnych, użyj FieldMasks
, aby wygenerować maskę pola, jak opisano powyżej.
Pola wiadomości ze zdefiniowanymi podpola
Podczas aktualizowania pola MESSAGE
zdefiniowanego za pomocą pól podrzędnych bez wyraźnego ustawiania żadnego z tych pól w wiadomości musisz ręcznie dodać każde z zmiennych pól podrzędnych MESSAGE
do FieldMask
, podobnie jak w przykładzie powyżej, w którym maska pola jest tworzona od zera.
Jednym z częstych przykładów jest aktualizacja strategii ustalania stawek w kampanii bez ustawiania żadnych pól w nowej strategii ustalania stawek. Poniższy przykład pokazuje, jak zaktualizować kampanię, aby korzystała ze strategii ustalania stawek MaximizeConversions
bez ustawiania żadnych pól podrzędnych w tej strategii.
W takim przypadku użycie metod AllSetFieldsOf()
i FromChanges()
w FieldMasks
nie przyniesie zamierzonego efektu.
W tym przykładzie generowana jest maska pola, która zawiera maximize_conversions
. Interfejs Google Ads API nie zezwala jednak na takie działanie, aby zapobiec przypadkowemu czyszczeniu pól, i wyświetla błąd FieldMaskError.FIELD_HAS_SUBFIELDS
.
// Creates a campaign with the proper resource name and an empty
// MaximizeConversions field.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
MaximizeConversions = 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 operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = 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.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
customerId.ToString(), new CampaignOperation[] { operation });
Poniższy przykład pokazuje, jak prawidłowo zaktualizować kampanię, aby korzystała ze strategii ustalania stawek MaximizeConversions
bez ustawiania żadnych jej pól podrzędnych.
// Creates a Campaign object with the proper resource name.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
};
// Creates a field mask from the existing campaign and adds all of the fields
// on the MaximizeConversions bidding strategy to the field mask. Because these
// fields are 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 with none of its subfields set.
FieldMask 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.Paths.AddRange(new string[] {
"maximize_conversions.target_cpa_micros",
});
// Creates an operation to update the campaign with the specified fields.
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = fieldMask
};
Czyszczenie pól
Niektóre pola można wyczyścić w sposób jawny. Podobnie jak w przykładzie powyżej musisz jawnie dodać te pola do maski pola. Załóżmy na przykład, że masz kampanię, która korzysta ze strategii ustalania stawek MaximizeConversions
, a pole target_cpa_micros
ma wartość większą niż 0.
Poniższy kod zostanie uruchomiony, ale maximize_conversions.target_cpa_micros
nie zostanie dodany do maski pola, więc w polu target_cpa_micros
nie zostaną wprowadzone żadne zmiany:
// Creates a campaign with the proper resource name and a MaximizeConversions
// object with target_cpa_micros set to 0.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
MaximizeConversions = new MaximizeConversions()
{
TargetCpaMicros = 0
}
};
// 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 operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = 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.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
customerId.ToString(), new CampaignOperation[] { operation });
W przykładzie poniżej pokazujemy, jak prawidłowo wyczyścić pole target_cpa_micros
w MaximizeConversions
strategii ustalania stawek.
// Creates a Campaign object with the proper resource name.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(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 fieldMask = FieldMasks.AllSetFieldsOf(campaign);
fieldMask.Paths.AddRange(new string[] {
"maximize_conversions.target_cpa_micros",
});
// Creates an operation to update the campaign with the specified field.
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = fieldMask
};
Pamiętaj, że powyższy przykład „nieprawidłowy” działa zgodnie z przeznaczeniem w przypadku pól zdefiniowanych jako optional
w interfejsie Google Ads APIprotocol buffers
.
Jednak ponieważ
target_cpa_micros
nie jest polem optional
, przykład „nieprawidłowy” nie aktualizuje strategii ustalania stawek, aby wyczyścić pole target_cpa
.