Skip to content

Commit f1d204e

Browse files
committed
Modify create user operation to send less associated info
* Let's send less data into a create user request to minimize changes that other information in the request payload causes the create user request to fail. * At time of writing, common failure cases are subscriptions over limit or tags over limit. * We won't combine alias, tags, and properties operations to the create user operation. * Ideally we only want to combine the push subscription operations and not any sms or email operations to the create user operation, but it will require more changes to the SDK. * For now, we will send any subscription operations with the create user operation, but no tags, aliases, or properties.
1 parent 97a2bce commit f1d204e

File tree

8 files changed

+9
-36
lines changed

8 files changed

+9
-36
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ interface IUserBackendService {
1212
* @param appId The ID of the OneSignal application this user will be created under.
1313
* @param identities The identities to retrieve/modify this user in subsequent requests. Each identity key/value pair must be unique within
1414
* the application.
15-
* @param properties The properties for this user.
1615
* @param subscriptions The subscriptions that should also be created and associated with the user. If subscriptions are already owned by a different user
1716
* they will be transferred to this user.
1817
*
1918
* @return The backend response
2019
*/
21-
suspend fun createUser(appId: String, identities: Map<String, String>, properties: PropertiesObject, subscriptions: List<SubscriptionObject>): CreateUserResponse
20+
suspend fun createUser(appId: String, identities: Map<String, String>, subscriptions: List<SubscriptionObject>): CreateUserResponse
21+
// TODO: Change to send only the push subscription, optimally
2222

2323
/**
2424
* Update the user identified by the [appId]/[aliasId]/[aliasLabel] on the backend.

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,13 @@ internal class UserBackendService(
1414
private val _httpClient: IHttpClient,
1515
) : IUserBackendService {
1616

17-
override suspend fun createUser(appId: String, identities: Map<String, String>, properties: PropertiesObject, subscriptions: List<SubscriptionObject>): CreateUserResponse {
17+
override suspend fun createUser(appId: String, identities: Map<String, String>, subscriptions: List<SubscriptionObject>): CreateUserResponse {
1818
val requestJSON = JSONObject()
1919

2020
if (identities.isNotEmpty()) {
2121
requestJSON.put("identity", JSONObject().putMap(identities))
2222
}
2323

24-
if (properties.hasAtLeastOnePropertySet) {
25-
requestJSON.put("properties", JSONConverter.convertToJSON(properties))
26-
}
27-
2824
if (subscriptions.isNotEmpty()) {
2925
requestJSON
3026
.put("subscriptions", JSONConverter.convertToJSON(subscriptions))

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/DeleteAliasOperation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class DeleteAliasOperation() : Operation(IdentityOperationExecutor.DELETE_ALIAS)
3131
get() = getStringProperty(::label.name)
3232
private set(value) { setStringProperty(::label.name, value) }
3333

34-
override val createComparisonKey: String get() = "$appId.User.$onesignalId"
34+
override val createComparisonKey: String get() = ""
3535
override val modifyComparisonKey: String get() = "$appId.User.$onesignalId.Alias.$label"
3636
override val groupComparisonType: GroupComparisonType = GroupComparisonType.NONE
3737
override val canStartExecute: Boolean get() = !IDManager.isLocalId(onesignalId)

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/DeleteTagOperation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class DeleteTagOperation() : Operation(UpdateUserOperationExecutor.DELETE_TAG) {
3232
get() = getStringProperty(::key.name)
3333
private set(value) { setStringProperty(::key.name, value) }
3434

35-
override val createComparisonKey: String get() = "$appId.User.$onesignalId"
35+
override val createComparisonKey: String get() = ""
3636
override val modifyComparisonKey: String get() = createComparisonKey
3737
override val groupComparisonType: GroupComparisonType = GroupComparisonType.ALTER
3838
override val canStartExecute: Boolean get() = !IDManager.isLocalId(onesignalId)

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/SetAliasOperation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class SetAliasOperation() : Operation(IdentityOperationExecutor.SET_ALIAS) {
3939
get() = getStringProperty(::value.name)
4040
private set(value) { setStringProperty(::value.name, value) }
4141

42-
override val createComparisonKey: String get() = "$appId.User.$onesignalId"
42+
override val createComparisonKey: String get() = ""
4343
override val modifyComparisonKey: String get() = "$appId.User.$onesignalId.Identity.$label"
4444
override val groupComparisonType: GroupComparisonType = GroupComparisonType.ALTER
4545
override val canStartExecute: Boolean get() = !IDManager.isLocalId(onesignalId)

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/SetPropertyOperation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class SetPropertyOperation() : Operation(UpdateUserOperationExecutor.SET_PROPERT
3838
get() = getOptAnyProperty(::value.name)
3939
private set(value) { setOptAnyProperty(::value.name, value) }
4040

41-
override val createComparisonKey: String get() = "$appId.User.$onesignalId"
41+
override val createComparisonKey: String get() = ""
4242
override val modifyComparisonKey: String get() = createComparisonKey
4343
override val groupComparisonType: GroupComparisonType = GroupComparisonType.ALTER
4444
override val canStartExecute: Boolean get() = !IDManager.isLocalId(onesignalId)

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/SetTagOperation.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class SetTagOperation() : Operation(UpdateUserOperationExecutor.SET_TAG) {
3939
get() = getStringProperty(::value.name)
4040
private set(value) { setStringProperty(::value.name, value) }
4141

42-
override val createComparisonKey: String get() = "$appId.User.$onesignalId"
42+
override val createComparisonKey: String get() = ""
4343
override val modifyComparisonKey: String get() = createComparisonKey
4444
override val groupComparisonType: GroupComparisonType = GroupComparisonType.ALTER
4545
override val canStartExecute: Boolean get() = !IDManager.isLocalId(onesignalId)

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/impl/executors/LoginUserOperationExecutor.kt

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,13 @@ import com.onesignal.core.internal.operations.Operation
1818
import com.onesignal.debug.internal.logging.Logging
1919
import com.onesignal.user.internal.backend.IUserBackendService
2020
import com.onesignal.user.internal.backend.IdentityConstants
21-
import com.onesignal.user.internal.backend.PropertiesObject
2221
import com.onesignal.user.internal.backend.SubscriptionObject
2322
import com.onesignal.user.internal.backend.SubscriptionObjectType
2423
import com.onesignal.user.internal.identity.IdentityModelStore
2524
import com.onesignal.user.internal.operations.CreateSubscriptionOperation
26-
import com.onesignal.user.internal.operations.DeleteAliasOperation
2725
import com.onesignal.user.internal.operations.DeleteSubscriptionOperation
28-
import com.onesignal.user.internal.operations.DeleteTagOperation
2926
import com.onesignal.user.internal.operations.LoginUserOperation
3027
import com.onesignal.user.internal.operations.SetAliasOperation
31-
import com.onesignal.user.internal.operations.SetPropertyOperation
32-
import com.onesignal.user.internal.operations.SetTagOperation
3328
import com.onesignal.user.internal.operations.TransferSubscriptionOperation
3429
import com.onesignal.user.internal.operations.UpdateSubscriptionOperation
3530
import com.onesignal.user.internal.properties.PropertiesModel
@@ -103,7 +98,6 @@ internal class LoginUserOperationExecutor(
10398

10499
private suspend fun createUser(createUserOperation: LoginUserOperation, operations: List<Operation>): ExecutionResponse {
105100
var identities = mapOf<String, String>()
106-
var propertiesObject = PropertiesObject()
107101
var subscriptions = mapOf<String, SubscriptionObject>()
108102

109103
if (createUserOperation.externalId != null) {
@@ -115,21 +109,16 @@ internal class LoginUserOperationExecutor(
115109
// go through the operations grouped with this create user and apply them to the appropriate objects.
116110
for (operation in operations) {
117111
when (operation) {
118-
is SetAliasOperation -> identities = createIdentityFromOperation(operation, identities)
119-
is DeleteAliasOperation -> identities = createIdentityFromOperation(operation, identities)
120112
is CreateSubscriptionOperation -> subscriptions = createSubscriptionsFromOperation(operation, subscriptions)
121113
is TransferSubscriptionOperation -> subscriptions = createSubscriptionsFromOperation(operation, subscriptions)
122114
is UpdateSubscriptionOperation -> subscriptions = createSubscriptionsFromOperation(operation, subscriptions)
123115
is DeleteSubscriptionOperation -> subscriptions = createSubscriptionsFromOperation(operation, subscriptions)
124-
is SetTagOperation -> propertiesObject = PropertyOperationHelper.createPropertiesFromOperation(operation, propertiesObject)
125-
is DeleteTagOperation -> propertiesObject = PropertyOperationHelper.createPropertiesFromOperation(operation, propertiesObject)
126-
is SetPropertyOperation -> propertiesObject = PropertyOperationHelper.createPropertiesFromOperation(operation, propertiesObject)
127116
}
128117
}
129118

130119
try {
131120
val subscriptionList = subscriptions.toList()
132-
val response = _userBackend.createUser(createUserOperation.appId, identities, propertiesObject, subscriptionList.map { it.second })
121+
val response = _userBackend.createUser(createUserOperation.appId, identities, subscriptionList.map { it.second })
133122
val idTranslations = mutableMapOf<String, String>()
134123
// Add the "local-to-backend" ID translation to the IdentifierTranslator for any operations that were
135124
// *not* executed but still reference the locally-generated IDs.
@@ -181,18 +170,6 @@ internal class LoginUserOperationExecutor(
181170
}
182171
}
183172

184-
private fun createIdentityFromOperation(operation: SetAliasOperation, identity: Map<String, String>): Map<String, String> {
185-
val mutableIdentity = identity.toMutableMap()
186-
mutableIdentity[operation.label] = operation.value
187-
return mutableIdentity
188-
}
189-
190-
private fun createIdentityFromOperation(operation: DeleteAliasOperation, identity: Map<String, String>): Map<String, String> {
191-
val mutableIdentity = identity.toMutableMap()
192-
mutableIdentity.remove(operation.label)
193-
return mutableIdentity
194-
}
195-
196173
private fun createSubscriptionsFromOperation(operation: TransferSubscriptionOperation, subscriptions: Map<String, SubscriptionObject>): Map<String, SubscriptionObject> {
197174
val mutableSubscriptions = subscriptions.toMutableMap()
198175
if (mutableSubscriptions.containsKey(operation.subscriptionId)) {

0 commit comments

Comments
 (0)