Skip to content

Commit c6ce5b2

Browse files
committed
Use create subscription instead of transfer subscription for push
* When logging into new users, generate a create-subscription operation for the push subscription instead of enqueueing a transfer subscription operation. The Create Subscription operation has the added benefit of including the whole push subscription's data.
1 parent fb77f5e commit c6ce5b2

File tree

1 file changed

+10
-21
lines changed
  • OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal

1 file changed

+10
-21
lines changed

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

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ import com.onesignal.user.internal.identity.IdentityModel
4444
import com.onesignal.user.internal.identity.IdentityModelStore
4545
import com.onesignal.user.internal.operations.LoginUserFromSubscriptionOperation
4646
import com.onesignal.user.internal.operations.LoginUserOperation
47-
import com.onesignal.user.internal.operations.TransferSubscriptionOperation
4847
import com.onesignal.user.internal.properties.PropertiesModel
4948
import com.onesignal.user.internal.properties.PropertiesModelStore
5049
import com.onesignal.user.internal.subscriptions.SubscriptionModel
@@ -467,10 +466,8 @@ internal class OneSignalImp : IOneSignal, IServiceProvider {
467466
// to the queue.
468467
val currentPushSubscription = subscriptionModelStore!!.list().firstOrNull { it.id == configModel!!.pushSubscriptionId }
469468
val newPushSubscription = SubscriptionModel()
470-
val localSubscriptionID = IDManager.createLocalId()
471-
val currentSubscriptionID = currentPushSubscription?.id ?: localSubscriptionID
472469

473-
newPushSubscription.id = currentSubscriptionID
470+
newPushSubscription.id = currentPushSubscription?.id ?: IDManager.createLocalId()
474471
newPushSubscription.type = SubscriptionType.PUSH
475472
newPushSubscription.optedIn = currentPushSubscription?.optedIn ?: true
476473
newPushSubscription.address = currentPushSubscription?.address ?: ""
@@ -480,6 +477,11 @@ internal class OneSignalImp : IOneSignal, IServiceProvider {
480477
newPushSubscription.carrier = DeviceUtils.getCarrierName(services.getService<IApplicationService>().appContext) ?: ""
481478
newPushSubscription.appVersion = AndroidUtils.getAppVersion(services.getService<IApplicationService>().appContext) ?: ""
482479

480+
// ensure we always know this devices push subscription ID
481+
configModel!!.pushSubscriptionId = newPushSubscription.id
482+
483+
subscriptions.add(newPushSubscription)
484+
483485
// The next 4 lines makes this user the effective user locally. We clear the subscriptions
484486
// first as a `NO_PROPOGATE` change because we don't want to drive deleting the cleared subscriptions
485487
// on the backend. Once cleared we can then setup the new identity/properties model, and add
@@ -488,24 +490,11 @@ internal class OneSignalImp : IOneSignal, IServiceProvider {
488490
identityModelStore!!.replace(identityModel)
489491
propertiesModelStore!!.replace(propertiesModel)
490492

491-
var changeTag = ModelChangeTags.NO_PROPOGATE
492-
493-
if (!suppressBackendOperation) {
494-
if (currentPushSubscription?.id != null && identityModel.externalId != null) {
495-
// add a transfer-subscription operation when switching user
496-
operationRepo!!.enqueue(TransferSubscriptionOperation(configModel!!.appId, currentPushSubscription.id, sdkId))
497-
} else {
498-
// reset subscription when calling logout or login for the first time
499-
newPushSubscription.id = localSubscriptionID
500-
changeTag = ModelChangeTags.NORMAL
501-
}
493+
if (suppressBackendOperation) {
494+
subscriptionModelStore!!.replaceAll(subscriptions, ModelChangeTags.NO_PROPOGATE)
495+
} else {
496+
subscriptionModelStore!!.replaceAll(subscriptions)
502497
}
503-
504-
// ensure we always know this devices push subscription ID
505-
configModel!!.pushSubscriptionId = newPushSubscription.id
506-
507-
subscriptions.add(newPushSubscription)
508-
subscriptionModelStore!!.replaceAll(subscriptions, changeTag)
509498
}
510499

511500
override fun <T> hasService(c: Class<T>): Boolean = services.hasService(c)

0 commit comments

Comments
 (0)