Roku – Using the SDK

The following document describes the common use cases for the Kochava SDK after integration is complete. For information on integrating the SDK or configuring and starting the Tracker, refer to our Roku SDK Integration support documentation.


Estimated Time to Complete
5 Minutes

After integrating the SDK or creating a new App GUID, we suggest performing these tests to ensure the SDK has been integrated successfully and is functioning as expected within your app.

 

Validate the Install:

The SDK will send an install for the app once, after a fresh install. This test ensures the SDK was configured properly and successfully sent the install to Kochava.

  1. Double check the SDK configuration in code, ensuring the correct App GUID.
  2. Run the app for approximately 30 seconds, which will allow more than enough time for the SDK to start and send an install to Kochava under typical conditions.
  3. Wait a minute or two and visit the Install Feed Validation page for your app within the Kochava dashboard, under Apps & Assets > Install Feed Validation. Within that page, look for the Integration Success! message which indicates integration was successful and that Kochava did receive an install from the SDK. At this point you have confirmed a successful SDK integration and can move ahead to Validate Post Install Events below.
  4. If instead you see a Integration Not Complete! message, wait a few more minutes and refresh the page. After refreshing, if the Integration Not Complete! message persists, double check the following, then repeat this test:
    • Correct App GUID is used within SDK code configuration.
    • Ensure the SDK configuration and startup code is being reached.
    • Ensure the network connection from the test device is not limited behind a firewall or otherwise.

Validate Event Measurement:

If you are measuring user events, you can use this test to ensure the SDK was configured properly and is successfully sending these events to Kochava.

  1. Double check the SDK configuration in code, ensuring the correct App GUID.
  2. Double check your event measurement code and ensure it is reachable.
  3. Launch the app and perform necessary actions within the app to trigger the event(s) you wish to test. After performing these actions, wait 60 seconds to allow more than enough time for the SDK to send these events.
  4. Wait a minute or two and visit the Event Manager page for your app within the Kochava dashboard, under Apps & Assets > Event Manager. Within that page, ensure the tested event names are displayed here, in which case you have confirmed the SDK is successfully measuring these events.
  5. If your event names are not displayed here after waiting a few minutes, double check the following, then repeat this test:
    • Correct App GUID is used within SDK code configuration.
    • Ensure the SDK configuration and startup code is being reached prior to any event code.
    • Ensure the SDK event code is being reached.
    • Ensure the network connection from the test device is not limited behind a firewall or otherwise.

 

Estimated Time to Complete
15 Minutes

Examples include in-app purchases, level completions, or other noteworthy user activity you wish to measure. Events can be instrumented either by using the standard format provided by the SDK or using your own custom event name and data.

 

BEST PRACTICES: Use a standard event type whenever possible.

 

Standard Events:

Standard events are built by first selecting a standard event type and then setting any applicable standard parameters you wish to include with the event. For example, you might choose a Purchase standard event type and set values for the Price and Name parameters. There are a variety of standard event types to choose from and dozens of standard parameters available. When creating a standard event, you only need to set values for the parameters you wish to measure. A maximum of 16 parameters can be set.

  1. Create an event object using the desired standard event type.
  2. Set the desired parameter value(s) within the event object.
  3. Send the event.

 

Example (Standard Event with Standard Parameters)

event = kochava.events.buildWithEventType(kochava.EventType.Purchase)
event.setName("Gold Token")
event.setPrice(0.99)
event.send()

 

Custom event parameters (which can also be serialized JSON) may also be set within a standard event.

 

Example (Standard Event with Standard and Custom Parameters)

event = kochava.events.buildWithEventType(kochava.EventType.LevelComplete)
event.setName("The Deep Dark Forest")
event.setCustomValue("attempts", 3)
event.setCustomValue("score", 12000)
event.send()

 

For a detailed list of standard event types and parameters, see: Post Install Event Examples


Custom Events:

For scenarios where the standard event types and standard parameters do not meet your needs, custom events can be used. To instrument a custom event, pass the event’s name and data (which can also be serialized JSON) to the method to send the custom event.

 

Example (Custom Event with Custom Parameters)

