Skip to content

Commit d5cbd0b

Browse files
sergeysozinovsozinov
andauthored
WMSDK-522
Co-authored-by: sozinov <[email protected]>
1 parent 62a0d3d commit d5cbd0b

File tree

1 file changed

+42
-3
lines changed

1 file changed

+42
-3
lines changed

android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import android.app.Activity
44
import android.app.Application
55
import android.content.Intent
66
import android.os.Bundle
7-
import android.util.Log
87
import com.facebook.react.ReactApplication
98
import com.facebook.react.ReactInstanceManager
109
import com.facebook.react.bridge.ActivityEventListener
1110
import com.facebook.react.bridge.ReactContext
1211
import java.util.concurrent.atomic.AtomicBoolean
1312
import cloud.mindbox.mobile_sdk.Mindbox
1413
import cloud.mindbox.mobile_sdk.logger.Level
14+
import cloud.mindbox.mobile_sdk.pushes.MindboxPushService
1515

1616

1717
internal class MindboxSdkLifecycleListener private constructor(
@@ -20,12 +20,23 @@ internal class MindboxSdkLifecycleListener private constructor(
2020
) : Application.ActivityLifecycleCallbacks {
2121

2222
companion object {
23+
@Volatile
24+
private var listener: MindboxSdkLifecycleListener? = null
25+
2326
fun register(
2427
application: Application,
2528
subscriber: MindboxEventSubscriber = MindboxEventEmitter(application)
2629
) {
27-
val listener = MindboxSdkLifecycleListener(application, subscriber)
28-
application.registerActivityLifecycleCallbacks(listener)
30+
if (listener == null) {
31+
synchronized(this) {
32+
if (listener == null) {
33+
Mindbox.writeLog("[RN] Initialize MindboxSdkLifecycleListener", Level.INFO)
34+
val lifecycleListener = MindboxSdkLifecycleListener(application, subscriber)
35+
application.registerActivityLifecycleCallbacks(lifecycleListener)
36+
listener = lifecycleListener
37+
}
38+
}
39+
}
2940
}
3041
}
3142

@@ -168,3 +179,31 @@ internal class MindboxSdkLifecycleListener private constructor(
168179
}
169180
}
170181
}
182+
183+
/**
184+
* Initializes push notification services for React Native integration.
185+
*
186+
* This method performs two crucial initialization steps:
187+
* 1. Initializes the specified push services (FCM, HMS, RuStore) through Mindbox SDK
188+
* 2. Registers the Mindbox lifecycle listener to handle React Native specific events
189+
*
190+
* @param application The Android Application context used for initialization
191+
* @param pushServices List of push notification services to initialize. Typically includes
192+
* [MindboxFirebase] for Firebase Cloud Messaging and/or
193+
* [MindboxHuawei] for Huawei Cloud Messaging and/or
194+
* [MindboxRuStore] for Huawei Cloud Messaging
195+
*
196+
* @example
197+
* // Typical usage:
198+
* Mindbox.initPushServicesForReactNative(
199+
* application,
200+
* listOf(MindboxFirebase, MindboxHuawei, MindboxRuStore)
201+
* )
202+
*
203+
* @note This method should be called once during application startup,
204+
* in the Application.onCreate() method.
205+
*/
206+
public fun Mindbox.initPushServicesForReactNative(application: Application, pushServices: List<MindboxPushService>) {
207+
Mindbox.initPushServices(application, pushServices)
208+
MindboxSdkLifecycleListener.register(application)
209+
}

0 commit comments

Comments
 (0)