Skip to content

Commit c38765f

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

File tree

3 files changed

+31
-10
lines changed

3 files changed

+31
-10
lines changed

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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 29 additions & 9 deletions
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,29 @@ internal class InAppMessagesManager(
113117
private val fetchIAMMutex = Mutex()
114118
private var lastTimeFetchedIAMs: Long? = null
115119

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

154182
suspendifyOnThread {
155183
_repository.cleanCachedInAppMessages()
@@ -161,15 +189,6 @@ internal class InAppMessagesManager(
161189
for (redisplayInAppMessage in redisplayedInAppMessages) {
162190
redisplayInAppMessage.isDisplayedInSession = false
163191
}
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-
}
173192
}
174193
}
175194

@@ -933,3 +952,4 @@ internal class InAppMessagesManager(
933952

934953
override fun onUnfocused() { }
935954
}
955+

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

Lines changed: 1 addition & 0 deletions
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)