event = kochava.events.buildWithEventName("Enemy Defeated")
event.setCustomValue("enemy", "The Angry Ogre")
event.setCustomValue("reward", "Gold Token")
event.send()

 

Example (Send a Custom Event with Only a Name, no Event Data)

kochava.events.sendWithString("Player Defeated")

 

Example (Send a Custom Event with Event Data)

kochava.events.sendWithString("Player Defeated", "Angry Ogre")

 

Example (Send a Custom Event with Serialized JSON Data)

kochava.events.sendWithString("Player Defeated", "{""enemy"":""Angry Ogre""}")

 

NOTE: No custom event name pre-registration is required. However, a maximum of 100 unique event names can be measured within the Kochava dashboard (including any standard event types also used), so keep this in mind as you create new custom event names.

 


Estimated Time to Complete
10 Minutes

In-app purchases and subscription can be easily measured and attributed by creating a purchase event. To accomplish this, simply create an event of type Purchase and include the total amount of revenue as the price value within the event data parameters.

 

BEST PRACTICES: Include the name parameter, so that you can easily identify the SKU from the analytics side. It is also highly recommended to set a currency.

 

Example (Standard Purchase Event):

event = kochava.events.buildWithEventType(kochava.EventType.Purchase)
event.setName("Loot Box")
event.setPrice(4.99)
event.setCurrency("usd")
event.send()

 

Example (Custom Purchase Event with Serialized JSON Data):

kochava.events.sendWithString("Purchase","{""price"":4.99,""name"":""Loot Box""}")

 


In order to effectively track user subscriptions and free trials, an event should be instrumented at the time of the subscription purchase or start of the free trial along with an accompanying identity link.

When a subscription or free trial begins, first set an identity link for this subscriber and then instrument a standard Subscription or Trial event populated with the following values:

  • Price
  • Currency
  • Product Name
  • User or Subscriber ID (hash suggested)
  • Receipt (if available)

 

BEST PRACTICES: Always set the identity link before sending the event, otherwise the identity link will not be properly associated with the event.

 

Example (Identity Link with Subscription):

' first set an identity link for this user
kochava.tracker.registerIdentityLink("Subscriber ID","ABCDEF123456789")

' next, instrument the subscription event
event = kochava.events.buildWithEventType(kochava.EventType.Subscribe)
event.setPrice(9.99)
event.setCurrency("usd")
event.setName("Monthly Subscription")
event.setUserId("ABCDEF123456789")
event.send()

 

A free trial is handled in a similar way, although the price should be set to 0 and the event type should indicate Trial rather than Subscription. The product name should remain the same, as the event type indicates whether this was free trial or subscription.

Example (Identity Link with Free Trial):

' first set an identity link for this user
kochava.tracker.registerIdentityLink("Subscriber ID","ABCDEF123456789")

' next, instrument the trial event
event = kochava.events.buildWithEventType(kochava.EventType.StartTrial)
event.setPrice(0.0)
event.setCurrency("usd")
event.setName("Monthly Subscription")
event.setUserId("ABCDEF123456789")
event.send()

 

 


Estimated Time to Complete
5 Minutes

Measuring deeplinks is accomplished similar to any other type of event. In order to measure a deeplink event, create a standard event of type Deeplink and set the URI parameter along with any other relevant parameters to the values provided when the deeplink occurred.

 

Example (Standard Deeplink Event):

event = kochava.events.buildWithEventType(kochava.EventType.Deeplink)
event.setUri("some_deeplink_uri")
event.setSource("some_source_app")
event.send()


Estimated Time to Complete
10 Minutes

Setting an Identity Link provides the opportunity to link different identities together in the form of key and value pairs. For example, you may have assigned each user of your app an internal ID which you want to connect to a user’s service identifier. Using this feature, you can send both your internal ID and their service identifier to connect them in the Kochava database.

In order to link identities, you will need to register this identity link information in the form of unique key and value pair(s) as early as possible. This can be done during the initial configuration of the measurement client if the identity link information is already known, or it can be done after starting the client.

 

BEST PRACTICES: Keep from sending Personal Identifiable Information (PII) such as email addresses or deprecated platform identifiers such as IMEI to Kochava..

 

Example (Register an Identity Link During Tracker Configuration):

