Installation and initialization
- iOS
- Android (Kotlin)
- Android (Java)
The Snowplow iOS Tracker SDK supports iOS 11.0+, macOS 10.13+, tvOS 12.0+, watchOS 6.0+, and visionOS 1.0+. It can be used both in Swift as well as in Objective-C code.
Installing
The iOS Tracker SDK can be installed using various dependency managers.
Swift Package Manager (Recommended)
To install Snowplow Tracker with SPM:
- In Xcode, select File > Swift Packages > Add Package Dependency.
- Add the url where to download the library: https://github.com/snowplow/snowplow-ios-tracker
Cocoapods
To install Snowplow Tracker with Cocoapods:
Make sure that Cocoapods is installed on your system and correctly configured for your app.
Add the iOS Tracker SDK among the dependencies of your
Podfile
:pod 'SnowplowTracker', '~> 6.0'
Run the command
pod install
to add the tracker to your app project.
Support for installing the tracker using Carthage was dropped in version 5 of the tracker.
Setting up
Once the tracker SDK is correctly set as a dependency in your app project you have to instrument the tracker:
In your application delegate
AppDelegate.swift
addimport SnowplowTracker
.In the
application(_:didFinishLaunchingWithOptions:)
method, set up the SDK as follows:let tracker = Snowplow.createTracker(namespace: "appTracker", endpoint: "https://snowplow-collector-url.com")
The URL path for your collector endpoint should include the protocol, "http" or "https". If not included in the URL, "https" connection will be used by default.
It creates a tracker instance which can be used to track events like this:
let event = ScreenView(name: "screen_name")
tracker.track(event)If you prefer to access the tracker when the reference is not directly accessible, you can use the
defaultTracker
:Snowplow.defaultTracker()?.track(event)
You can override the default configuration with a fine grained configuration when you create the tracker. See the API docs for the Configuration
classes to see all the options and defaults.
Snowplow.createTracker(namespace: "appTracker", endpoint: "https://snowplow-collector-url.com") {
TrackerConfiguration()
.base64Encoding(false)
.sessionContext(true)
.platformContext(true)
.lifecycleAutotracking(true)
.screenViewAutotracking(true)
.screenContext(true)
.applicationContext(true)
.exceptionAutotracking(true)
.installAutotracking(true)
.userAnonymisation(false)
.immersiveSpaceContext(true)
.logLevel(.off)
SessionConfiguration(
foregroundTimeout: Measurement(value: 30, unit: .minutes),
backgroundTimeout: Measurement(value: 30, unit: .minutes)
)
.continueSessionOnRestart(false)
}
The createTracker
method allows the creation of multiple trackers in the same app. The namespace
field lets you distinguish events sent by a specific tracker instance. It is mandatory even when the app uses just a single tracker instance like in the example above.
The trackers created with the above method are configured "locally" only. To create a tracker where the configuration can be updated through downloaded files, read this page about remote configuration.
The Examples Github repository includes demo apps for Swift and Objective-C covering the most popular dependencies managers. They are provided as simple reference apps to help you set up the tracker.
The Android Tracker SDK supports Android 5 (API level 21+).
Installing
The Android Tracker SDK can be installed using Gradle.
Gradle
Add into your build.gradle
file:
dependencies {
...
implementation 'com.snowplowanalytics:snowplow-android-tracker:6.+'
...
}
No other dependencies are required to track events. However, some optional dependencies can be added:
InstallReferrer
to enable the referrer context entity of theApplicationInstall
event.Play Services
dependencies for tracking the app set ID and AAID.
Setting up
Once the tracker SDK is correctly set as a dependency in your app project you have to instrument the tracker:
In your
Application
subclass, set up the SDK as follows:val tracker = Snowplow.createTracker(
applicationContext, // Android context (LocalContext.current in Compose apps)
"appTracker", // namespace
"https://snowplow-collector-url.com" // Event collector URL
)The URL path for your collector endpoint should include the protocol, "http" or "https". If not included in the URL, "https" connection will be used by default.
It creates a tracker instance which can be used to track events like this:
val event = ScreenView("screen_name")
tracker.track(event)
If you prefer to access the tracker when the reference is not directly accessible, you can use the defaultTracker
:
Snowplow.defaultTracker?.track(event)
You can override the default configuration with a fine grained configuration when you create the tracker. See the Android API docs for the Configuration
classes to see all the options and defaults.
val networkConfig = NetworkConfiguration(
"https://snowplow-collector-url.com",
HttpMethod.POST
)
val trackerConfig = TrackerConfiguration("appId")
.base64encoding(false)
.sessionContext(true)
.platformContext(true)
.lifecycleAutotracking(true)
.screenViewAutotracking(true)
.screenContext(true)
.applicationContext(true)
.exceptionAutotracking(true)
.installAutotracking(true)
.userAnonymisation(false)
.logLevel(LogLevel.OFF)
val sessionConfig = SessionConfiguration(
TimeMeasure(30, TimeUnit.SECONDS),
TimeMeasure(30, TimeUnit.SECONDS)
)
.continueSessionOnRestart(false)
createTracker(
applicationContext,
"appTracker",
networkConfig,
trackerConfig,
sessionConfig
)
The trackers created with the above method are configured "locally" only. To create a tracker where the configuration can be updated through downloaded files, read this page about remote configuration.
The Android tracker Github repository includes demo apps in Java, Kotlin, and Kotlin with Jetpack Compose. They are provided as simple reference apps to help you set up the tracker.
Using the tracker with R8 optimization
Depending on your app configuration, you may need to add ProGuard rules to prevent the R8 compiler removing code needed for tracker function. Fetching certain platform context properties - AAID and app set ID - uses reflection. To include the necessary classes, add the following rules to the app's proguard-rules.pro
file.
# Reflection for the appSetId
-keep class com.google.android.gms.appset.AppSet { *; }
-keep class com.google.android.gms.appset.AppSetIdInfo { *; }
-keep class com.google.android.gms.internal.appset.zzr { *; }
-keep class com.google.android.gms.tasks.Tasks { *; }
# Reflection for the AAID (AndroidIdfa)
-keep class com.google.android.gms.ads.identifier.** { *; }
The Android Tracker SDK supports Android 5 (API level 21+).
Installing
The Android Tracker SDK can be installed using Gradle.
Gradle
Add into your build.gradle
file:
dependencies {
...
implementation 'com.snowplowanalytics:snowplow-android-tracker:6.+'
...
}
No other dependencies are required to track events. However, some optional dependencies can be added:
InstallReferrer
to enable the referrer context entity of theApplicationInstall
event.Play Services
dependencies for tracking the app set ID and AAID.
Setting up
Once the tracker SDK is correctly set as a dependency in your app project you have to instrument the tracker:
In your
Application
subclass, set up the SDK as follows:TrackerController tracker = Snowplow.createTracker(
getApplicationContext(), // Android context
"appTracker", // namespace
"https://snowplow-collector-url.com" // Event collector URL
);The URL path for your collector endpoint should include the protocol, "http" or "https". If not included in the URL, "https" connection will be used by default.
It creates a tracker instance which can be used to track events like this:
Event event = new ScreenView("screen_name");
tracker.track(event);
If you prefer to access the tracker when the reference is not directly accessible, you can use the defaultTracker
:
Snowplow.getDefaultTracker().track(event);
You can override the default configuration with a fine grained configuration when you create the tracker. See the Android API docs for the Configuration
classes to see all the options and defaults.
NetworkConfiguration networkConfig = new NetworkConfiguration(
"https://snowplow-collector-url.com",
HttpMethod.POST
);
TrackerConfiguration trackerConfig = new TrackerConfiguration("appId")
.base64encoding(false)
.sessionContext(true)
.platformContext(true)
.lifecycleAutotracking(true)
.screenViewAutotracking(true)
.screenContext(true)
.applicationContext(true)
.exceptionAutotracking(true)
.installAutotracking(true)
.userAnonymisation(false)
.logLevel(LogLevel.OFF);
SessionConfiguration sessionConfig = new SessionConfiguration(
new TimeMeasure(30, TimeUnit.SECONDS),
new TimeMeasure(30, TimeUnit.SECONDS)
)
.continueSessionOnRestart(false);
Snowplow.createTracker(
getApplicationContext(),
"appTracker",
networkConfig,
trackerConfig,
sessionConfig
);
The trackers created with the above method are configured "locally" only. To create a tracker where the configuration can be updated through downloaded files, read this page about remote configuration.
The Android tracker Github repository includes demo apps in Java, Kotlin, and Kotlin with Jetpack Compose. They are provided as simple reference apps to help you set up the tracker.
Using the tracker with R8 optimization
Depending on your app configuration, you may need to add ProGuard rules to prevent the R8 compiler removing code needed for tracker function. Fetching certain platform context properties - AAID and app set ID - uses reflection. To include the necessary classes, add the following rules to the app's proguard-rules.pro
file.
# Reflection for the appSetId
-keep class com.google.android.gms.appset.AppSet { *; }
-keep class com.google.android.gms.appset.AppSetIdInfo { *; }
-keep class com.google.android.gms.internal.appset.zzr { *; }
-keep class com.google.android.gms.tasks.Tasks { *; }
# Reflection for the AAID (AndroidIdfa)
-keep class com.google.android.gms.ads.identifier.** { *; }