From ffa634ae6c7b66cdf7e182274a59e7db223ad51a Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Thu, 26 Sep 2024 13:40:53 -0400 Subject: [PATCH] calling logout disable push subscription --- .../com/onesignal/internal/OneSignalImp.kt | 24 +++++++++++++------ .../SubscriptionModelStoreListener.kt | 17 +++++++++---- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt index 4e0d71dd55..ef08a6c05b 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt @@ -48,6 +48,7 @@ import com.onesignal.user.internal.identity.IdentityModelStore import com.onesignal.user.internal.operations.LoginUserFromSubscriptionOperation import com.onesignal.user.internal.operations.LoginUserOperation import com.onesignal.user.internal.operations.TransferSubscriptionOperation +import com.onesignal.user.internal.operations.UpdateSubscriptionOperation import com.onesignal.user.internal.properties.PropertiesModel import com.onesignal.user.internal.properties.PropertiesModelStore import com.onesignal.user.internal.subscriptions.SubscriptionModel @@ -426,13 +427,22 @@ internal class OneSignalImp : IOneSignal, IServiceProvider { // calling createAndSwitchToNewUser() replaces model with a default empty jwt createAndSwitchToNewUser() - operationRepo!!.enqueue( - LoginUserOperation( - configModel!!.appId, - identityModelStore!!.model.onesignalId, - identityModelStore!!.model.externalId, - ), - ) + + if (useIdentityVerification) { + // disable subscription if identity verification is on + operationRepo!!.enqueue( + UpdateSubscriptionOperation(), + ) + } else { + // login to the anonymous user if identity verification is off + operationRepo!!.enqueue( + LoginUserOperation( + configModel!!.appId, + identityModelStore!!.model.onesignalId, + identityModelStore!!.model.externalId, + ), + ) + } } } diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/impl/listeners/SubscriptionModelStoreListener.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/impl/listeners/SubscriptionModelStoreListener.kt index f0002940e9..cb6136797a 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/impl/listeners/SubscriptionModelStoreListener.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/impl/listeners/SubscriptionModelStoreListener.kt @@ -19,7 +19,7 @@ internal class SubscriptionModelStoreListener( private val _configModelStore: ConfigModelStore, ) : ModelStoreListener(store, opRepo) { override fun getAddOperation(model: SubscriptionModel): Operation { - val enabledAndStatus = getSubscriptionEnabledAndStatus(model) + val enabledAndStatus = getSubscriptionEnabledAndStatus(model, _identityModelStore, _configModelStore) return CreateSubscriptionOperation( _configModelStore.model.appId, _identityModelStore.model.onesignalId, @@ -42,7 +42,7 @@ internal class SubscriptionModelStoreListener( oldValue: Any?, newValue: Any?, ): Operation { - val enabledAndStatus = getSubscriptionEnabledAndStatus(model) + val enabledAndStatus = getSubscriptionEnabledAndStatus(model, _identityModelStore, _configModelStore) return UpdateSubscriptionOperation( _configModelStore.model.appId, _identityModelStore.model.onesignalId, @@ -55,11 +55,20 @@ internal class SubscriptionModelStoreListener( } companion object { - fun getSubscriptionEnabledAndStatus(model: SubscriptionModel): Pair { + fun getSubscriptionEnabledAndStatus( + model: SubscriptionModel, + identityModelStore: IdentityModelStore, + configModelStore: ConfigModelStore, + ): Pair { val status: SubscriptionStatus val enabled: Boolean - if (model.optedIn && model.status == SubscriptionStatus.SUBSCRIBED && model.address.isNotEmpty()) { + /* + When identity verification is off, we can enable the subscription regardless of the login status. + When identity verification is on, the subscription is enabled only when a user is currently logged in. + */ + val isUserLoggedInWhenIdentityRequired = !configModelStore.model.useIdentityVerification || !identityModelStore.model.externalId.isNullOrEmpty() + if (isUserLoggedInWhenIdentityRequired && model.optedIn && model.status == SubscriptionStatus.SUBSCRIBED && model.address.isNotEmpty()) { enabled = true status = SubscriptionStatus.SUBSCRIBED } else {