Skip to content

Commit 3b85296

Browse files
committed
only refresh User when app is foregrounded
Ensure cache for the user is refreshed once per cold start when app is in the foreground. This saves resources as there are a number of events (such as push received or non-OneSignal events) that start the app in the background but will never read/write any user properties.
1 parent cc708aa commit 3b85296

File tree

3 files changed

+53
-6
lines changed

3 files changed

+53
-6
lines changed

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -323,12 +323,6 @@ internal class OneSignalImp : IOneSignal, IServiceProvider {
323323
}
324324
} else {
325325
Logging.debug("initWithContext: using cached user ${identityModelStore!!.model.onesignalId}")
326-
operationRepo!!.enqueue(
327-
RefreshUserOperation(
328-
configModel!!.appId,
329-
identityModelStore!!.model.onesignalId,
330-
),
331-
)
332326
}
333327

334328
startupService!!.start()

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/UserModule.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.onesignal.common.modules.IModule
44
import com.onesignal.common.services.ServiceBuilder
55
import com.onesignal.core.internal.operations.IOperationExecutor
66
import com.onesignal.core.internal.startup.IBootstrapService
7+
import com.onesignal.core.internal.startup.IStartableService
78
import com.onesignal.user.internal.UserManager
89
import com.onesignal.user.internal.backend.IIdentityBackendService
910
import com.onesignal.user.internal.backend.ISubscriptionBackendService
@@ -24,6 +25,7 @@ import com.onesignal.user.internal.operations.impl.listeners.IdentityModelStoreL
2425
import com.onesignal.user.internal.operations.impl.listeners.PropertiesModelStoreListener
2526
import com.onesignal.user.internal.operations.impl.listeners.SubscriptionModelStoreListener
2627
import com.onesignal.user.internal.properties.PropertiesModelStore
28+
import com.onesignal.user.internal.service.UserRefreshService
2729
import com.onesignal.user.internal.subscriptions.ISubscriptionManager
2830
import com.onesignal.user.internal.subscriptions.SubscriptionModelStore
2931
import com.onesignal.user.internal.subscriptions.impl.SubscriptionManager
@@ -61,5 +63,7 @@ internal class UserModule : IModule {
6163
builder.register<LoginUserFromSubscriptionOperationExecutor>().provides<IOperationExecutor>()
6264
builder.register<RefreshUserOperationExecutor>().provides<IOperationExecutor>()
6365
builder.register<UserManager>().provides<IUserManager>()
66+
67+
builder.register<UserRefreshService>().provides<IStartableService>()
6468
}
6569
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.onesignal.user.internal.service
2+
3+
import com.onesignal.core.internal.application.IApplicationLifecycleHandler
4+
import com.onesignal.core.internal.application.IApplicationService
5+
import com.onesignal.core.internal.config.ConfigModelStore
6+
import com.onesignal.core.internal.operations.IOperationRepo
7+
import com.onesignal.core.internal.startup.IStartableService
8+
import com.onesignal.user.internal.identity.IdentityModelStore
9+
import com.onesignal.user.internal.operations.RefreshUserOperation
10+
11+
// Ensure cache for the user is refreshed once per cold start when app
12+
// is in the foreground. This saves resources as there are a number of
13+
// events (such as push received or non-OneSignal events) that start
14+
// the app in the background but will never read/write any user
15+
// properties.
16+
class UserRefreshService(
17+
private val _applicationService: IApplicationService,
18+
private val _operationRepo: IOperationRepo,
19+
private val _configModelStore: ConfigModelStore,
20+
private val _identityModelStore: IdentityModelStore,
21+
) : IStartableService,
22+
IApplicationLifecycleHandler {
23+
private fun refreshUser() {
24+
_operationRepo.enqueue(
25+
RefreshUserOperation(
26+
_configModelStore.model.appId,
27+
_identityModelStore.model.onesignalId,
28+
),
29+
)
30+
}
31+
32+
override fun start() {
33+
if (_applicationService.isInForeground) {
34+
refreshUser()
35+
} else {
36+
_applicationService.addApplicationLifecycleHandler(this)
37+
}
38+
}
39+
40+
private var onFocusCalled: Boolean = false
41+
42+
override fun onFocus() {
43+
if (onFocusCalled) return
44+
onFocusCalled = true
45+
refreshUser()
46+
}
47+
48+
override fun onUnfocused() { }
49+
}

0 commit comments

Comments
 (0)