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
30 changes: 30 additions & 0 deletions src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,9 @@ class AppsFlyerKit :
MParticle.getInstance()?.environment == MParticle.Environment.Development,
)
settings[DEV_KEY]?.let { AppsFlyerLib.getInstance().init(it, this, context) }
setting?.get(SHARING_FILTER_FOR_PARTNERS)?.let {
applySharingFilterForPartners(it)
}
val userConsentState = currentUser?.consentState
setConsent(userConsentState)
AppsFlyerLib.getInstance().start(context.applicationContext)
Expand Down Expand Up @@ -575,6 +578,32 @@ class AppsFlyerKit :

override fun onActivityDestroyed(activity: Activity): List<ReportingMessage> = emptyList()

override fun onSettingsUpdated(settings: Map<String, String>) {
settings[SHARING_FILTER_FOR_PARTNERS]?.let { applySharingFilterForPartners(it) }
}

private fun applySharingFilterForPartners(jsonValue: String) {
val partners = parseSharingFilterForPartners(jsonValue)
if (!partners.isNullOrEmpty()) {
instance.setSharingFilterForPartners(*partners.toTypedArray())
}
}

private fun parseSharingFilterForPartners(json: String?): List<String>? {
if (json.isNullOrEmpty()) return null
return try {
val jsonWithFormat = json.replace("\\", "")
val array = JSONArray(jsonWithFormat)
List(array.length()) { i -> array.getString(i) }
} catch (e: JSONException) {
Logger.warning(
"AppsFlyer kit: failed to parse sharingFilterForPartners, " +
"consent filter for partners will not be applied. Error: ${e.message}",
)
null
}
}

companion object {
const val DEV_KEY = "devKey"
const val APPSFLYERID_INTEGRATION_KEY = "appsflyer_id_integration_setting"
Expand All @@ -601,6 +630,7 @@ class AppsFlyerKit :
}
}

private const val SHARING_FILTER_FOR_PARTNERS = "sharingFilterForPartners"
private const val CONSENT_MAPPING = "consentMapping"

@Suppress("ktlint:standard:property-naming")
Expand Down
51 changes: 51 additions & 0 deletions src/test/kotlin/com/mparticle/kits/AppsflyerKitTests.kt
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,57 @@ class AppsflyerKitTests {
Assert.assertTrue(name.isNotEmpty())
}

@Test
@Throws(Exception::class)
fun testParseSharingFilterForPartners_returnsListForValidJson() {
val method =
AppsFlyerKit::class.java.getDeclaredMethod(
"parseSharingFilterForPartners",
String::class.java,
)
method.isAccessible = true
val result = method.invoke(kit, """["partner_1", "partner_2"]""")
Assert.assertEquals(listOf("partner_1", "partner_2"), result)
}

@Test
@Throws(Exception::class)
fun testParseSharingFilterForPartners_returnsNullForEmptyInput() {
val method =
AppsFlyerKit::class.java.getDeclaredMethod(
"parseSharingFilterForPartners",
String::class.java,
)
method.isAccessible = true
Assert.assertNull(method.invoke(kit, ""))
Assert.assertNull(method.invoke(kit, null))
}

@Test
@Throws(Exception::class)
fun testParseSharingFilterForPartners_returnsNullForInvalidJson() {
val method =
AppsFlyerKit::class.java.getDeclaredMethod(
"parseSharingFilterForPartners",
String::class.java,
)
method.isAccessible = true
Assert.assertNull(method.invoke(kit, "not a json array"))
}

@Test
@Throws(Exception::class)
fun testParseSharingFilterForPartners_stripsBackslashes() {
val method =
AppsFlyerKit::class.java.getDeclaredMethod(
"parseSharingFilterForPartners",
String::class.java,
)
method.isAccessible = true
val result = method.invoke(kit, """[\"test_1\", \"test_2\"]""")
Assert.assertEquals(listOf("test_1", "test_2"), result)
}

/**
* Kit *should* throw an exception when they're initialized with the wrong settings.
*
Expand Down