Conversions hochladen

In diesem Leitfaden erfahren Sie, wie Sie Offline-Conversions mithilfe des Campaign Manager 360-Dienstes Conversions hochladen. Bevor Sie fortfahren, sollten Sie die Übersicht lesen, um eine Einführung in Offline-Conversions zu erhalten und sich mit den in diesem Leitfaden beschriebenen Konzepten vertraut zu machen.

Conversion-Ressourcen konfigurieren

Im ersten Schritt des Conversion-Uploads müssen Sie ein oder mehrere Conversion-Ressourcenobjekte erstellen. Jedes dieser Objekte steht für ein einzelnes Conversion-Ereignis und enthält einige Pflichtfelder.

Feld Beschreibung
floodlightActivityId Die Floodlight-Aktivität, mit der diese Conversion verknüpft wird.
floodlightConfigurationId Die von der angegebenen Aktivität verwendete Floodlight-Konfiguration.
ordinal Ein Wert, mit dem gesteuert wird, wie Conversions am selben Tag von einem Gerät oder Nutzer aus dedupliziert werden Weitere Informationen finden Sie in den FAQs.
timestampMicros Der Zeitstempel der Conversion in Mikrosekunden seit der Unix-Epoche.

Außerdem muss jedes Objekt eines der folgenden Felder enthalten:

Feld Beschreibung
encryptedUserId Eine einzelne verschlüsselte Nutzer-ID, die aus dem %m-Übereinstimmungsmakro oder aus der Datenübertragung abgerufen wird.
encryptedUserIdCandidates[] Eine Liste der verschlüsselten Nutzer-IDs, die aus dem %m-Übereinstimmungsmakro oder aus der Datenübertragung abgerufen werden. Die erste dieser IDs mit einer aufgezeichneten Floodlight-Präsenz vor dem angegebenen timestampMicros wird verwendet. Wenn keine der IDs mit einem vorhandenen Kontakt übereinstimmt, wird ein Fehler ausgegeben.
dclid Eine Display Click Identifier, die in Campaign Manager 360 oder Display & Video 360 generiert wurde.
gclid Eine Google Click Identifier, die von Google Ads oder Search Ads 360 generiert wird.
matchId Eine eindeutige vom Werbetreibenden erstellte Kennung, die über ein Floodlight-Tag an Campaign Manager 360 übergeben wird.
mobileDeviceId Eine unverschlüsselte mobile ID im IDFA- oder AdID-Format oder eine IDFA (Identifier for Connected TV for Advertising) von einer unterstützten CTV-Geräteplattform (Roku, Fire TV, Android TV, Apple TV, Xbox, Samsung oder Vizio). Google unterstützt keine IFAs für YouTube auf internetfähigen Fernsehern.

Optionale Felder sind in der Referenzdokumentation dokumentiert. Das Feld für die Menge ist zwar optional, muss aber mindestens 1 sein, damit die Conversion bei der Erstellung von Berichten auf bestimmte Messwerte (z. B. „Conversions insgesamt“) angerechnet wird.

Im folgenden Beispiel wird ein einfaches Conversion-Ressourcenobjekt erstellt:

C#

// Generate a timestamp in milliseconds since Unix epoch.
TimeSpan timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1);
long currentTimeInMilliseconds = (long) timeSpan.TotalMilliseconds;

// Find the Floodlight configuration ID based on the provided activity ID.
FloodlightActivity floodlightActivity =
    service.FloodlightActivities.Get(profileId, floodlightActivityId).Execute();
long floodlightConfigurationId = (long) floodlightActivity.FloodlightConfigurationId;

// Create the conversion.
Conversion conversion = new Conversion();
conversion.EncryptedUserId = conversionUserId;
conversion.FloodlightActivityId = floodlightActivityId;
conversion.FloodlightConfigurationId = floodlightConfigurationId;
conversion.Ordinal = currentTimeInMilliseconds.ToString();
conversion.TimestampMicros = currentTimeInMilliseconds * 1000;

