Dynamisches Remarketing

Dynamische Remarketing-Anzeigen sind Anzeigen im Displaynetzwerk, die für jede Impression angepasst sind. Sie zeigen Produkte, die mit früheren Besuchen eines Nutzers auf der Website des Werbetreibenden zusammenhängen. Mit der AdWords API können Sie die Feeds, FeedMappings und FeedItems verwalten, die Ihre dynamischen Remarketing-Anzeigen im Displaynetzwerk steuern. In diesem Leitfaden werden zwei Beispiele behandelt, die Feeds zum Aktualisieren von dynamischen Remarketing-Anzeigen verwenden.

Voraussetzungen

In diesem Leitfaden wird angenommen, dass Sie die Feeds für dynamische Remarketing-Anzeigen im Displaynetzwerk bereits über die AdWords-Benutzeroberfläche eingerichtet haben und über die entsprechenden Feed-IDs verfügen.

Alternatively, you could use the API to create a Feed, FeedMapping, and FeedItems for use with your Dynamic Remarketing ads. Auf der Seite mit Feedplatzhaltern finden Sie eine Liste der erforderlichen Attribute und Platzhalterfeld-IDs für alle Remarketing-Feedtypen.

Anwendungsfall 1: Immobilienangebote hinzufügen und entfernen

Angenommen, Sie verwenden dynamische Remarketing-Anzeigen für Ihre Immobilienwebsite. Neue Objekte werden zum Bestand hinzugefügt, verkaufte Objekte werden entfernt. Das Ziel besteht darin, die dynamischen Remarketing-Anzeigen so zu aktualisieren, dass stets der aktuelle Bestand widergespiegelt wird.

Schritt 1: Informationen zur Angebotskonfiguration abrufen

Um Ihre Immobilienangebote zu verwalten, müssen Sie das FeedMapping Ihres Feed und den Platzhaltertyp der Immobilienbranche abrufen. Aus dem FeedMapping geht das FeedAttribute in Ihrem Feed hervor, das den einzelnen Platzhalterfeldern entspricht. Im Beispiel unten ist eine Methode definiert, die das FeedMapping abruft und eine Zuordnungstabelle von Platzhalter-fieldId-Schlüsseln zu feedAttributeId-Werten generiert.

/**
 * Returns a map from placeholder field ID to feed attribute ID for the given
 * combination of feed ID and placeholder type.
 */
public static Map<Integer, Long> getPlaceholderToAttributeMap(Long feedId,
    Integer placeholderType, AdWordsSession session, AdWordsServices adWordsServices)
    throws ApiException, RemoteException {
  Selector selector = new SelectorBuilder()
    .fields("AttributeFieldMappings")
    .equals("FeedId", feedId.toString())
    .equals("Status", FeedMappingStatus.ENABLED.getValue())
    .equals("PlaceholderType", placeholderType.toString())
    .build();

  // Get the FeedMappingService.
  FeedMappingServiceInterface feedMappingService =
    adWordsServices.get(session, FeedMappingServiceInterface.class);

  // Submit the 'get' request.
  FeedMapping feedMapping = feedMappingService.get(selector).getEntries(0);

  // Build a map from placeholder field ID to feed attribute ID from the FeedMapping.
  Map<Integer, Long> fieldMap = Maps.newHashMap();
  for(AttributeFieldMapping attributeFieldMapping :
      feedMapping.getAttributeFieldMappings()) {
    fieldMap.put(attributeFieldMapping.getFieldId(),
        attributeFieldMapping.getFeedAttributeId());
  }
  return fieldMap;
}

Schritt 2: Vorgänge zum Hinzufügen der neuen Objekte erstellen

Nun, da die Hilfsmethode von oben vorhanden ist, ist das Erstellen der Vorgänge zum Hinzufügen neuer Objekte einfach. Die grundlegenden Schritte für jedes neue Objekt sind wie folgt:

  1. Rufen Sie mit der Hilfsmethode die Zuordnung der Platzhalterfeld-ID zur Feedattribut-ID ab.
  2. Erstellen Sie für jedes Attribut des Objekts (Objekt-ID, Objektname, Bild-URL usw.) einen FeedItemAttributeValue, dessen feedAttributeId auf die ID festgelegt ist, die in der Zuordnung des entsprechenden Platzhalterfelds gefunden wird.
  3. Legen Sie für FeedItemAttributeValue das dem Platzhalterfeld des Attributs entsprechende Value-Feld fest. Verwenden Sie beispielsweise für die Objekt-ID das Feld stringValue, da das Feld LISTING_ID den Datentyp STRING hat.
  4. Nachdem alle FeedItemAttributeValues festgelegt sind, erstellen Sie ein neues FeedItem und setzen seine feedId auf die ID Ihres Feeds und seine attributeValues auf die Sammlung der FeedItemAttributeValues.
  5. Erstellen Sie eine neue FeedItemOperation, in der der Operator auf ADD und der Operand auf das FeedItem festgelegt sind.
Long feedId = Long.valueOf("INSERT_FEED_ID_HERE");

