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.