Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 50 additions & 3 deletions src/main/kotlin/com/mparticle/kits/AppboyKit.kt
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
var bundleCommerceEvents = false
var isMpidIdentityType = false
var identityType: IdentityType? = null
var subscriptionGroupIds: MutableMap<String, String>? = mutableMapOf()
private val dataFlushHandler = Handler()
private var dataFlushRunnable: Runnable? = null
private var forwardScreenViews = false
Expand Down Expand Up @@ -85,6 +86,9 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
}
}
forwardScreenViews = settings[FORWARD_SCREEN_VIEWS].toBoolean()
subscriptionGroupIds = settings[SUBSCRIPTION_GROUP_MAPPING]?.let {
getSubscriptionGroupIds(it)
}
if (key != null) {
val config = BrazeConfig.Builder().setApiKey(key)
.setSdkFlavor(SdkFlavor.MPARTICLE)
Expand Down Expand Up @@ -318,10 +322,29 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
else value.setGender(Gender.MALE)
}
else -> {
if (key.startsWith("$")) {
key = key.substring(1)
if (subscriptionGroupIds?.containsKey(key) == true) {
val groupId = subscriptionGroupIds?.get(key)
when (attributeValue.lowercase()) {
"true" -> {
groupId?.let { value.addToSubscriptionGroup(it) }
}

"false" -> {
groupId?.let { value.removeFromSubscriptionGroup(it) }
}

else -> {
Logger.warning(
"Unable to set Subscription Group ID for user attribute: $key due to invalid value data type. Expected Boolean."
)
}
}
} else {
if (key.startsWith("$")) {
key = key.substring(1)
}
userAttributeSetter?.parseValue(key, attributeValue)
}
userAttributeSetter?.parseValue(key, attributeValue)
}
}
queueDataFlush()
Expand Down Expand Up @@ -966,6 +989,29 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
return promotionArray
}

private fun getSubscriptionGroupIds(subscriptionGroupMap: String): MutableMap<String, String> {
val subscriptionGroupIds = mutableMapOf<String, String>()

if (subscriptionGroupMap.isEmpty()) {
return subscriptionGroupIds
}

val subscriptionGroupsArray = JSONArray(subscriptionGroupMap)

return try {
for (i in 0 until subscriptionGroupsArray.length()) {
val subscriptionGroup = subscriptionGroupsArray.getJSONObject(i)
val key = subscriptionGroup.getString("map")
val value = subscriptionGroup.getString("value")
subscriptionGroupIds[key] = value
}
subscriptionGroupIds
} catch (e: JSONException) {
Logger.warning("Braze, unable to parse \"subscriptionGroup\"")
mutableMapOf()
}
}

fun getImpressionListParameters(impressionList: List<Impression>): JSONArray {
val impressionArray = JSONArray()
for ((i, impression) in impressionList.withIndex()) {
Expand Down Expand Up @@ -1083,6 +1129,7 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
const val USER_IDENTIFICATION_TYPE = "userIdentificationType"
const val ENABLE_TYPE_DETECTION = "enableTypeDetection"
const val BUNDLE_COMMERCE_EVENTS = "bundleCommerceEventData"
const val SUBSCRIPTION_GROUP_MAPPING = "subscriptionGroupMapping"
const val HOST = "host"
const val PUSH_ENABLED = "push_enabled"
const val NAME = "Appboy"
Expand Down
10 changes: 10 additions & 0 deletions src/test/kotlin/com/braze/BrazeUser.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,16 @@ class BrazeUser {
return true
}

fun addToSubscriptionGroup(key: String): Boolean {
customUserAttributes[key] = true
return true
}

fun removeFromSubscriptionGroup(key: String): Boolean {
customUserAttributes[key] = false
return true
}

fun getCustomAttribute(): HashMap<String, MutableList<String>> {
return customAttributeArray
}
Expand Down
19 changes: 19 additions & 0 deletions src/test/kotlin/com/mparticle/kits/AppboyKitTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,25 @@ class AppboyKitTests {
Assert.assertNull(kit.getCalendarMinusYears(-1))
}

@Test
fun testSetSubscriptionGroupIds() {
val settings = HashMap<String, String>()
settings[AppboyKit.APPBOY_KEY] = "key"
settings[AppboyKit.HOST] = hostName
settings["subscriptionGroupMapping"] = "" +
"[{\"jsmap\":null,\"map\":\"test1\",\"maptype\":\"UserAttributeClass.Name\",\"value\":\"00000000-0000-0000-0000-000000000000\"}," +
"{\"jsmap\":null,\"map\":\"test2\",\"maptype\":\"UserAttributeClass.Name\",\"value\":\"00000000-0000-0000-0000-000000000001\"}," +
"{\"jsmap\":null,\"map\":\"test3\",\"maptype\":\"UserAttributeClass.Name\",\"value\":\"00000000-0000-0000-0000-000000000002\"}]"
val kit = MockAppboyKit()
val currentUser = braze.currentUser

kit.onKitCreate(settings, MockContextApplication())
kit.setUserAttribute("test1", "true");
kit.setUserAttribute("test2", "false");
kit.setUserAttribute("test3", "notABoolean");
Assert.assertEquals(2, currentUser.getCustomUserAttribute().size.toLong())
}

// @Test
// fun testSetUserAttributeAge() {
// val currentYear = Calendar.getInstance()[Calendar.YEAR]
Expand Down
Loading