Optional SDK configurations

Customize your SDK setup.

This article guides you through additional optional configurations that allow you to customize the SDK's behavior. You can skip this page and use the default settings, but these options offer more control for specific use cases.

1. Data center region

Set to EU if your Blueshift account uses the European data center.

// Kotlin - Add to your Application class
val configuration = Configuration()
configuration.region = BlueshiftRegion.EU
// Java - Add to your Application class  
Configuration configuration = new Configuration();
configuration.setRegion(BlueshiftRegion.EU);

2. Device ID options

GUID (recommended)

Creates a unique ID you can reset when users log out.

// Kotlin
configuration.deviceIdSource = Blueshift.DeviceIdSource.GUID

// Reset on logout
Blueshift.resetDeviceId(this)
// Java
configuration.setDeviceIdSource(Blueshift.DeviceIdSource.GUID);

// Reset on logout
Blueshift.resetDeviceId(this);

Instance ID with package name (default)

Combines Firebase Instance ID with your app's package name.

// Kotlin
configuration.deviceIdSource = Blueshift.DeviceIdSource.INSTANCE_ID_PKG_NAME
// Java
configuration.setDeviceIdSource(Blueshift.DeviceIdSource.INSTANCE_ID_PKG_NAME);

Custom device ID

Use your own user identifier.

// Kotlin
configuration.deviceIdSource = Blueshift.DeviceIdSource.CUSTOM
configuration.customDeviceId = "your_user_id"
// Java
configuration.setDeviceIdSource(Blueshift.DeviceIdSource.CUSTOM);
configuration.setCustomDeviceId("your_user_id");

3. Event batching

Control how often events are sent to save battery.

// Kotlin - 15 minutes
configuration.batchInterval = 15 * 60 * 1000L
// Java - 15 minutes
configuration.setBatchInterval(15 * 60 * 1000L);

Common intervals:

  • 15 minutes: 15 * 60 * 1000L
  • 30 minutes: 30 * 60 * 1000L (default)
  • 1 hour: 60 * 60 * 1000L
  • No batching: 0L

4. Push notifications

Disable push notifications

// Kotlin
configuration.setPushEnabled(false)
// Java
configuration.setPushEnabled(false);

Push notification styling

// Kotlin
configuration.setLargeIconResId(R.drawable.notification_large_icon)
configuration.setSmallIconResId(R.drawable.notification_small_icon)

val color = ContextCompat.getColor(this, R.color.notification_color)
configuration.setNotificationColor(color)
// Java
configuration.setLargeIconResId(R.drawable.notification_large_icon);
configuration.setSmallIconResId(R.drawable.notification_small_icon);

int color = ContextCompat.getColor(this, R.color.notification_color);
configuration.setNotificationColor(color);

Notification channels (Android 8+)

// Kotlin
configuration.setDefaultNotificationChannelId("app_channel_id_default")
configuration.setDefaultNotificationChannelName("App notifications")
configuration.setDefaultNotificationChannelDescription("Notifications from our app")
// Java
configuration.setDefaultNotificationChannelId("app_channel_id_default");
configuration.setDefaultNotificationChannelName("App notifications");
configuration.setDefaultNotificationChannelDescription("Notifications from our app");

5. In-app messages

Enable the in-app messaging feature.

// Kotlin
configuration.setInAppEnabled(true)
configuration.setJavaScriptForInAppWebViewEnabled(true)
// Java
configuration.setInAppEnabled(true);
configuration.setJavaScriptForInAppWebViewEnabled(true);

In-app interval

// Kotlin - 2 minutes between messages
configuration.setInAppInterval(120)
// Java - 2 minutes between messages
configuration.setInAppInterval(120);

Background fetching

// Kotlin
configuration.setInAppBackgroundFetchEnabled(false)
// Java
configuration.setInAppBackgroundFetchEnabled(false);

Manual mode

// Kotlin
configuration.setInAppManualTriggerEnabled(true)
// Java
configuration.setInAppManualTriggerEnabled(true);