Java

long currentTimeInMilliseconds = System.currentTimeMillis();

// Find Floodlight configuration ID based on the provided activity ID.
FloodlightActivity floodlightActivity = reporting.floodlightActivities()
    .get(profileId, floodlightActivityId).execute();
long floodlightConfigurationId = floodlightActivity.getFloodlightConfigurationId();

Conversion conversion = new Conversion();
conversion.setEncryptedUserId(encryptedUserId);
conversion.setFloodlightActivityId(floodlightActivityId);
conversion.setFloodlightConfigurationId(floodlightConfigurationId);
conversion.setOrdinal(String.valueOf(currentTimeInMilliseconds));
conversion.setTimestampMicros(currentTimeInMilliseconds * 1000);

PHP

$currentTimeInMicros = time() * 1000 * 1000;

// Find Floodlight configuration ID based on provided activity ID.
$activity = $this->service->floodlightActivities->get(
    $values['user_profile_id'],
    $values['floodlight_activity_id']
);
$floodlightConfigId = $activity->getFloodlightConfigurationId();

$conversion = new Google_Service_Dfareporting_Conversion();
$conversion->setEncryptedUserId($values['encrypted_user_id']);
$conversion->setFloodlightActivityId($values['floodlight_activity_id']);
$conversion->setFloodlightConfigurationId($floodlightConfigId);
$conversion->setOrdinal($currentTimeInMicros);
$conversion->setTimestampMicros($currentTimeInMicros);

Python

# Look up the Floodlight configuration ID based on activity ID.
floodlight_activity = service.floodlightActivities().get(
    profileId=profile_id, id=floodlight_activity_id).execute()
floodlight_config_id = floodlight_activity['floodlightConfigurationId']

current_time_in_micros = int(time.time() * 1000000)

# Construct the conversion.
conversion = {
    'encryptedUserId': encrypted_user_id,
    'floodlightActivityId': floodlight_activity_id,
    'floodlightConfigurationId': floodlight_config_id,
    'ordinal': current_time_in_micros,
    'timestampMicros': current_time_in_micros
}

Ruby

# Look up the Floodlight configuration ID based on activity ID.
floodlight_activity = service.get_floodlight_activity(profile_id,
  floodlight_activity_id)
floodlight_config_id = floodlight_activity.floodlight_configuration_id

current_time_in_micros = DateTime.now.strftime('%Q').to_i * 1000

# Construct the conversion.
conversion = DfareportingUtils::API_NAMESPACE::Conversion.new(
  encrypted_user_id: encrypted_user_id,
  floodlight_activity_id: floodlight_activity_id,
  floodlight_configuration_id: floodlight_config_id,
  ordinal: current_time_in_micros,
  timestamp_micros: current_time_in_micros
)

Verschlüsselungsinformationen angeben

Wenn Sie verschlüsselte Nutzer-IDs Offline-Conversions zuordnen möchten, müssen Sie wie im vorherigen Beispiel einige Details angeben, wie sie bei Ihrer Einfügeanfrage verschlüsselt werden. Sie benötigen insbesondere diese Informationen:

  1. Die Verschlüsselungsquelle, die beschreibt, woher ein Batch verschlüsselter IDs stammt. Zulässige Werte sind AD_SERVING für IDs, die aus dem Übereinstimmungs-Makro %m stammen, und DATA_TRANSFER, um IDs aus Datenübertragungsdateien zu beziehen.

  2. Die Verschlüsselungsentität, eine eindeutige Gruppe von Werten, die zum Verschlüsseln von Nutzer-IDs verwendet werden. Diese Werte beziehen sich normalerweise auf ein Campaign Manager 360-Konto, wenn die Quelle die Datenübertragung ist, oder auf einen Campaign Manager 360-Werbetreibenden, wenn die Quelle das Makro %m ist. Dies ist jedoch nicht immer der Fall. Wenn Sie sich nicht sicher sind, wenden Sie sich an Ihren Campaign Manager 360-Kundenbetreuer oder an den Campaign Manager 360-Support.

