Skip to content

Commit 181694b

Browse files
committed
Fix: add fetch condition in the event of user change instead of start()
1 parent ad5123a commit 181694b

File tree

3 files changed

+37
-10
lines changed

3 files changed

+37
-10
lines changed

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/backend/IIdentityBackendService.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ interface IIdentityBackendService {
3838
)
3939
}
4040

41-
internal object IdentityConstants {
41+
object IdentityConstants {
4242
/**
4343
* The alias label for the external ID alias.
4444
*/

OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/internal/InAppMessagesManager.kt

+35-9
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ import com.onesignal.session.internal.outcomes.IOutcomeEventsController
4343
import com.onesignal.session.internal.session.ISessionLifecycleHandler
4444
import com.onesignal.session.internal.session.ISessionService
4545
import com.onesignal.user.IUserManager
46+
import com.onesignal.user.internal.backend.IdentityConstants
47+
import com.onesignal.user.internal.identity.IdentityModel
48+
import com.onesignal.user.internal.identity.IdentityModelStore
4649
import com.onesignal.user.internal.subscriptions.ISubscriptionChangedHandler
4750
import com.onesignal.user.internal.subscriptions.ISubscriptionManager
4851
import com.onesignal.user.internal.subscriptions.SubscriptionModel
@@ -60,6 +63,7 @@ internal class InAppMessagesManager(
6063
private val _influenceManager: IInfluenceManager,
6164
private val _configModelStore: ConfigModelStore,
6265
private val _userManager: IUserManager,
66+
private val _identityModelStore: IdentityModelStore,
6367
private val _subscriptionManager: ISubscriptionManager,
6468
private val _outcomeEventsController: IOutcomeEventsController,
6569
private val _state: InAppStateService,
@@ -113,6 +117,36 @@ internal class InAppMessagesManager(
113117
private val fetchIAMMutex = Mutex()
114118
private var lastTimeFetchedIAMs: Long? = null
115119

120+
private val identityModelChangeHandler =
121+
object : ISingletonModelStoreChangeHandler<IdentityModel> {
122+
override fun onModelReplaced(
123+
model: IdentityModel,
124+
tag: String,
125+
) { }
126+
127+
override fun onModelUpdated(
128+
args: ModelChangedArgs,
129+
tag: String,
130+
) {
131+
if (args.property == IdentityConstants.ONESIGNAL_ID) {
132+
val oldOneSignalId = args.oldValue as String
133+
val newOneSignalId = args.newValue as String
134+
135+
// Create a IAM fetch condition when a backend OneSignalID is retrieved for the first time
136+
if (IDManager.isLocalId(oldOneSignalId) && !IDManager.isLocalId(newOneSignalId)) {
137+
suspendifyOnThread {
138+
val updateConditionDeferred =
139+
_consistencyManager.getRywDataFromAwaitableCondition(IamFetchReadyCondition(newOneSignalId))
140+
val rywToken = updateConditionDeferred.await()
141+
if (rywToken != null) {
142+
fetchMessages(rywToken)
143+
}
144+
}
145+
}
146+
}
147+
}
148+
}
149+
116150
override var paused: Boolean
117151
get() = _state.paused
118152
set(value) {
@@ -150,6 +184,7 @@ internal class InAppMessagesManager(
150184
_triggerController.subscribe(this)
151185
_sessionService.subscribe(this)
152186
_applicationService.addApplicationLifecycleHandler(this)
187+
_identityModelStore.subscribe(identityModelChangeHandler)
153188

154189
suspendifyOnThread {
155190
_repository.cleanCachedInAppMessages()
@@ -161,15 +196,6 @@ internal class InAppMessagesManager(
161196
for (redisplayInAppMessage in redisplayedInAppMessages) {
162197
redisplayInAppMessage.isDisplayedInSession = false
163198
}
164-
165-
// attempt to fetch messages from the backend (if we have the pre-requisite data already)
166-
val onesignalId = _userManager.onesignalId
167-
val updateConditionDeferred =
168-
_consistencyManager.getRywDataFromAwaitableCondition(IamFetchReadyCondition(onesignalId))
169-
val rywToken = updateConditionDeferred.await()
170-
if (rywToken != null) {
171-
fetchMessages(rywToken)
172-
}
173199
}
174200
}
175201

OneSignalSDK/onesignal/in-app-messages/src/test/java/com/onesignal/inAppMessages/internal/InAppMessagesManagerTests.kt

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class InAppMessagesManagerTests : FunSpec({
4141
mockk<IInfluenceManager>(),
4242
mockk<ConfigModelStore>(),
4343
mockk<IUserManager>(),
44+
MockHelper.identityModelStore(),
4445
mockk<ISubscriptionManager>(),
4546
mockk<IOutcomeEventsController>(),
4647
mockk<InAppStateService>(),

0 commit comments

Comments
 (0)