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:
-
Search for
ConfigTest
- You should see:D/ConfigTest: Testing SDK configuration D/ConfigTest: Device ID: [your device ID] D/ConfigTest: Test event sent
-
Search for
config_test
- You should see:D/EventManager: Inserting 1 batch event -> config_test
-
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.
Updated about 3 hours ago