Das zweite EncryptionInfo-Objekt, das diese Werte angibt, ist der zweite Schritt im Conversion-Upload:

C#

// Create the encryption info.
EncryptionInfo encryptionInfo = new EncryptionInfo();
encryptionInfo.EncryptionEntityId = encryptionEntityId;
encryptionInfo.EncryptionEntityType = encryptionEntityType;
encryptionInfo.EncryptionSource = encryptionSource;

Java

// Create the encryption info.
EncryptionInfo encryptionInfo = new EncryptionInfo();
encryptionInfo.setEncryptionEntityId(encryptionEntityId);
encryptionInfo.setEncryptionEntityType(encryptionEntityType);
encryptionInfo.setEncryptionSource(encryptionSource);

PHP

$encryptionInfo = new Google_Service_Dfareporting_EncryptionInfo();
$encryptionInfo->setEncryptionEntityId($values['encryption_entity_id']);
$encryptionInfo->setEncryptionEntityType($values['encryption_entity_type']);
$encryptionInfo->setEncryptionSource($values['encryption_source']);

Python

# Construct the encryption info.
encryption_info = {
    'encryptionEntityId': encryption_entity_id,
    'encryptionEntityType': encryption_entity_type,
    'encryptionSource': encryption_source
}

Ruby

# Construct the encryption info.
encryption_info = DfareportingUtils::API_NAMESPACE::EncryptionInfo.new(
  encryption_entity_id: encryption[:entity_id],
  encryption_entity_type: encryption[:entity_type],
  encryption_source: encryption[:source]
)

Jede Einfügeanfrage darf nur ein EncryptionInfo-Objekt enthalten. Das bedeutet, dass alle in einer bestimmten Anfrage enthaltenen Conversions aus derselben Quelle stammen und dieselbe Verschlüsselungsentität verwenden müssen.

Insert-Anfrage generieren

Im letzten Schritt laden Sie Ihre Conversions mit einem Aufruf an batchinsert hoch. Bei dieser Methode wird ein ConversionsBatchInsertRequest-Objekt akzeptiert, das die hochzuladenden Conversions zusammen mit den zugehörigen Verschlüsselungsinformationen kombiniert (sofern erforderlich):

C#

// Insert the conversion.
ConversionsBatchInsertRequest request = new ConversionsBatchInsertRequest();
request.Conversions = new List<Conversion>() { conversion };
request.EncryptionInfo = encryptionInfo;

ConversionsBatchInsertResponse response =
    service.Conversions.Batchinsert(request, profileId).Execute();

Java

ConversionsBatchInsertRequest request = new ConversionsBatchInsertRequest();
request.setConversions(ImmutableList.of(conversion));
request.setEncryptionInfo(encryptionInfo);

ConversionsBatchInsertResponse response = reporting.conversions()
    .batchinsert(profileId, request).execute();

PHP

$batch = new Google_Service_Dfareporting_ConversionsBatchInsertRequest();
$batch->setConversions([$conversion]);
$batch->setEncryptionInfo($encryptionInfo);

$result = $this->service->conversions->batchinsert(
    $values['user_profile_id'],
    $batch
);

Python

# Insert the conversion.
request_body = {
    'conversions': [conversion],
    'encryptionInfo': encryption_info
}
request = service.conversions().batchinsert(profileId=profile_id,
                                            body=request_body)
response = request.execute()

Ruby

# Construct the batch insert request.
batch_insert_request =
  DfareportingUtils::API_NAMESPACE::ConversionsBatchInsertRequest.new(
    conversions: [conversion],
    encryption_info: encryption_info
  )

# Insert the conversion.
result = service.batchinsert_conversion(profile_id, batch_insert_request)

