Skip to content

Commit cc708aa

Browse files
committed
only fetch IAMs if app is in the foreground
We want to prevent wasted resources polling for IAMs durning times where it is unlikely they will be seen. Two changes are being made; 1. ensure we only poll when the isInForeground is true. 2. poll the first time the app is foregrounded, incase it is not when the SDK is initialized.
1 parent d798815 commit cc708aa

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

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

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.onesignal.common.exceptions.BackendException
99
import com.onesignal.common.modeling.ISingletonModelStoreChangeHandler
1010
import com.onesignal.common.modeling.ModelChangedArgs
1111
import com.onesignal.common.threading.suspendifyOnThread
12+
import com.onesignal.core.internal.application.IApplicationLifecycleHandler
1213
import com.onesignal.core.internal.application.IApplicationService
1314
import com.onesignal.core.internal.config.ConfigModel
1415
import com.onesignal.core.internal.config.ConfigModelStore
@@ -71,7 +72,8 @@ internal class InAppMessagesManager(
7172
ISingletonModelStoreChangeHandler<ConfigModel>,
7273
IInAppLifecycleEventHandler,
7374
ITriggerHandler,
74-
ISessionLifecycleHandler {
75+
ISessionLifecycleHandler,
76+
IApplicationLifecycleHandler {
7577
private val lifecycleCallback = EventProducer<IInAppMessageLifecycleListener>()
7678
private val messageClickCallback = EventProducer<IInAppMessageClickListener>()
7779

@@ -133,6 +135,7 @@ internal class InAppMessagesManager(
133135
_lifecycle.subscribe(this)
134136
_triggerController.subscribe(this)
135137
_sessionService.subscribe(this)
138+
_applicationService.addApplicationLifecycleHandler(this)
136139

137140
suspendifyOnThread {
138141
_repository.cleanCachedInAppMessages()
@@ -225,6 +228,14 @@ internal class InAppMessagesManager(
225228

226229
// called when a new push subscription is added, or the app id is updated, or a new session starts
227230
private suspend fun fetchMessages() {
231+
// We only want to fetch IAMs if we know the app is in the
232+
// foreground, as we don't want to do this for background
233+
// events (such as push received), wasting resources for
234+
// IAMs that are never shown.
235+
if (!_applicationService.isInForeground) {
236+
return
237+
}
238+
228239
val appId = _configModelStore.model.appId
229240
val subscriptionId = _subscriptionManager.subscriptions.push.id
230241

@@ -869,4 +880,16 @@ internal class InAppMessagesManager(
869880
.setPositiveButton(android.R.string.ok) { _, _ -> suspendifyOnThread { showMultiplePrompts(inAppMessage, prompts) } }
870881
.show()
871882
}
883+
884+
private var onFocusCalled: Boolean = false
885+
886+
override fun onFocus() {
887+
if (onFocusCalled) return
888+
onFocusCalled = true
889+
suspendifyOnThread {
890+
fetchMessages()
891+
}
892+
}
893+
894+
override fun onUnfocused() { }
872895
}

0 commit comments

Comments
 (0)