This quickstart guide walks you through integrating the Kount Android SDK into your Android application. You’ll have data collection running in under 10 minutes.
Prerequisites
Before you begin, ensure you have:
Android Studio installed
A Kount merchant ID (contact Kount if you don’t have one)
Target Android API 26 (Oreo) or higher
Basic familiarity with Android development
Step 1: Add Dependencies
Add the Kount Data Collector to your app’s build.gradle file:
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.kount:datacollector:5.0.0'
implementation 'com.google.android.instantapps:instantapps:1.1.0'
implementation 'com.android.volley:volley:1.2.1'
implementation 'com.google.code.gson:gson:2.8.6'
}
Sync your project with Gradle files.
Initialize the SDK in your Activity’s onCreate() method:
import com.kount.api.KountSDK
class MainActivity : AppCompatActivity () {
override fun onCreate (savedInstanceState: Bundle ?) {
super . onCreate (savedInstanceState)
setContentView (R.layout.activity_main)
// Configure the SDK
KountSDK. setMerchantId ( "999999" ) // Replace with your merchant ID
KountSDK. setEnvironment (KountSDK.ENVIRONMENT_TEST)
KountSDK. setCollectAnalytics ( true )
}
}
import com.kount.api.KountSDK;
public class MainActivity extends AppCompatActivity {
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate (savedInstanceState);
setContentView ( R . layout . activity_main );
// Configure the SDK
KountSDK . INSTANCE . setMerchantId ( "999999" ); // Replace with your merchant ID
KountSDK . INSTANCE . setEnvironment ( KountSDK . ENVIRONMENT_TEST );
KountSDK . INSTANCE . setCollectAnalytics ( true );
}
}
Replace "999999" with your actual merchant ID provided by Kount. Use ENVIRONMENT_TEST for development and ENVIRONMENT_PRODUCTION for production builds.
Step 3: Request Location Permission
Add location permission to your AndroidManifest.xml:
< uses-permission android:name = "android.permission.INTERNET" />
< uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" />
Request the permission at runtime for Android M and above:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat. checkSelfPermission (
this ,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat. requestPermissions (
this ,
arrayOf (Manifest.permission.ACCESS_FINE_LOCATION),
KountSDK.REQUEST_PERMISSION_LOCATION
)
}
}
if ( Build . VERSION . SDK_INT >= Build . VERSION_CODES . M ) {
if ( ContextCompat . checkSelfPermission (
this ,
Manifest . permission . ACCESS_FINE_LOCATION
) != PackageManager . PERMISSION_GRANTED
) {
ActivityCompat . requestPermissions (
this ,
new String []{ Manifest . permission . ACCESS_FINE_LOCATION },
KountSDK . REQUEST_PERMISSION_LOCATION
);
}
}
Location permission is optional but recommended for enhanced fraud detection. The SDK will work without it, but with reduced data collection.
Step 4: Collect Device Data
Start data collection when you need to track a user session:
KountSDK. collectForSession (
this ,
{ sessionId ->
// Success - collection completed
Log. d ( "Kount" , "Collection completed with session ID: $sessionId " )
// Send sessionId to your backend for fraud analysis
sendSessionIdToBackend (sessionId)
},
{ sessionId, error ->
// Failure - collection failed
Log. e ( "Kount" , "Collection failed: $error " )
// Handle the error (retry, log, etc.)
handleCollectionError (error)
}
)
KountSDK . INSTANCE . collectForSession (
this ,
(sessionId) -> {
// Success - collection completed
Log . d ( "Kount" , "Collection completed with session ID: " + sessionId);
// Send sessionId to your backend for fraud analysis
sendSessionIdToBackend (sessionId);
return null ;
},
(sessionId, error) -> {
// Failure - collection failed
Log . e ( "Kount" , "Collection failed: " + error);
// Handle the error (retry, log, etc.)
handleCollectionError (error);
return null ;
}
);
Step 5: Retrieve Session ID
You can retrieve the session ID at any time after collection:
val sessionId = KountSDK. getSessionId ()
val status = KountSDK. getCollectionStatus ()
Log. d ( "Kount" , "Session ID: $sessionId " )
Log. d ( "Kount" , "Status: $status " )
String sessionId = KountSDK . INSTANCE . getSessionId ();
String status = KountSDK . INSTANCE . getCollectionStatus ();
Log . d ( "Kount" , "Session ID: " + sessionId);
Log . d ( "Kount" , "Status: " + status);
Complete Example
Here’s a complete working example:
package com.example.app
import android.Manifest
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.kount.api.KountSDK
class MainActivity : AppCompatActivity () {
override fun onCreate (savedInstanceState: Bundle ?) {
super . onCreate (savedInstanceState)
setContentView (R.layout.activity_main)
// Configure the SDK
KountSDK. setMerchantId ( "999999" )
KountSDK. setEnvironment (KountSDK.ENVIRONMENT_TEST)
KountSDK. setCollectAnalytics ( true )
// Request permissions and start collection
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestLocationPermission ()
} else {
startDataCollection ()
}
}
private fun requestLocationPermission () {
if (ContextCompat. checkSelfPermission (
this ,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat. requestPermissions (
this ,
arrayOf (Manifest.permission.ACCESS_FINE_LOCATION),
KountSDK.REQUEST_PERMISSION_LOCATION
)
} else {
startDataCollection ()
}
}
override fun onRequestPermissionsResult (
requestCode: Int ,
permissions: Array < out String >,
grantResults: IntArray
) {
super . onRequestPermissionsResult (requestCode, permissions, grantResults)
if (requestCode == KountSDK.REQUEST_PERMISSION_LOCATION) {
startDataCollection ()
}
}
private fun startDataCollection () {
KountSDK. collectForSession (
this ,
{ sessionId ->
Log. d ( "Kount" , "Success: $sessionId " )
// Send to backend
},
{ sessionId, error ->
Log. e ( "Kount" , "Failed: $error " )
// Handle error
}
)
}
}
package com.example.app;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.kount.api.KountSDK;
public class MainActivity extends AppCompatActivity {
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate (savedInstanceState);
setContentView ( R . layout . activity_main );
// Configure the SDK
KountSDK . INSTANCE . setMerchantId ( "999999" );
KountSDK . INSTANCE . setEnvironment ( KountSDK . ENVIRONMENT_TEST );
KountSDK . INSTANCE . setCollectAnalytics ( true );
// Request permissions and start collection
if ( Build . VERSION . SDK_INT >= Build . VERSION_CODES . M ) {
requestLocationPermission ();
} else {
startDataCollection ();
}
}
private void requestLocationPermission () {
if ( ContextCompat . checkSelfPermission (
this ,
Manifest . permission . ACCESS_FINE_LOCATION
) != PackageManager . PERMISSION_GRANTED
) {
ActivityCompat . requestPermissions (
this ,
new String []{ Manifest . permission . ACCESS_FINE_LOCATION },
KountSDK . REQUEST_PERMISSION_LOCATION
);
} else {
startDataCollection ();
}
}
@ Override
public void onRequestPermissionsResult (
int requestCode ,
String [] permissions ,
int [] grantResults
) {
super . onRequestPermissionsResult (requestCode, permissions, grantResults);
if (requestCode == KountSDK . REQUEST_PERMISSION_LOCATION ) {
startDataCollection ();
}
}
private void startDataCollection () {
KountSDK . INSTANCE . collectForSession (
this ,
(sessionId) -> {
Log . d ( "Kount" , "Success: " + sessionId);
// Send to backend
return null ;
},
(sessionId, error) -> {
Log . e ( "Kount" , "Failed: " + error);
// Handle error
return null ;
}
);
}
}
Testing Your Integration
Build and run your app:
Check your logcat for Kount SDK messages:
You should see:
“Collection completed with session ID: [session-id]”
Status messages showing collection progress
Collection Status Values
The SDK provides three status values:
Status Description COMPLETEDData collection finished successfully IN_PROGRESSCollection is currently running FAILEDCollection encountered an error
Next Steps
Integration Guides Detailed integration guides for Java and Kotlin
Configuration Learn about all configuration options
Core Concepts Understand how data collection works
API Reference Complete API documentation
Troubleshooting
Collection returns null session ID
Ensure you’ve configured the merchant ID before calling collectForSession(). The SDK must be initialized with a valid merchant ID. KountSDK. setMerchantId ( "your-merchant-id" )
Build fails with 'Cannot resolve symbol KountSDK'
Verify that you’ve added the JitPack repository and synced your Gradle files: repositories {
maven { url 'https://jitpack.io' }
}
Collection status stays IN_PROGRESS
This can happen if there’s a network issue or timeout. Check your device’s internet connection and ensure your app has the INTERNET permission in AndroidManifest.xml.
For more troubleshooting help, see the Troubleshooting Guide .