Skip to content

Installing the Pulsate SDK

The Pulsate Android SDK connects your customers’ devices to the Pulsate platform. Installation takes about 5 minutes.

Requirements: PulsateSDK 4.8.4 supports Android API 28–36 (minSdk 28, targetSdk/compileSdk 36) and Java 17.

The SDK is published on Maven Central. Make sure mavenCentral() is in your repositories:

settings.gradle
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}

Add the SDK to your app module:

dependencies {
implementation 'com.pulsatehq.sdk:PulsateSdk:4.8.4'
}

All published versions are listed in the Release Notes and on Maven Central.

Your app must meet these build settings:

android {
compileSdk 36
defaultConfig {
minSdkVersion 28
targetSdkVersion 36
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
}

Use Android Gradle Plugin 8.12.3 or newer.

The SDK depends on these Google libraries (pulled in transitively — you only need to declare them yourself if you want to align versions):

implementation "com.google.android.gms:play-services-location:21.3.0"
implementation "com.google.android.gms:play-services-maps:19.0.0"
implementation 'com.google.maps.android:android-maps-utils:3.9.0'
implementation platform('com.google.firebase:firebase-bom:34.3.0')
implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-storage'

The full dependency list is on the Dependencies page.

Your credentials are in the Pulsate CMS under Settings → App Settings → SDK Connect. Both are 64-character strings.

Option A — AndroidManifest.xml (the SDK picks them up automatically):

<application>
<meta-data
android:name="PulsateAppId"
android:value="YOUR_64_CHAR_APP_ID" />
<meta-data
android:name="PulsateAppKey"
android:value="YOUR_64_CHAR_APP_KEY" />
</application>

Option B — in code (e.g. if you switch environments at runtime):

val authData = PulsateAuthData("YOUR_64_CHAR_APP_ID", "YOUR_64_CHAR_APP_KEY")
val pulsateManager = PulsateFactory.getInstance(authData)

PulsateAuthData validates that both values are exactly 64 characters and throws if they are not. PulsateFactory.getInstance(authData) returns null if either value is empty or contains spaces.

Step 4 — Manifest merger (only if you override merge strategy)

Section titled “Step 4 — Manifest merger (only if you override merge strategy)”

The SDK ships its own AndroidManifest.xml, which Gradle merges into your app automatically — including required permissions (INTERNET, ACCESS_NETWORK_STATE, location permissions, POST_NOTIFICATIONS, etc.), the Pulsate content provider, receivers, and the FCM service.

If you use tools:node="replace" or otherwise override the merger, you must add the SDK’s manifest entries manually — contact Pulsate support for the current full list, or inspect the SDK’s merged manifest in Android Studio (Merged Manifest tab).

Note: the SDK declares location permissions in its manifest. If your app does not use geofencing and you want to remove them from your final APK, use tools:node="remove" on the specific permissions.

Start a Pulsate session →