Android Kotlin SDK - One-page setup
Create your app and get the key
- Log in to
testernest.comand create an app. - Copy the
publicKeyfrom your app settings. - Copy the
baseUrlfrom SDK Setup for your environment.
1) Install
In settings.gradle.kts (recommended):
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
Then in app/build.gradle.kts:
dependencies {
implementation("com.testernest:testernest-android:0.1.3")
}
Minimum supported versions: Android SDK 21+, Kotlin 1.6+.
2) Permissions
In AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3) Initialize
Create or reuse your Application class and initialize once on app start:
import android.app.Application
import com.testernest.android.Testernest
class App : Application() {
override fun onCreate() {
super.onCreate()
Testernest.init(
context = this,
publicKey = "YOUR_PUBLIC_KEY",
baseUrl = "https://testernest.com",
enableLogs = BuildConfig.DEBUG
)
}
}
Register it in AndroidManifest.xml:
<application
android:name=".App"
...>
</application>
4) Connect tester (6-digit code)
Recommended: show the auto-connect prompt in onResume() when the user is not connected yet.
override fun onResume() {
super.onResume()
Testernest.attachAutoConnectPrompt(this, config = connectPromptConfig)
}
The prompt appears until a tester is connected, then it stops showing.
Manual fallback:
fun onConnectCodeEntered(code6: String) {
Testernest.connectTester(code6)
}
5) Track screens + events (minimal)
Use one canonical screen name per screen and semantic event names.
override fun onResume() {
super.onResume()
Testernest.setCurrentScreen("Home")
}
fun onScreen1TileTapped() {
Testernest.logEvent(
"navigate",
mapOf(
"from" to "Home",
"to" to "Screen 1",
"element_id" to "tileScreen1"
)
)
}
Naming guidance:
- Keep one canonical name per screen (for example:
Home,Screen 1,Settings). - Use semantic event names and stable properties (for example:
navigate,tap,element_id).
Call Testernest.flushNow() when you need to force-send buffered events (for example, before app shutdown in debug sessions).
6) Verify
Filter Logcat for the following tags:
BOOTSTRAPCLAIMBATCH
Success signals:
BOOTSTRAP: key accepted and SDK initializedCLAIM 200: tester code connectedBATCH 200: events uploaded successfully
Troubleshooting
- Invalid code: Generate a fresh 6-digit code and try again.
- Still failing: Confirm your
publicKeybelongs to the same app in the dashboard. - No logs: Verify initialization runs before the prompt is shown.