Skip to main content

WorkManager Integration

If your app provides a custom WorkManager configuration, follow these steps so the SDK's internal jobs use your configuration instead of creating a conflicting one.

1. Add the androidx.startup Dependency

dependencies {
implementation("androidx.startup:startup-runtime:X.Y.Z")
}

2. Update AndroidManifest.xml

Remove the SDK's default initializers and register your own:

<!-- AndroidManifest.xml -->
<application>
<!-- ... -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">

<!-- Remove BlinkReceipt SDK's default initializer -->
<meta-data
android:name="com.microblink.internal.ReceiptSdkInitializer"
android:value="androidx.startup"
tools:node="remove" />

<!-- Remove WorkManager's default initializer -->
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />

<!-- Remove BlinkReceipt's Barcode Detector initializer -->
<meta-data
android:name="com.microblink.internal.BarcodeDetectorInitializer"
android:value="androidx.startup"
tools:node="remove" />

<!-- Register your custom initializer -->
<meta-data
android:name="com.custom.app.AppInitializer"
android:value="androidx.startup" />
</provider>
</application>

3. Define the Custom Initializer

This is where your WorkManager configuration is applied:

class AppInitializer : Initializer<Unit> {

override fun create(context: Context) {
val configuration = Configuration.Builder()
.setDefaultProcessName("com.custom.app:custom-app-process")
// Add other client-specific configuration here
.build()
WorkManager.initialize(context, configuration)
}

override fun dependencies(): List<Class<out Initializer<*>?>?> = emptyList()
}

4. Initialize the SDK Manually

With auto-initialization disabled, initialize BlinkReceipt from your Application class:

@Override
public void onCreate() {
super.onCreate();
BlinkReceiptSdk.initialize(context);
}

Your app's WorkManager configuration will now be used across both your app and the SDK's internal logic.