kochava = GetKochavaInstance()
kochava.tracker.startWithAppGuid("_YOUR_APP_GUID_")
kochava.tracker.registerIdentityLink("User ID", "123456789")
kochava.tracker.registerIdentityLink("Login", "username")

 

Example (Register an Identity Link After Starting the Tracker):

kochava.tracker.registerIdentityLink("User ID", "123456789")
kochava.tracker.registerIdentityLink("Login", "username")

 


Estimated Time to Complete
15 Minutes

Install attribution results can be retrieved from Kochava servers if you wish to use these results within your app. Be aware that attribution results are always determined by Kochava servers; this feature simply provides the app with a copy of whatever the results were.

For example, you may wish to present a user with a different path if you have determined they installed the app from a certain advertising network or source.

Attribution results are fetched by the measurement client when requested and returned to the app asynchronously via a callback. This process usually takes about 3-4 seconds but can take longer depending on network latency and other factors. Once attribution results have been retrieved for the first time, they are not retrieved again and the results are persisted. From that point on they can be queried synchronously by calling the attribution data getter which always provides the persisted attribution results from the original retrieval.

NOTE: For purposes of deferred deeplinking, care should be taken to act upon the attribution results only once, as the original results will continue to be reported after the first retrieval, and are not refreshed on a per-launch basis.

 

BEST PRACTICES: Attribution retrieval does not affect attribution and should only be used if there is a clearly defined use within your app for knowing the attribution results; otherwise this causes needless network activity.

 

Example (Requesting Attribution Results):

sub onAttributionRetrieved(attribution as Object)
    if attribution.getAttributed() then
        ' Install was attributed
        raw = attribution.getRaw()
        ' Do something with the raw attribution results...
    else
        ' Install was not attributed
    end if
end sub

kochava.tracker.attribution.retrieve(onAttributionRetrieved)

 

Example (Using the Getter After Attribution Results Have Been Retrieved):

attribution = kochava.tracker.attribution
if attribution.getRetrieved() then
    if attribution.getAttributed() then
        ' Install was attributed
        raw = attribution.getRaw()
        ' Do something with the raw attribution results...
    else
        ' Install was not attributed
    end if
else
    ' Attribution has not yet been retrieved
end if

 

Once you have the attribution results, you will need to parse and handle them in some meaningful way. A variety of data exists within this json object and you will need to determine which data is meaningful for your purposes. For an overview of the attribution dictionary contents, see: Attribution Response Examples.

NOTE: If you wish to send attribution results to your own server, this should be done directly through Kochava’s postback system, rather than retrieving attribution in the app and then sending the results to your own server.

NOTE: Due to the limitations on storage, the Roku SDK only persists the attribution metadata and not the raw response between launches. If you need to access the raw value on a subsequent launch you must request it again through the retrieve attribution API.

 


Estimated Time to Complete
1 Minute

If at any time after starting the measurement client you would like to get the universally unique identifier assigned to this install by Kochava, this identifier can be obtained by calling the retrieve function.

 

Example (Getting the Kochava Device ID):

deviceId = kochava.tracker.getDeviceId()

 

NOTE: If you have enabled the Intelligent Consent Management feature, this unique device ID may change between consent status changes when consent is required and has not been granted.

 


Estimated Time to Complete
1 Minute

If you wish to limit ad tracking at the application level, with respect to Kochava conversions, you can set this value during or after configuration. By default the limit ad tracking state is not enabled (false).

For example, you might provide an option for a user to indicate whether or not they wish to allow this app to use their advertising identifier for tracking purposes. If they do not wish to be tracked, this value would be set to true.

 

Example (Enabling App Limit Ad Tracking During Tracker Configuration):

kochava = GetKochavaInstance()
kochava.tracker.startWithAppGuid("_YOUR_APP_GUID_")
kochava.tracker.setAppLimitAdTracking(true)

 

Example (Enable App Limit Ad Tracking After Starting the Tracker):

kochava.tracker.setAppLimitAdTracking(true)

 


Estimated Time to Complete
5 Minutes

Logging provides a text-based log of the SDK’s behavior at runtime, for purposes of debugging.

For example, while testing you may wish to see the contents of certain payloads being sent to Kochava servers, in which case you would enable logging at a debug (or higher) level.

