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.

Step 1 — Add the dependency

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.

Step 2 — Configure your build

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.

Google Play Services & Firebase

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.

Step 3 — Set your App ID and App Key

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)

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.

Next step

Start a Pulsate session →