Releases: snowplow/snowplow-ios-tracker
Version 6.0.0
Screen time and engagement metrics
The tracker 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.
- Add screen engagement tracking of time spent and list items scrolled on a screen (#851)
- Enable lifecycle autotracking by default (#852)
visionOS support
The iOS tracker now supports visionOS! Moreover, it provides new APIs to track visionOS events such as open and dismiss immersive space.
Local event store automatic cleanup
The tracker 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 (#860)
-
Expose event store from emitter controller to be able to remove all events from database (#834) thanks to @danigutierrezayuso
-
Remove the use of the FMDB dependency in SQLiteEventStore (#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.
- Add request timeout to network connection and configuration (#836) thanks to @danigutierrezayuso
- Make network requests serially in network connection (#846)
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).
- Change default buffer option to single (#849)
- Flush events only when the buffer is full (#827) thanks to @danigutierrezayuso
Cross-navigation tracking
There is a new API to decorate outgoing links to other Web or mobile apps with user and session information.
- Add API to decorate link with user/session info (#819)
Improved concurrency model
We have reworked the internal concurrency model to be safer and more efficient.
- Improve concurrency model using a single internal dispatch queue (#820)
- Process tracked events on a serial background queue (#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 (#811)
- Remove available storage and total storage from platform context (#824)
- Add an option to override platform context properties (#865)
Other enhancements
- Return non-optional TrackerController instance from
createTracker
(#847) thanks to @Kymer - Enable representing self-describing data using Codable structs (#844)
- Match BaseEvent entities API with Android tracker (#867)
Bug fixes
- Fix bundle path check to handle symbolic links (#858) thanks to @mylifeasdog
Under the hood
Version 5.6.0
This release adds integration with the FocalMeter system by Kantar that measures audience of content through a router meter. When configured using the FocalMeterConfiguration
, the tracker makes a request with the user ID from the session context to the configured URL endpoint.
Enhancements
Add configuration to send requests with user ID to a Focal Meter endpoint (#745)
Version 5.5.0
This release adds an option to disable retrying all failed requests to the collector. The option is called EmitterConfiguration.retryFailedRequests
. If configured, events that fail to be sent in the first request to the collector will be dropped. This may be useful in situations where it's necessary to prevent traffic spikes with many events being sent at the same time.
Enhancements
Add option to disable retrying any failed requests (#826)
Under the hood
Separate targets for unit and integration tests (#831)
Version 5.5.0-beta.2
This pre-release updates the 5.5.0 beta on top of the latest 5.4 patch releases.
Version 5.4.2
This release fixes the schema used for the player entity in media events. The URI of the schema was changed due to conflicts with another schema.
Bug fixes
Update vendor and version of the player schema used in media tracking (#812)
Release 5.4.1
Version 5.5.0-beta.1
This pre-release adds a new tracker plugin to integrate with the Kantar FocalMeter system by sending the user ID in HTTP GET request to a specified endpoint whenever the ID changes.
Enhancements
- Add configuration to send requests with user ID to a Focal Meter endpoint (#745)
Release 5.4.0
This release brings Snowplow ecommerce tracking to our Android and iOS trackers. We've added 11 new event types to make tracking and modeling ecommerce user behaviour easier. It's the same API as for the Snowplow ecommerce plugin in the JavaScript tracker, and the mobile data is already supported by the ecommerce data model. Check out the documentation to find out how to enable this, and stay tuned for the mobile version of the Ecommerce Accelerator.
This release also updates the interval for refreshing properties in the platform context entity from 0.1s to 1s in order to reduce CPU usage. Finally, it exposes a function for retrieving the payload from ConsentDocument that was removed in version 5.
Changelog
Enhancements
Version 5.3.1
This is a patch release that fixes a bug with disabled screen view autotracking configuration being ignored and wrong deserialization of timestamps when migrating from version 1.7 of the tracker.
Bug fixes
Version 5.3.0
This release brings the new media tracking APIs and improvements in remote configuration!
The media tracking APIs enable tracking of media events from video or audio playback. They provide the following key features:
- Integrate with any media player: Instead of integrating with a specific media player, the plugin provides universal media tracking APIs that can be utilized to track media events regardless of the media player being used to play the content.
- Media session tracking: The plugin adds a new media session context entity to tracked events that identifies the media playback. The entity also adds statistics calculated using edge analytics on the tracker such as the time spent playing, buffering or the number of ads played.
- Support for tracking live video: With the addition of media ping events, the plugin now supports periodically tracking the progress within a live streamed video. The media ping events are fired periodically when the media is being played with configurable frequency and settings. Moreover, the plugin also makes sure that page ping events are being tracked during playback even if the user is not interacting with the page.
- Tracking ads during playback: The plugin provides out-of-the-box events and entities for tracking ads within linear, non-linear and companion ad breaks during playback.
- New media event schemas: The tracked events follow new schemas with additional properties. New events and entities for data quality and error tracking have been added.
- Customizable: The plugin supports tracking custom media events and custom entities to meet your specific requirements.
- AVPlayer auto-tracking: The plugin provides APIs to auto-track media events from the AVPlayer media player.
Here is an example of how to track media events on iOS:
let id = "XXXXX"
let tracker = Snowplow.defaultTracker()
// Initialize the media tracking identified by the `id`. It will start tracking media ping events.
let mediaTracking = tracker.media.startMediaTracking(id: id)
// Track a media play event within the media tracking.
mediaTracking.track(MediaPlayEvent())
// Update the current playback position without tracking any events.
mediaTracking.update(player: MediaPlayerEntity().currentTime(10.0))
// Track the start of an ad.
let ad = MediaAdEntity(adId: "1234").name("Podcast Ad").duration(15)
mediaTracking.track(MediaAdStartEvent(), ad: ad)
// End and clear the state for the media tracking.
tracker.media.endMediaTracking(id: id)
The release also brings improvements in the remote configuration. It adds support for configuring emitter configuration through remote configuration. It also respects default configuration for properties that are not configured through remote configuration.
Enhancements
- Add media controller with APIs to track media events (#765)
- Add emitter configuration support to remote configuration (#782)
- Use default configuration for properties that are not configured using remote configuration (#785)
Bug fixes