List<FeedItemOperation> newFeedItemOperations = Lists.newArrayList();

// First, get the mapping from placeholder field ID to feed attribute ID.
// Note that 16 is the placeholder type ID for the Real Estate vertical.
Map<Integer, Long> fieldMap = getPlaceholderToAttributeMap(feedId,
  16, session, adWordsServices);

FeedItemAttributeValue listingId = new FeedItemAttributeValue();
listingId.setFeedAttributeId(fieldMap.get(1));
listingId.setStringValue("ABC123DEF");

FeedItemAttributeValue listingName = new FeedItemAttributeValue();
listingName.setFeedAttributeId(fieldMap.get(2));
listingName.setStringValue("Two bedroom with magnificent views");

FeedItemAttributeValue finalUrl = new FeedItemAttributeValue();
finalUrl.setFeedAttributeId(fieldMap.get(12));
finalUrl.setStringValues(new String[] {"http://www.example.com/listings/"});

// Insert additional attributes here, such as address, city, description, etc.

FeedItemAttributeValue imageUrl = new FeedItemAttributeValue();
imageUrl.setFeedAttributeId(fieldMap.get(8));
imageUrl.setStringValue("http://www.example.com/listings/images?listing_id=ABC123DEF");

FeedItemAttributeValue contextualKeywords = new FeedItemAttributeValue();
contextualKeywords.setFeedAttributeId(fieldMap.get(11));
contextualKeywords.setStringValues(
    new String[] {"beach community", "ocean view", "two bedroom"});

// Create the FeedItem, specifying the Feed ID and the attributes created above.
FeedItem feedItem = new FeedItem();
feedItem.setFeedId(feedId);
feedItem.setAttributeValues(new FeedItemAttributeValue[]{
    listingId,
    listingName,
    finalUrl,
    // Include additional attributes...
    imageUrl,
    contextualKeywords});

// Create an operation to add each FeedItem.
FeedItemOperation feedItemOperation = new FeedItemOperation();
feedItemOperation.setOperator(Operator.ADD);
feedItemOperation.setOperand(feedItem);
newFeedItemOperations.add(feedItemOperation);

// Repeat the above for additional new listings.

Schritt 3: Vorgänge zum Entfernen verkaufter Objekte erstellen

Der Vorgang zum Entfernen verkaufter Objekte ist noch einfacher. Sie benötigen lediglich die feedId und die feedItemId jedes verkauften Objekts.

Tipp: Wenn die feedItemId verkaufter Objekte nicht bekannt ist, können Sie mit FeedItemService.get die FeedItems abrufen, die feedItemIds enthalten.

Die grundlegenden Schritte für jedes Objekt, das Sie entfernen möchten, sind wie folgt:

  1. Erstellen Sie ein neues FeedItem und legen Sie seine feedID auf die ID Ihres Feeds und seine FeedItemId auf die Element-ID des Objekts fest.
  2. Erstellen Sie eine neue FeedItemOperation, in der der Operator auf REMOVE und der Operand auf das FeedItem festgelegt sind.
Long feedId = Long.valueOf("INSERT_FEED_ID_HERE");

List<Long> feedItemIds = Lists.newArrayList(
    // feed item ID 1,
    // feed item ID 2,
    // ...
    );

List<FeedItemOperation> removeFeedItemOperations = Lists.newArrayList();
for(Long feedItemId : feedItemIds) {
  // When removing you can simply specify the feedId and the feedItemId.
  FeedItem feedItemToRemove = new FeedItem();

  feedItemToRemove.setFeedId(feedId);
  feedItemToRemove.setFeedItemId(feedItemId);

  FeedItemOperation removeOperation = new FeedItemOperation();
  removeOperation.setOperator(Operator.REMOVE);
  removeOperation.setOperand(feedItemToRemove);

  removeFeedItemOperations.add(removeOperation);
}

Schritt 4: Vorgänge zum Hinzufügen und Entfernen senden

Dieser Schritt entspricht allen anderen mutate-Vorgängen in der API. Um die Änderungen anzuwenden, müssen Sie lediglich die Kombination der zwei oben erstellten FeedItemOperation-Sammlungen an FeedItemService.mutate übergeben.

// Get the FeedItemService
FeedItemServiceInterface feedItemService =
    adWordsServices.get(session, FeedItemServiceInterface.class);

// Combine the lists of operations.
List<FeedItemOperation> allOperations = Lists.newArrayList(newFeedItemOperations);
allOperations.addAll(removeFeedItemOperations);

// Pass the collection of FeedItemOperations to the mutate method.
FeedItemReturnValue itemsUpdateReturnValue =
    feedItemService.mutate(allOperations.toArray(new FeedItemOperation[allOperations.size()]));

System.out.printf("Updated %d items%n", itemsUpdateReturnValue.getValue().length);

Anwendungsfall 2: Flugpreise aktualisieren

Angenommen, Sie betreiben eine Website für Flugbuchungen, für die dynamische Remarketing-Anzeigen eingerichtet sind. Sie möchten nun den Verkaufspreis einiger Flüge aktualisieren und den Verkaufspreis bei anderen entfernen. Um sicherzustellen, dass in den Anzeigen für jeden Flug die richtigen Preise angezeigt werden, möchten Sie den Preis für das FeedItem jedes Flugs aktualisieren.