Six different log levels are available, each of which include all log levels beneath them. Info log level is set by default, although trace log level should be used when debugging so that all possible log messages are generated.

 

Log Level: none

No logging messages are generated.

Log Level: error

Errors which are usually fatal to the tracker.

Log Level: warn

Warnings which are not fatal to the tracker.

Log Level: info

Minimal detail, such as tracker initialization.

Log Level: debug

Granular detail, including network transaction payloads.

Log Level: trace

Very granular detail, including low level behavior.

 

Example (Enabling trace logging in a non-production build):

kochava = GetKochavaInstance()
if (CreateObject("roAppInfo").isDev()) {
    kochava.setLogLevel(kochava.LogLevel.Trace)
} else {
    kochava.setLogLevel(kochava.LogLevel.Info)
}
kochava.tracker.startWithAppGuid("_YOUR_APP_GUID_")

 

BEST PRACTICES: Logging should be set to info log level or lower for production builds. This will limit the log messages generated by the SDK to errors, warnings, and basic information messages which contain no sensitive information.

 


' Option 1: shut down without deleting its local data.
kochava.tracker.shutdown(false)

' Option 2: shut down and delete local data. WARNING: If local data is deleted the tracker will behave as a new install the next time it is started.
kochava.tracker.shutdown(true)

 


The Kochava SDK does deal with GDPR-sensitive data, such as device identifiers. Care should be taken to ensure that your use of the Kochava SDK remains GDPR compliant when applicable.

GDPR applies to users within the EU and requires users to opt-in to data collection. For common questions and answers regarding both GDPR and CCPA consent models, refer to our Handling Consent support documentation.

 

Example (Starting the Tracker Only When Consent Allows)

if(consentGranted or not consentRequired) {
    // we will not initialize Kochava unless consent requirements are met
    kochava = GetKochavaInstance()
    kochava.tracker.startWithAppGuid("_YOUR_APP_GUID_")
}

 

Example (Calling Tracker Methods Only When Consent Allows)

if(consentGranted or not consentRequired) {
    // we will not call Kochava methods unless consent requirements are met.
    kochava = GetKochavaInstance()
    kochava.events.sendWithString("MyEvent")
}

 


Estimated Time to Complete
5 Minutes

During testing, debugging, and non-production app development, the following steps will help you get the most out of your test environment and help to ensure your integration is working properly.

  1. Use an alternate testing App GUID so that your testing activities do not have an impact on your live app analytics.
  2. Enable Logging, if helpful, to gain insight into the SDK’s behavior during runtime.
  3. If you would like the SDK to behave as it would during a new install, be sure to un-install the app before each test.
  4. Test your Kochava integration. For more information see: Testing the Integration.

Keep in mind that you should always add logic to ensure that you do not accidentally release to production a build with a development configuration used. Below is an example of how this type of configuration might look.

kochava = GetKochavaInstance()
if (CreateObject("roAppInfo").isDev()) {
    kochava.setLogLevel(kochava.LogLevel.Trace)
    kochava.tracker.startWithAppGuid("_YOUR_DEVELOPMENT_APP_GUID_")
} else {
    kochava.setLogLevel(kochava.LogLevel.Info)
    kochava.tracker.startWithAppGuid("_YOUR_PRODUCTION_APP_GUID_")
}

 

Analyzing SDK Behavior:

While testing your integration, it is important to understand the measurement client’s basic flow of operations. When the client is started the following sequence of events occur:

  1. A handshake with Kochava may be made to determine dynamic settings for this app.
  2. If this is the first launch, the install data is sent to Kochava (this only happens once).
  3. At this point the SDK is idle and awaits requests from the app.
  4. If a request is made to the SDK by the app, the request is moved to a background thread for processing. After processing the request and performing any necessary network calls the SDK returns to an idle state.
  5. When the app is terminated or suspended, a session-end payload may be sent to Kochava.
  6. When the app is resumed or relaunched, a session-begin payload may be sent to Kochava.

NOTE: While testing, keep in mind that data sent from the SDK may sometimes be delayed up to a few minutes before being displayed within the Kochava analytics dashboard.


 
 

Last Modified: Oct 16, 2023 at 1:14 pm