Integration via Adjust With CriteoPlugin

Overview

About this Guide

This document provides detailed information on the following:

  • Recommended events and parameters
  • Deep link implementation
  • Testing requirements

The recommendation is to send all events that describe the “user-flow” in the app. The table below shows the recommended events per vertical :

Event Name Description Retail Travel Classified Gaming Streaming Entertainment Finance Dating Social RideHailing
app open/app launch when user install the app Y Y Y Y Y Y Y Y
home page / App open when user opens the app or arrives on the home page Y Y Y Y Y Y Y Y
view item list / listing when a user sees list of items/products/offering Y Y Y Y Y
view item when a user sees one specific item/products/offering Y Y Y Y Y Y
add to cart when a user adds a item/product to the cart Y Y
basket when user is on the basket page Y Y
purchase when user makes a purchase Y Y Y Y Y Y
add to wish list when a user adds a item/product to the wish list Y Y
complete registration / create an account / sign up when a user creates an account, signs up or completes registration Y Y Y Y Y Y Y Y
login when a user login Y Y Y Y Y Y Y Y
add payment info when a user adds payment info Y Y Y Y
begin checkout when a user starts the purchase flow Y Y Y
purchase cancelled / purchase refund when a user cancels a purchase or ask for a refund Y Y Y
generate lead when a user generates a lead : asks for contact details / sends a message (classified / jobs app, Education, Local Deals, Real Estate) Y
start trial when a user starts the trial version of the app Y Y Y Y
subscribe when a user subscribes (recurring payment) Y (subscribe to a prime membership program) Y Y Y
select item / a user has selected an item when a user has selected content in an app Y Y
earn virtual currency when a user earns virtual currency (Gamin Apps) Y
level up when a user pass a level (Gaming apps) Y
spend virtual currency/credit when a user spends virtual currency (Gamin Apps) Y
tutorial begin when a user starts the tutorial (Gaming app) Y
tutorial complete when a user completes the tutorial (Gaming app) Y
unlock achievement when a user unlock an achievement (Gaming app) Y
search Y
video/audio start or media play when user starts to play a media in the app (ie music streaming app, video streaming app…) Y

View Home

The viewHome event is automatically sent once Criteo has been activated on the app. It is triggered for each new user session.

View Listing

The viewListing event should be triggered on pages displaying product lists like a category page or a search results page. For products, you must include the IDs of the top three products displayed in the list. These IDs must match to those passed in the catalog feed.

Use the following code snippet to implement:

AdjustEvent event = new AdjustEvent("{viewListingEventToken}");
List<String> productIds = Arrays.asList("productId1", "productId2", "productId3");
event.addPartnerParameter("products", productIds.toString());
Adjust.trackEvent(event);

View Product

The viewProduct event should be triggered on all product-details pages. You must include the ID of the product detailed on the page. It must be the same ID as used in the catalog feed, and must be unique.

Use the following code snippet to implement:

AdjustEvent event = newAdjustEvent("{viewProductEventToken}");
event.addPartnerParameter("product", "productId1");
Adjust.trackEvent(event);

View Basket

The viewBasket event should be triggered on the basket-details pages. The basket tracker should be installed on your basket-details pages. You must include the IDs, prices, and quantities of the basket’s products.

AdjustEvent event = newAdjustEvent("{cartEventToken}");
List<String> productIds = Arrays.asList("productId1","productId2","productId3");
List<String> productPrice = Arrays.asList("200","2500","1200");
List<String> productQuantity = Arrays.asList("1","2","3");
event.addPartnerParameter("productids", productIds.toString());
event.addPartnerParameter("productPrice", productPrice.toString());
event.addPartnerParameter("productQuantity", productQuantity.toString());
Adjust.trackEvent(event);

Track Transaction

The trackTransaction event should be triggered on order confirmation pages after checkout.

You must include a unique transaction ID as well as the IDs, prices, and quantities of the products bought in the transaction.

You may send an optional parameter “nc” (new customer) through the transaction event as the last parameter in the method call. It should indicate whether the purchase is done by a new or existing customer. It should equal 1 if new customer, 0 if existing customer, and left blank if unknown or unavailable.

Use the following code snippet to implement:

AdjustEvent event = newAdjustEvent("{transactionConfirmedEventToken}");
List<String> productIds = Arrays.asList("productId1","productId2","productId3");
List<String> productPrice = Arrays.asList("200","2500","1200");
List<String> productQuantity = Arrays.asList("1","2","3");
event.addPartnerParameter("productids", productIds.toString());
event.addPartnerParameter("productPrice", productPrice.toString());
event.addPartnerParameter("productQuantity", productQuantity.toString()); 
event.addPartnerParameter("transactionId", "1");
event.addPartnerParameter("currency", "AUD");
event.addPartnerParameter("setRevenue", "1.1");
Adjust.trackEvent(event);

Dates for Travel

It’s possible to attach check-in and check-out dates to every Criteo event with the injectViewSearchDatesIntoCriteoEventsmethod. The format of the dates is “yyyy-mm-dd”. It has to be set every time a user enters new search dates, for example:

event.addPartnerParameter("din", "2020-01-01");
event.addPartnerParameter("dout", "2020-01-07");

The dates will be sent with every Criteo event for the duration of the application lifecycle, so it must be set again when the app is re-launched. The search dates can be removed by setting the injectViewSearchDatesIntoCriteoEventsdates to null.

For flight, if no checkout date has been selected then the same date should be provided in the check-in and checkout dates.

Hashed Email for cross-device targeting

Clients have the option of sending Criteo the email address of app users when available. This will enable the cross-device Criteo targeting feature.

event.addPartnerParameter("criteo_email_hash", "72626798128bhbh283y2");

The hashed email will be sent with every Criteo event for the duration of the application lifecycle, so it must be set again when the app is relaunched.

The hashed email can be removed by setting the value to an empty string.

event.addPartnerParameter("criteo_email_hash", "");

Following are the steps to generate a hashed email address for Criteo:

  • Convert all characters to lower case
  • Remove any blank spaces
  • Covert to UTF-8
  • Hash using SHA256 algorithm

Customer ID

A Customer ID can be provided in all events, it is the last argument of each plugin method. If the user is logged-in in the advertiser’s app, the user ID should be passed.

User ID is an optional parameter and should be left as an empty string if the user is logged out or the User ID is unavailable.

Customer ID can be any string, as long as it does not contain any Personally Identifiable Information.

Send the Customer ID along with any Adjust event by calling:

event.addPartnerParameter("customer_id", "12323dsvhdsb23");

Testing Process

You should contact Criteo to start the testing phase as soon as the events are implemented.

Please allow sufficient time (at least a week before) for testing prior to the app submission in order to ensure that the data you are sending is complete.

Criteo will require the following elements:

  • App build to test the collection of events on Criteo side.
  • It is recommended to set the Sandbox environment and the logs level to verbose on your app as shown:
public class YourApplicationClass extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        String appToken = "{YourAppToken}";
        String environment = AdjustConfig.ENVIRONMENT_SANDBOX;
        AdjustConfig config = new AdjustConfig(this, appToken, environment);
        config.setLogLevel(LogLevel.VERBOSE);
        Adjust.onCreate(config);
    }
}