6. Mobile inbox

// Kotlin
configuration.setInboxEnabled(true)
// Java
configuration.setInboxEnabled(true);

7. Automatic app open events

// Kotlin
configuration.setEnableAutoAppOpenFiring(true)
configuration.setAutoAppOpenInterval(86400) // 24 hours
// Java
configuration.setEnableAutoAppOpenFiring(true);
configuration.setAutoAppOpenInterval(86400); // 24 hours

8. Encryption

Enable encrypted storage for user information (API 23+).

// Kotlin
configuration.setSaveUserInfoAsEncrypted(true)
// Java
configuration.setSaveUserInfoAsEncrypted(true);

Warning: Once enabled, you cannot revert to unencrypted storage.


9. Override job IDs

If your app uses JobScheduler and encounters ID conflicts.

// Kotlin
configuration.setBulkEventsJobId(911)
configuration.setNetworkChangeListenerJobId(912)
// Java
configuration.setBulkEventsJobId(911);
configuration.setNetworkChangeListenerJobId(912);

10. Complete example

// Kotlin - MyApplication.kt
class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        
        val configuration = Configuration()
        configuration.setApiKey("your_api_key")
        configuration.setAppIcon(R.mipmap.ic_launcher)
        
        // Add any optional configurations
        configuration.region = BlueshiftRegion.EU
        configuration.deviceIdSource = Blueshift.DeviceIdSource.GUID
        configuration.setInAppEnabled(true)
        configuration.setEnableAutoAppOpenFiring(true)
        
        Blueshift.getInstance(this).initialize(configuration)
    }
}
// Java - MyApplication.java
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        
        Configuration configuration = new Configuration();
        configuration.setApiKey("your_api_key");
        configuration.setAppIcon(R.mipmap.ic_launcher);
        
        // Add any optional configurations
        configuration.setRegion(BlueshiftRegion.EU);
        configuration.setDeviceIdSource(Blueshift.DeviceIdSource.GUID);
        configuration.setInAppEnabled(true);
        configuration.setEnableAutoAppOpenFiring(true);
        
        Blueshift.getInstance(this).initialize(configuration);
    }
}

11. Test your configuration

Add this to your MainActivity to verify settings:

// Kotlin - Add to onCreate()
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    
    Log.d("ConfigTest", "Testing SDK configuration")
    
    // Check device ID
    val deviceId = DeviceUtils.getDeviceId(this)
    Log.d("ConfigTest", "Device ID: $deviceId")
    
    // Send test event
    val testData = HashMap<String, Any>()
    testData["config"] = "test"
    testData["timestamp"] = System.currentTimeMillis()
    
    Blueshift.getInstance(this).trackEvent("config_test", testData, true)
    Log.d("ConfigTest", "Test event sent")
}
// Java - Add to onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    Log.d("ConfigTest", "Testing SDK configuration");
    
    // Check device ID
    String deviceId = DeviceUtils.getDeviceId(this);
    Log.d("ConfigTest", "Device ID: " + deviceId);
    
    // Send test event
    HashMap<String, Object> testData = new HashMap<>();
    testData.put("config", "test");
    testData.put("timestamp", System.currentTimeMillis());
    
    Blueshift.getInstance(this).trackEvent("config_test", testData, true);
    Log.d("ConfigTest", "Test event sent");
}

Run your app and check Logcat:

  1. Search for ConfigTest - You should see:

    D/ConfigTest: Testing SDK configuration
    D/ConfigTest: Device ID: [your device ID]
    D/ConfigTest: Test event sent
  2. Search for config_test - You should see:

    D/EventManager: Inserting 1 batch event -> config_test
  3. Search for NetworkRepository - You should see:

    D/NetworkRepository: BlueshiftNetworkRequest(id=XX, url=https://api.getblueshift.com/api/v1/bulkevents

If you see all three types of logs, your configuration is working correctly.