Snowplow Android and iOS Tracker version 6.0.0 released

We are very excited to announce version 6.0.0 of the iOS and Android trackers!


Screen time and engagement metrics

The iOS and Android trackers can now track screen engagement information, including the screen time and metrics for the amount of content viewed on the screen! Visit this demo to see it in action! This works nicely together with the Snowplow Unified dbt package 0.2.0.

visionOS support

The iOS tracker now supports visionOS! Moreover, it provides new APIs to track visionOS events such as open and dismiss immersive space.

  • Add support for visionOS (iOS #830)
  • Add VisionOS events and entities (iOS #857)

Local event store automatic cleanup

The trackers can now automatically remove old events from the event store in situations when requests are blocked due to ad blockers or in case of longer offline usage.

  • Add configurable limit for the maximum age and number of events in the event store and remove old events before sending (iOS #860, Android #660)

  • Expose event store from emitter controller to be able to remove all events from database (iOS #834) thanks to @danigutierrezayuso

  • Remove the use of the FMDB dependency in SQLiteEventStore (iOS #823)

Tackling duplicate events

We have improved the trackers to avoid sending duplicate events to the Collector by making requests serially and adjusting request timeouts.

Batching improvements

The event batching algorithm has been improved to make it possible to make requests to the collector after a certain number of events accumulate in the event store (defaults to 1, but configurable to 10 or 25).

Cross-navigation tracking

There is a new API to decorate outgoing links to other Web or mobile apps with user and session information.

Improved concurrency model on iOS

We have reworked the internal concurrency model on iOS to be safer and more efficient.

  • Improve concurrency model using a single internal dispatch queue (iOS #820)
  • Process tracked events on a serial background queue (iOS #822)

iOS privacy manifest

We have added a SDK privacy manifest and made changes according to the latest recommendations from Apple.

  • Add SDK privacy manifest file (iOS #811)
  • Remove available storage and total storage from platform context (iOS #824)
  • Add an option to override platform context properties (iOS #865, Android #667)

Other enhancements

  • Return non-optional TrackerController instance from createTracker (iOS #847) thanks to @Kymer
  • Enable representing self-describing data using Codable structs (iOS #844)
  • Match BaseEvent entities API with Android tracker (iOS #867)

Bug fixes

  • Fix bundle path check to handle symbolic links (iOS #858) thanks to @mylifeasdog
  • Handle errors when fetching screen resolution in Subject (Android #657)
  • Fix demo crash when using R8 full mode (Android #652)
  • Fix returning error from network connection requests (Android #659)
  • Do not track the screen view again when app comes to foreground (Android #653)

Under the hood

  • Set the platform event property to tv on tvOS and mobile on watchOS (iOS #872)
  • Update copyright notices (iOS #868, Android #669)
  • Update CI build (iOS #856)
  • Tidy AbstractEvent internal properties (Android #666)
  • Undeprecate PageView event (Android #665)
  • Remove optional types in event store interface (Android #661)
  • Set default thread count in Executor to match the default thread pool size in the Emitter (Android #659)
  • Remove unused threadCount property from Tracker (Android #659)
  • Update Emitter constructor to accept namespace and event store and make them immutable (Android #659)

Upgrading from previous versions

Please visit the documentation to learn about the breaking changes and migration instructions.

Snowplow Android Tracker version 6.0.0 is available on Maven Central .
The project’s source code can be found here .

Snowplow iOS Tracker version 6.0.0 is available through Swift Package Manager and Cocoapods .
The project’s source code can be found here.