-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #102 from IABTechLab/dave/euid-gma
EUID Support for GMA Plugin
- Loading branch information
Showing
9 changed files
with
165 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
securesignals-gma-dev-app/src/main/java/com/uid2/dev/utils/BundleEx.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.uid2.dev.utils | ||
|
||
import android.os.Bundle | ||
|
||
private const val UID2_ENVIRONMENT_EUID = "uid2_environment_euid" | ||
|
||
fun Bundle.isEnvironmentEUID(): Boolean = getBoolean(UID2_ENVIRONMENT_EUID, false) |
10 changes: 10 additions & 0 deletions
10
securesignals-gma-dev-app/src/main/java/com/uid2/dev/utils/ContextEx.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package com.uid2.dev.utils | ||
|
||
import android.content.Context | ||
import android.content.pm.PackageManager | ||
import android.os.Bundle | ||
|
||
fun Context.getMetadata(): Bundle = packageManager.getApplicationInfoCompat( | ||
packageName, | ||
PackageManager.GET_META_DATA, | ||
).metaData |
14 changes: 14 additions & 0 deletions
14
securesignals-gma-dev-app/src/main/java/com/uid2/dev/utils/PackageManagerEx.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package com.uid2.dev.utils | ||
|
||
import android.content.pm.ApplicationInfo | ||
import android.content.pm.PackageManager | ||
import android.os.Build | ||
|
||
fun PackageManager.getApplicationInfoCompat(packageName: String, flags: Int = 0): ApplicationInfo = | ||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { | ||
@Suppress("WrongConstant") | ||
getApplicationInfo(packageName, PackageManager.ApplicationInfoFlags.of(flags.toLong())) | ||
} else { | ||
@Suppress("DEPRECATION") | ||
getApplicationInfo(packageName, flags) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
76 changes: 76 additions & 0 deletions
76
securesignals-gma/src/main/java/com/uid2/securesignals/gma/EUIDMediationAdapter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
package com.uid2.securesignals.gma | ||
|
||
import android.content.Context | ||
import com.google.android.gms.ads.AdError | ||
import com.google.android.gms.ads.mediation.InitializationCompleteCallback | ||
import com.google.android.gms.ads.mediation.MediationConfiguration | ||
import com.google.android.gms.ads.mediation.rtb.RtbAdapter | ||
import com.google.android.gms.ads.mediation.rtb.RtbSignalData | ||
import com.google.android.gms.ads.mediation.rtb.SignalCallbacks | ||
import com.uid2.EUIDManager | ||
import com.uid2.UID2 | ||
import com.google.android.gms.ads.mediation.VersionInfo as GmaVersionInfo | ||
|
||
/** | ||
* An implementation of Google's GMS RtbAdapter that integrates UID2 tokens, accessed via the UID2Manager. | ||
*/ | ||
public class EUIDMediationAdapter : RtbAdapter() { | ||
|
||
/** | ||
* Gets the version of the UID2 SDK. | ||
*/ | ||
@Suppress("DEPRECATION") | ||
public override fun getSDKVersionInfo(): GmaVersionInfo = UID2.getVersionInfo().let { | ||
GmaVersionInfo(it.major, it.minor, it.patch) | ||
} | ||
|
||
/** | ||
* Gets the version of the UID2 Secure Signals plugin. | ||
*/ | ||
@Suppress("DEPRECATION") | ||
public override fun getVersionInfo(): GmaVersionInfo = PluginVersion.getVersionInfo().let { | ||
GmaVersionInfo(it.major, it.minor, it.patch) | ||
} | ||
|
||
/** | ||
* Initialises the UID2 SDK with the given Context. | ||
*/ | ||
override fun initialize( | ||
context: Context, | ||
initializationCompleteCallback: InitializationCompleteCallback, | ||
mediationConfigurations: MutableList<MediationConfiguration>, | ||
) { | ||
// It's possible that the UID2Manager is already initialised. If so, it's a no-op. | ||
if (!EUIDManager.isInitialized()) { | ||
EUIDManager.init(context) | ||
} | ||
|
||
// After we've asked to initialize the manager, we should wait until it's complete before reporting success. | ||
// This will potentially allow any previously persisted identity to be fully restored before we allow any | ||
// signals to be collected. | ||
EUIDManager.getInstance().addOnInitializedListener(initializationCompleteCallback::onInitializationSucceeded) | ||
} | ||
|
||
/** | ||
* Collects the UID2 advertising token, if available. | ||
*/ | ||
override fun collectSignals(rtbSignalData: RtbSignalData, signalCallbacks: SignalCallbacks) { | ||
EUIDManager.getInstance().let { manager -> | ||
val token = manager.getAdvertisingToken() | ||
if (token != null) { | ||
signalCallbacks.onSuccess(token) | ||
} else { | ||
// We include the IdentityStatus in the "error" to have better visibility on why the Advertising Token | ||
// was not present. There are a number of valid reasons why we don't have a token, but we are still | ||
// required to report these as "failures". | ||
signalCallbacks.onFailure( | ||
AdError( | ||
manager.currentIdentityStatus.value, | ||
"No Advertising Token", | ||
"UID2", | ||
), | ||
) | ||
} | ||
} | ||
} | ||
} |
29 changes: 29 additions & 0 deletions
29
securesignals-gma/src/test/java/com/uid2/securesignals/gma/EUIDMediationAdapterTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package com.uid2.securesignals.gma | ||
|
||
import com.uid2.UID2 | ||
import org.junit.Assert | ||
import org.junit.Test | ||
|
||
class EUIDMediationAdapterTest { | ||
@Test | ||
fun `test SDK version`() { | ||
val adapter = EUIDMediationAdapter() | ||
val version = adapter.versionInfo | ||
val expectedVersion = UID2.getVersionInfo() | ||
|
||
Assert.assertEquals(expectedVersion.major, version.majorVersion) | ||
Assert.assertEquals(expectedVersion.minor, version.minorVersion) | ||
Assert.assertEquals(expectedVersion.patch, version.microVersion) | ||
} | ||
|
||
@Test | ||
fun `test plugin version`() { | ||
val adapter = EUIDMediationAdapter() | ||
val version = adapter.sdkVersionInfo | ||
val expectedVersion = PluginVersion.getVersionInfo() | ||
|
||
Assert.assertEquals(expectedVersion.major, version.majorVersion) | ||
Assert.assertEquals(expectedVersion.minor, version.minorVersion) | ||
Assert.assertEquals(expectedVersion.patch, version.microVersion) | ||
} | ||
} |