Sprig Device Mode Integration

Send events to Sprig using RudderStack device mode.

Send your events to Sprig in web and mobile device mode using the native Sprig SDK.

Find the open source code for this integration below:

Add mobile device mode integration

Once you add Sprig as a destination in the RudderStack dashboard, follow these steps to add it to your mobile project depending on your integration platform:

Follow the steps in this section to add Sprig to your Android project using the new Android (Kotlin) SDK:

1. Add dependencies

In your module (app-level) Gradle file (usually <project>/<app-module>/build.gradle.kts or <project>/<app-module>/build.gradle), add the following dependencies:

kotlin
dependencies {
    // RudderStack Kotlin SDK
    implementation("com.rudderstack.sdk.kotlin:android:<latest_version>")

    // RudderStack Sprig integration
    implementation("com.rudderstack.integration.kotlin:sprig:<latest_version>")
}
This integration pulls in the Sprig (UserLeap) Android SDK in the version range 2.23.0 to 3.0.0.

2. Intialize the SDK and the integration

  1. Keep a reference to the SprigIntegration instance — it is needed to present the in-app surveys (explained in Step 3):
kotlin
import android.app.Application
import com.rudderstack.integration.kotlin.sprig.SprigIntegration
import com.rudderstack.sdk.kotlin.android.Analytics
import com.rudderstack.sdk.kotlin.android.Configuration

object RudderAnalyticsUtils {

    lateinit var analytics: Analytics
    val sprigIntegration = SprigIntegration()

    fun initialize(application: Application) {
        analytics = Analytics(
            configuration = Configuration(
                writeKey = "<WRITE_KEY>",
                application = application,
                dataPlaneUrl = "<DATA_PLANE_URL>",
            )
        )
        analytics.add(sprigIntegration)
    }
}
  1. Call RudderAnalyticsUtils.initialize(this) from your Application.onCreate():
kotlin
class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        RudderAnalyticsUtils.initialize(this)
    }
}

3. Present in-app surveys

Sprig presents in-app surveys on a FragmentActivity instance. For surveys to render, you need to tell the integration which activity is currently in the foreground, from the activity’s lifecycle callbacks:

If no activity is set, the integration falls back to Sprig.track and the survey is not presented — the event is still delivered to Sprig.
kotlin
import android.os.Bundle
import androidx.fragment.app.FragmentActivity
import com.rudderstack.sampleapp.analytics.RudderAnalyticsUtils

class MainActivity : FragmentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    override fun onResume() {
        super.onResume()
        RudderAnalyticsUtils.sprigIntegration.setFragmentActivity(this)
    }

    override fun onPause() {
        RudderAnalyticsUtils.sprigIntegration.setFragmentActivity(null)
        super.onPause()
    }
}

Identify

You can use the identify call to identify a user in Sprig.

A sample identify call is shown:

javascript
rudderanalytics.identify('1hKOmRA4GRlm', {
  firstName: 'Alex',
  lastName: 'Keener',
  email: "alex@example.com"
});

Supported mappings

RudderStack maps the following optional user attributes in the identify events to the corresponding Sprig fields:

RudderStack propertySprig property
userIduserId
context.traitsattributes
context.traits.emailemail

Track

The track call lets you record any user actions along with the associated properties.

A sample track call is shown:

javascript
rudderanalytics.track('Sample Survey', {
  plan: "Annual",
  accountType: "Pro"
});

If you send a track event called Signed Out, then RudderStack automatically maps it to the logoutUser event before sending it to Sprig. Otherwise, it maps the following event/properties to the corresponding Sprig fields:

RudderStack propertySprig property
event
Required
eventName
userIduserId
propertiesproperties

Sprig expects the event name to be present in the eventName key. Hence, if you send a track event named Product Added, RudderStack maps it to Sprig’s eventName key before sending it across to Sprig.

To display the survey, you must pass the ViewController instance for iOS and the FragmentActivity instance for Android, otherwise the survey won’t be displayed.

If you do not want to display the survey, you can skip setting FragmentActivity or ViewController. RudderStack then forwards the call to the Sprig.track API instead of Sprig.trackAndPresent.

Reset

The reset method resets the previously identified user and related information.

A sample reset call is shown:

kotlin
analytics.reset()

Logging

Both the Android (Kotlin) and iOS (Swift) SDK integrations forward the Sprig SDK’s internal log messages to the RudderStack logger, so they appear alongside the rest of your SDK output.

Android (Kotlin)

The Sprig Android SDK emits log messages with a severity (DEBUG, INFO, WARNING, ERROR, CRITICAL). The integration forwards each message to the RudderStack logger at the mapped severity, so Sprig output honours the log level you configure on the SDK.

Set the log level in Configuration when you initialize the SDK:

kotlin
import com.rudderstack.sdk.kotlin.android.Configuration
import com.rudderstack.sdk.kotlin.core.internals.logger.Logger

val config = Configuration(
    writeKey = "<WRITE_KEY>",
    dataPlaneUrl = "<DATA_PLANE_URL>",
    logLevel = Logger.LogLevel.VERBOSE,
)

When the log level is Logger.LogLevel.NONE, the integration skips listener registration entirely and no Sprig output is forwarded.

iOS (Swift)

The Sprig iOS SDK emits log messages without a severity (its loggingEvent callback only carries a message string), so the integration forwards every Sprig message at the verbose level.

To see Sprig output, set the RudderStack log level to anything other than .none:

swift
LoggerAnalytics.logLevel = .verbose

When the log level is set to .none, the integration skips listener registration entirely and no Sprig output is forwarded.


Questions? Let's figure it out together.

Join the RudderStack Slack community to connect with other users, customers, and the RudderStack team — or reach out for direct support.