Schritt 1: Vorgänge zum Aktualisieren der Verkaufspreise erstellen

Die Vorgehensweise ist ähnlich wie beim Erstellen neuer FeedItems. Allerdings können Sie nur den zu ändernden FeedItemAttributeValue angeben. Die Platzhalterfeld-IDs stammen aus der Liste der Felder für die Flugbranche.

Die grundlegenden Schritte für jeden zu ändernden Flugeintrag sind wie folgt:

  1. Rufen Sie mit der Hilfsmethode die Zuordnung der Platzhalterfeld-ID zur Feedattribut-ID ab.
  2. Erstellen Sie für jedes Attribut des Flugs (Verkaufspreis, Flugpreis usw.) einen FeedItemAttributeValue, dessen feedAttributeId auf die ID festgelegt ist, die in der Zuordnung des entsprechenden Platzhalterfelds gefunden wird.
  3. Legen Sie für FeedItemAttributeValue das dem Platzhalterfeld des Attributs entsprechende Value-Feld fest.
  4. Nachdem alle FeedItemAttributeValues festgelegt sind, erstellen Sie ein neues FeedItem und legen seine feedId auf die ID Ihres Feeds, seine feedItemId auf die ID der Feedelement-ID des Flugs und seine attributeValues auf die Sammlung der FeedItemAttributeValues fest.
  5. Erstellen Sie eine neue FeedItemOperation, in der der Operator auf SET und der Operand auf das FeedItem festgelegt sind.
Long feedId = Long.valueOf("INSERT_FEED_ID_HERE");

List<FeedItemOperation> updateFeedItemOperations = Lists.newArrayList();

// First, get the mapping from placeholder field ID to feed attribute ID.
// Note that 13 is the placeholder type ID for the Flights vertical.
Map<Integer, Long> fieldMap = getPlaceholderToAttributeMap(feedId,
  13, session, adWordsServices);

// Update the sale price on the first flight
Long newSalePriceFeedItemId = Long.valueOf("INSERT_FEED_ITEM_ID");
FeedItemAttributeValue salePrice = new FeedItemAttributeValue();
salePrice.setFeedAttributeId(fieldMap.get(12));
salePrice.setStringValue("1,309.89 USD");

FeedItem feedItemForNewSalePrice = new FeedItem();
feedItemForNewSalePrice.setFeedId(feedId);
feedItemForNewSalePrice.setFeedItemId(newSalePriceFeedItemId);
feedItemForNewSalePrice.setAttributeValues(new FeedItemAttributeValue[] {salePrice});

// Clear the sale price on the second flight, and update its regular price
Long removedSalePriceFeedItemId = Long.valueOf("INSERT_FEED_ITEM_ID");
FeedItemAttributeValue removedSalePrice = new FeedItemAttributeValue();
removedSalePrice.setFeedAttributeId(fieldMap.get(12));

FeedItemAttributeValue newFlightPrice = new FeedItemAttributeValue();
newFlightPrice.setFeedAttributeId(fieldMap.get(6));
newFlightPrice.setStringValue("499.99 USD");

FeedItem feedItemForRemovedSalePrice = new FeedItem();
feedItemForRemovedSalePrice.setFeedId(feedId);
feedItemForRemovedSalePrice.setFeedItemId(removedSalePriceFeedItemId);
feedItemForRemovedSalePrice.setAttributeValues(
    new FeedItemAttributeValue[] {removedSalePrice, newFlightPrice});

// Create the FeedItemOperations to update the FeedItems.
for(FeedItem feedItemToUpdate : new FeedItem[]{ feedItemForNewSalePrice,
                                                feedItemForRemovedSalePrice}) {
  FeedItemOperation updateFeedItemOperation = new FeedItemOperation();
  updateFeedItemOperation.setOperator(Operator.SET);
  updateFeedItemOperation.setOperand(feedItemToUpdate);

  updateFeedItemOperations.add(updateFeedItemOperation);
}

Schritt 2: Aktualisierungsvorgänge senden

Um die Änderungen tatsächlich anzuwenden, müssen Sie wie in den Vorgängen zum Hinzufügen und Entfernen lediglich die Kombination der zwei oben erstellten FeedItemOperation-Sammlungen an FeedItemService.mutate übergeben.

Berichte

Sie verwenden zum Erfassen von Leistungsstatistiken für Ihre dynamischen Remarketing-Anzeigen dieselben Berichte wie für jede andere Kampagne im Displaynetzwerk.

Weitere Informationen

In diesem Leitfaden wurden Beispiele für Immobilien und Flüge behandelt. Wenn Ihre dynamischen Remarketing-Anzeigen auf eine andere Branche ausgerichtet sind, finden Sie die entsprechenden Platzhaltertyp-IDs und Platzhalterfeld-IDs in der vollständigen Liste der Platzhaltertypen für dynamisches Remarketing.

Feedback geben zu...