In Campaign Manager 360 wird versucht, jede Conversion auf Best-Effort-Basis in die Anfrage einzufügen, anstatt den gesamten Batch als „Alles oder nichts“-Transaktion einzufügen. Wenn einige Conversions in einem Batch nicht eingefügt werden können, können andere trotzdem erfolgreich eingefügt werden. Es wird daher empfohlen, den zurückgegebenen ConversionsBatchInsertResponse zu prüfen, um den Status der einzelnen Conversions zu ermitteln:

C#

// Handle the batchinsert response.
if (!response.HasFailures.Value) {
  Console.WriteLine("Successfully inserted conversion for encrypted user ID {0}.",
      conversionUserId);
} else {
  Console.WriteLine("Error(s) inserting conversion for encrypted user ID {0}:",
      conversionUserId);

  ConversionStatus status = response.Status[0];
  foreach(ConversionError error in status.Errors) {
    Console.WriteLine("\t[{0}]: {1}", error.Code, error.Message);
  }
}

Java

if (!response.getHasFailures()) {
  System.out.printf("Successfully inserted conversion for encrypted user ID %s.%n",
      encryptedUserId);
} else {
  System.out.printf("Error(s) inserting conversion for encrypted user ID %s:%n",
      encryptedUserId);

  // Retrieve the conversion status and report any errors found. If multiple conversions
  // were included in the original request, the response would contain a status for each.
  ConversionStatus status = response.getStatus().get(0);
  for (ConversionError error : status.getErrors()) {
    System.out.printf("\t[%s]: %s.%n", error.getCode(), error.getMessage());
  }
}

PHP

if (!$result->getHasFailures()) {
    printf(
        'Successfully inserted conversion for encrypted user ID %s.',
        $values['encrypted_user_id']
    );
} else {
    printf(
        'Error(s) inserting conversion for encrypted user ID %s:<br><br>',
        $values['encrypted_user_id']
    );

    $status = $result->getStatus()[0];
    foreach ($status->getErrors() as $error) {
        printf('[%s] %s<br>', $error->getCode(), $error->getMessage());
    }
}

Python

if not response['hasFailures']:
  print ('Successfully inserted conversion for encrypted user ID %s.'
         % encrypted_user_id)
else:
  print ('Error(s) inserting conversion for encrypted user ID %s.'
         % encrypted_user_id)

  status = response['status'][0]
  for error in status['errors']:
    print '\t[%s]: %s' % (error['code'], error['message'])

Ruby

if result.has_failures
  puts format('Error(s) inserting conversion for encrypted user ID %s.',
    encrypted_user_id)

  status = result.status[0]
  status.errors.each do |error|
    puts format("\t[%s]: %s", error.code, error.message)
  end
else
  puts format('Successfully inserted conversion for encrypted user ID %s.',
    encrypted_user_id)
end

Das Feld status der Antwort (siehe oben) enthält für jede in der ursprünglichen Anfrage enthaltene Conversion ein ConversionStatus-Objekt. Wenn Sie nur an Conversions interessiert sind, die nicht eingefügt werden konnten, lässt sich mit dem Feld hasFailures schnell feststellen, ob eine Conversion im bereitgestellten Batch fehlgeschlagen ist.

Prüfen, ob Conversions verarbeitet wurden

Hochgeladene Conversions werden in der Regel verarbeitet und sind innerhalb von 24 Stunden in Berichten verfügbar. Mit einem Bericht zu Floodlight-Impressionen können Sie überprüfen, ob die hochgeladenen Conversions verarbeitet wurden. Im Gegensatz zu anderen Attributionsberichten geben sie standardmäßig sowohl zugeordnete (mit einer Anzeige verknüpfte) als auch nicht zugeordnete Conversions zurück. Dadurch können Sie schnell prüfen, ob die von Ihnen gesendeten Conversions in Campaign Manager 360 erfolgt sind.