Tealium for Swift release notes (By Date)
June 1, 2024
Tealium for Java
- Removed unnecessary reference to
javax.xml.ws.http.HTTPException
to support newer JDKs without additional dependencies.
May 15, 2024
Tealium for Android (Kotlin)
- Core 1.6.0
HttpClient
now supports only retrying on response codes that support retries.- Fix:
ResourceRetriever
refresh interval affecting library settings being fetched too often. - Fix: Reinstated missing
ResourceEntity
class
- RemoteCommandDispatcher 1.4.0.
- Adding a RemoteCommand with a remote URL config now supports falling back to loading from an
Asset
named{command id}.json
on the first launch.- If a file name is also provided, then it will use that name to lookup the
Asset
. - It is now safe to omit the
.json
extension on thefilename
parameter when adding a new remote command, although the.json
extension of the actual file should still be present. - Fix: Refresh interval was not being adhered to
- If a file name is also provided, then it will use that name to lookup the
- Updated the module dependency minimum on
com.tealium:kotlin-core
to1.6.0
.
- Adding a RemoteCommand with a remote URL config now supports falling back to loading from an
- TagManagementDispatcher 1.2.2
- The webview is refreshed on new sessions to ensure that the latest IQ configuration is available.
May 1, 2024
Tealium for iOS (Swift)
Medium Impact Changes
- Improved local
RemoteCommands
to accept files path with or without the extension - Fixed remote commands and remote settings refresh mechanism and caching
- Improved remote commands and remote settings retry mechanism
- Allow URL
RemoteCommands
to use a bundled local file with thecommandId
as the name while downloading the remote file or if it can’t be downloaded and is not cached - Added a
TagManagementWebview
refresh after a session is expired
Remote commands
- Updated Braze SDK version to support Apple privacy manifest requirements.
March 1, 2024
Tealium for Cordova
- Upgrade native iOS and Android Tealium dependencies to the latest versions.
- Target XCode 15 for iOS and bump iOS minimum deployment target to iOS 12.
- Fixed Firebase plugin installation ordering issue that could cause Firebase not to work if installed before the main plugin.
Tealium for iOS (Swift)
Low Impact Changes
- Fixed Privacy Manifest
NSPrivacyAccessedAPITypeReasons
for the disk space category.
Remote commands
- Updated SKAdNetwork implementation in the Attribution module to support XCode15.
February 1, 2024
Tealium for iOS (Swift)
Medium Impact Changes
- Now officially supporting XCode 15.
- Increased minimum supported operating system versions: iOS 12.0, TvOS 12.0, and MacOS 10.14.
- Added Privacy Manifest in the SDK for disclosing the privacy API usage reasons. Learn more
Remote commands
- Updated consent options for Adjust on iOS and Android.
- Updated Firebase Remote Commands on Android to support setting multiple user properties with a single command.
January 1, 2024
Tealium for iOS (Swift)
Medium Impact Changes
- Increased minimum supported operating system versions: iOS 11.0, TvOS 11.0, WatchOS 4.0, and MacOS 10.13.
- Changed the storage default directory on disk for TvOS from
Application Support
toCaches
becauseApplication Support
was not supported on the TVs. - Removed the
iAd
framework from theAttribution
module because it was disabled by Apple and will be removed soon.
Low Impact Changes
- Implemented the option to disable the whole SDK from remote settings.
- Updated the list of device names, including Mac devices and the newest iOS devices.
- Fixed
TealiumVisitorProfile
parsing to gracefully acceptnull
strings. - Improved error logs readability.
- Updated list of iOS device models.
Known Issues
- This is our final release targeting XCode 14. Note that XCode 15 dropped support for iOS 11. To install on XCode 15, you must manually increase the minimum deployment target of the Tealium library to iOS 12 after installing it or the app will crash on launch. For more information, see TEALIUM SWIFT BUG: Runtime crash on launch with Xcode 15 Release.
Remote commands
- Fixed the implementation of the Adjust
trackThirdPartySharing
flag. - Updated Braze Remote Commands on iOS to unify functionality between all platforms and tag for webview.
November 1, 2023
Tealium for React Native
- Updated Android
build.gradle
files to allow the use of Kotlin version from parent project.
September 1, 2023
Tealium Universal Tag (utag.js)
Version 4.50 provides more transparency and control over cookies written by utag.js
.
Previously, we recommended using multi-value cookies (multicookies). However, due to the increasing demand for transparency and simplicity, particularly for data privacy audits, we have revised our recommendation. Now, we advise using standalone cookies, which is now the default behavior in utag.js
.
This release includes the following updates:
- Writes separate
utag_main
cookies instead of a single multi-value cookie. To use the legacy behavior that stores multiple values in a single cookie, setsplit_cookie
tofalse
. - Moves responsibility for
utag_main_v_id
fromutag.js
to the Tealium Collect tag. To forceutag.js
to set theutag_main_v_id
cookie, setalways_set_v_id
totrue
. - Adds a new
id
element in the Consent Manager cookie for logging consent. When this cookie is first set, it will match anyutag_main_v_id
values found, after which it won’t be changed. That behavior prioritizes maintaining the link between the user and the logged events, but means that a match isn’t guaranteed in all cases. - Can easily be upgraded by updating the relevant templates.
- Adds the following utag settings:
split_cookie
- Set tofalse
to use the legacy single multi-value cookie.split_cookie_allowlist
- Specifies an array cookie names that can be set using theutag_main
namespace.always_set_v_id
- Forcesutag.js
to set theutag_main_v_id
cookie or thev_id
component ofutag_main
.
- Updates the following templates:
utag.js
(loader
) to version 4.50, to update cookie behaviorcmGeneral
to version 3.0.12, to add centralized logic for generating or retrieving a device ID that can be called from consent logging templatescmDoNotSell
to version 1.4.0, to call the centralized logicfullConsentEventHandler
to version 1.0.3, to call the centralized logicpartialConsentEventHandler
to version 1.0.3, to call the centralized logicCollect
to versiontv:20064.20230519
(released in May 2023)
For more information about the new settings for enhanced transparency in utag 4.50 or later, see Enhancing Cookie Transparency with utag 4.51.
Tealium for Android (Kotlin)
- Fix: ProGuard adjustment resolve missing
BatchDispatch$Companion
class. - Minor lint warning fixes
August 1, 2023
Tealium for iOS (Swift)
Low Impact Changes
- Removed data from the data layer that remained from a previous migration from the Objective-C library:
app_version
,uuid
,visitor_id
,last_track_event
andlast_session_created
. - Prevented an eventual crash on XCode 15 beta due to
+load
method being defined on anobj-c
category of a Swift class.
Tealium for Android (Kotlin)
- Core 1.5.4
- Session data expiration bug fix: fixes an issue whereby session scoped data may not be expired on launch
- Event router events buffering: buffers events until SDK is ready so events are not missed during startup
- Database lock crash bug fix: Some uncaught exceptions in persistence led to possible crashes
- ProGuard rules updates to reinstate incorrectly obfuscated
BatchDispatch
class
- AdIdentifier 1.1.2
- Fix: Data layer writes moved onto Tealium background thread
July 1, 2023
Tealium for Android (Java)
- Gradle updates, and Android
compileSdkVersion
andtargetSdkVersion
increased to version 33 for all modules.
June 1, 2023
Tealium for React Native
- Android-Kotlin dependencies updated including several fixes listed below.
- Core 1.5.3, Visitor Service 1.2.0 and Lifecycle 1.2.0
- Fix: Some event sending delayed by Visitor Service updates
- Fix: Lifecycle negative values
- Fix: ModuleManager crashes caused by concurrent modification
Tealium for Android (Kotlin)
- Database bug fix: Add database status check before performing writable actions, and allow event queuing until database is fully operational
- Library settings bug fix: Update how remote settings were fetched and saved
- Module manager bug fix: Update to thread-safe collection
May 1, 2023
Tealium for iOS (Swift)
Low Impact Changes
- Added the
getTagManagementWebView
method on the Tealium instance to access the internal TagManagement WebView so clients can set theisInspectable
flag and debug on XCode 14.3+. - Fixed a possible crash that could happen when comparing two
TealiumConfig
objects with aWKWebViewConfiguration
inside. - Fixed an edge case that could cause some of our internal files to be unintentionally backed up and reused on different devices.
April 1, 2023
Tealium for iOS (Swift)
Low Impact Changes
- Improved launch performance in case of a large data layer.
- Fixed a bug where publish settings were not updated correctly in some internal modules.
Tealium for Cordova
- Added handling of
Map
type from the Ionic plugin.Map
types are converted toObject
where necessary.
Tealium for Android (Kotlin)
- Connectivity collector bug fix: Fixed an issue in the event where
telephonyManager.networkOperator
returns a blank string - Deep link reporting bug fix:
- Deep link handling limited to activities launched with intents where
action == Intent.ACTION_VIEW
- Empty URIs are ignored, and deep links that match what is already stored is a
no*op
- Handling pushed on to Tealium background thread.
- Deep link handling limited to activities launched with intents where
February 1, 2023
Tealium for iOS (Swift)
Low Impact Changes
- Introduced overrides for compound keys in JSON remote commands to replace default delimiters (, and :) with the new configuration keys:
keys_separation_delimiter
andkeys_equality_delimiter
. - Fixed a bug that could cause Tealium internal files on device to be reset when updating the library.
Tealium for Xamarin
- Updated Tealium native libraries dependencies. Tealium Swift
2.9.1
and Tealium Kotlin1.5.1
. - Implemented methods to support visitor switching:
- Added support for config option
visitorIdentityKey
to specify the key used to identify multiple users the app. - Added the method
ResetVisitorId()
to clear and generate a new visitor ID. - Added support for config option
clearStoredVisitorIds
to clear all stored visitor IDs on the device.
- Added support for config option
- Added the config option
overrideConsentCategoriesKey
to override the name of the consent categories attribute sent in consent events.
January 1, 2023
Tealium for Android (Java)
- Fixed to avoid possible crashes when trying to open a deep link with unescaped query parameters.
Tealium for iOS (Swift)
Medium Impact Changes
- Implemented the new Apple Search Ads API for iOS 14.5+ in the Attribution module.
- Added new static objects mapping and compound keys functionality to the JSON remote commands to increase flexibility of use.
Low Impact Changes
- Updated device names lookup file.
Tealium for Java
- Persistent Data Deletion -
deletePersistentData
method added to the DataManager class.
December 1, 2022
Tealium for React Native
- Visitor Switching support
- Kotlin/Swift SDK dependencies updated
Tealium for Cordova
- Visitor Switching support.
- Kotlin/Swift SDK dependencies updated.
October 1, 2022
Tealium for Android (Java)
- Added support for
QueryParameterProvider
- allows additional parameters to be added to the URL used for the WebViewDispatcher
Tealium for iOS (Swift)
Low Impact Changes
- Improved the Tag Management module code and thread security.
- VisitorService’s
requestVisitorProfile
now skips the timeout set by thevisitorServiceRefresh
config key. - Added an observable for
onVisitorId
changes in theTealium
class to notify new IDs whenresetVisitorId
is called or when we automatically switch to a new visitor. - Added the
visitorIdentityKey
config key for the new visitor switching API. - Migrated the
app_uuid
storage to the data layer to allow applications to delete it if needed. - Added
clearStoredVisitorIds
method inTealium
class to delete all stored visitor IDs for current and previous identities and reset the currentvisitorId
. - Added
decorateUrl
method toAdobeVisitorService
module to add Adobe query parameter to a URL.
New Features
- Added query parameter provider functionality for Adobe ECID in the Tag Management module to decorate the webview URL with Adobe query parameter.
- Added support in remote commands for command mappings to
all_events
andall_views
, which are triggered on each event and view, respectively. - Added support for visitor switching.
Tealium for Android (Kotlin)
- Visitor Switching
- Added
TealiumConfig.visitorIdentityKey
to specify the data layer key that represents a known identity in the data layer - Known identities are hashed and linked to the
tealium_visitor_id
for better switching between known identities
- Added
- Added the following listeners:
VisitorIdUpdatedListener
: notifies when the visitor ID is updated as a result of switching identities or resetting the visitor IDDataLayerUpdatedListener
: listens for updates to key/value pairs in the data layeronDataUpdated(String, Any)
: notifies when a value is updated in the data layeronDataRemoved(Set<String>)
: notifies when the specified key is removed from the data layer by user interaction or data expiration
- RemoteCommandDispatcher 1.2.0
- Support for default mapping
all_events
andall_views
in the JSON mapping file to enable triggering specific commands in response to each view or event
- Support for default mapping
- TagManagement 1.2.0
QueryParameterProvider
: added additional parameters to the URL for the Tag Management module- Improved webview instantiation and page load management
- Kotlin dependency updates
- Stdlib: 1.6.21
- Coroutines: 1.6.2
September 1, 2022
Tealium Universal Tag (utag.js)
- Values from
localStorage
andsessionStorage
are automatically added to the data layer object. - Added override options
ignoreSessionStorage
andignoreLocalStorage
. - Fixed an issue where
tealium_environment
andut.env
were not set correctly for first-party domain customers.
Tealium for iOS (Swift)
Low Impact Changes
- Updated
SKAdNetwork
calls to useupdatePostbackConversionValue
if on iOS 15
High Impact Changes
- Removed initial call to
trackUserConsentCategories
this may effect you if you rely on that being called.
New Features
- Added config option
overrideConsentCategoriesKey
to override the name of the Tealium consent categories attribute, to support custom enforcement of server-side consent.
Tealium for React Native
- Added React 18 to supported versions for all packages
- All remote command and location modules updated to support React 18
- Upgraded Kotlin version to 1.6.0
Tealium for Cordova
- Fixed incorrect
plugin_version
version number in data layer.
Tealium for Xamarin
- Fixed a bug that caused events to be tracked as views.
Tealium for Android (Kotlin)
- Core 1.4.3
- DeviceCollector bug fix: Correct calculation for
tealium_logical_resolution
- DeviceCollector bug fix: Correct calculation for
- TagManagement 1.1.3
- Bug fix: Relocate
sessionCountingEnabled
to fix miscount on fresh launch
- Bug fix: Relocate
- VisitorService 1.1.1
- Bug fix: Move visitor service profile override to earlier initialization
- Location: Add missing ProGuard rules for new classes
July 1, 2022
Tealium for React Native
- Kotlin dependency upgraded to 1.4.1
- Swift dependency upgraded to 2.6.4
- Added
overrideCollectProfile
,overrideCollectDomain
andsessionCountingEnabled
keys to the config - Added
gatherTrackData
method to Tealium instance
Tealium for Xamarin
- Added a custom implementation of a Firebase Remote command
1.0.0
.
Tealium for Nativescript
- Kotlin dependency upgraded to 1.4.1
- Swift dependency upgraded to 2.6.4
- Added
overrideCollectProfile
,overrideCollectDomain
, andsessionCountingEnabled
keys to the config - Added
gatherTrackData
method to Tealium instance
June 1, 2022
Tealium for Android (Kotlin)
- Core 1.4.1
- Bug fix: Update consent status to return
string
instead ofenum
value
- Bug fix: Update consent status to return
May 1, 2022
Tealium for iOS (Swift)
Low Impact Changes
- Improved logic for storing and updating
visitorId
for the visitor profile. - Added the config flag
enableBackgroundLocation
to enable location updates when the app is running in the background. - Fixed
dispatchExpiration
logic to accept -1 as never expire for queued tracking events. - Removed support for catalyst in the prebuilt frameworks to solve building errors.
- Fixed remote commands name and version tracking.
Tealium for Android (Kotlin)
- Core 1.4.0
- Added
gatherTrackData
to expose all data layer and collector variables
- Added
April 1, 2022
Tealium for Android (Kotlin)
- Core 1.3.3
- Update remote command dependency
- RemoteCommandDispatcher 1.1.1
- Added remote command names and versions to data layer
March 1, 2022
Tealium for iOS (Swift)
Low Impact Changes
- Fixed a bug that could cause publish settings to be retrieved more than once.
- Fixed a bug that caused
dataLayer
variables withuntilRestart
expiration not to be deleted. - The following Location modules have been replaced with their respective getters:
createdGeofences
->getCreatedGeofences(completion:)
lastLocation
->getLastLocation(completion:)
monitoredGeofences
->getMonitoredGeofences(completion:)
Tealium for Android (Kotlin)
- Core 1.3.2
- Added
events
property toTealiumConfig
to add listeners at startup. This fixes the issue of missed events at startup.
- Added
- Lifecycle 1.1.1
- Bug fix: Fixed the default values for some attributes that caused missed events when combined with the Tag Management module
- InAppPurchase 1.0.1
- Additional
purchase_date
key provided in ISO-8601 format
- Additional
- Tag Management 1.1.2
- Added the
sessionCountingEnabled
flag toTealiumConfig
to disable session counting for Tealium iQ accounts that use self-hosted JavaScript files
- Added the
February 1, 2022
Tealium for Android (Java)
- Added the
sessionCountingEnabled
flag toTealiumConfig
to allow disabling of session counting for Tealium iQ accounts that use self-hosted JavaScript files.
Tealium for iOS (Objective C)
Low Impact Changes
- Added the
sessionCountingEnabled
flag toTEALConfiguration
to allow disabling of session counting for Tealium iQ accounts that use self-hosted JavaScript files. - Fixed a crash that could happen for devices with no preferred language.
Tealium for iOS (Swift)
Low Impact Changes
- Improved logs for enum based errors.
- Added the
sessionCountingEnabled
flag toTealiumConfig
to allow disabling of session counting for Tealium iQ accounts that use self-hosted JavaScript files.
Tealium for React Native
- Support added up to React Native 0.67.1 + gradle 7
- Added support for additional Optional Modules, as well as packaged Remote Commands
- Tealium Kotlin 1.3.0 and Tealium Swift 2.6.0 dependency increase
- Added Location Module 1.0.0
For iOS, the podspec has been split, so you should now add pod "tealium-react-native-swift", :path => '../node_modules/tealium-react-native/tealium-react-native-swift.podspec'
to your Podfile.
Tealium for Android (Kotlin)
- Core 1.3.1
- Stability fix for failed webview creation
- Stability fix for connectivity exception handling
- In App Purchase auto tracking 1.0.0 release
January 1, 2022
Tealium for iOS (Swift)
Medium Impact Changes
- Added a new
TealiumInAppPurchase
module to automatically track in app purchases.
Low Impact Changes
- Added remote commands names and versions to the data layer.
- Added a workaround in
isLowPowerModeEnabled
for the iOS 15 internal crash. - Internally refactored the handling of lifecycle events.
- Replaced internal usage of deprecated NSKeyedUnarchiver in the migrator from the legacy Tealium Objective-C library.
- Fixed an issue that caused duplicated JSON remote commands the first time we requested the remote configuration.
- Fixed a typo in
gatherTrackData
.
December 1, 2021
Tealium for iOS (Swift)
Medium Impact Changes
- Fixed import of Swift code in Objective-C files when compiling as a static library, such as when using Cocoapods without setting
use_frameworks!
or using Tealium React Native library.
Low Impact Changes
- Prevented automatic deep link tracking from digesting AppDelegate’s deep links, in order to allow other implementations to handle their own deep links.
- Fixed threading issues for
TagManagement
module andTealiumConfig
.
Tealium for Nativescript
- Bumped version numbers for new release, no actual changes
November 1, 2021
Tealium for iOS (Swift)
High Impact Changes
- The AutoTracking module now supports SwiftUI and UIKit and is cross-platform (iOS, watchOS, tvOS, and macOS).
Medium Impact Changes
- Added SPM support for AutoTracking module.
- Added automatic handling of deep links for SceneDelegate and SwiftUI apps.
- Added an info.plist flag
TealiumAutotrackingDeepLinkEnabled
with the value of false to disable automatic deep link tracking. - Added support for manual tracking of deep links:
- SwiftUI: use
trackingAppOpenUrl()
View modifier orTealiumAppTrackable
container View. - UIKit: use
handleDeepLink()
from your AppDelegate or SceneDelegate.
- SwiftUI: use
Low Impact Changes
- Made all data layer and Collector’s variables available using the method
Tealium.gatherTrackData()
. - Renamed
TealiumKeys
toTealiumDataKeys
, for use withgatherTrackData()
. - Improved Codable support by ignoring non-codable values in release builds and causing a crash in debug builds.
- Reduced Geofences loading usage of main thread.
Known Issues
- CocoaPods platform iOS version is increased to 11 due to linting issues (but, if required, it’s safe to lower it to 9 with a post-install script).
- Carthage generates warnings with Xcode 13 (https://github.com/Carthage/Carthage/issues/3238).
Tealium for Xamarin
- Initial release
October 1, 2021
Tealium for iOS (Swift)
Low Impact Changes
- Fixed a bug that could cause a crash when deallocating a RemoteCommand before sending HTTP requests to our internal command.
- Fixed a bug that prevented data layer variables from being persisted for sessions longer than 30 minutes.
- Avoided registration for
isLowPowerModeEnabled
notification if thebatterySaver
feature is not enabled, avoiding possible crashes on an iOS 15 internal deadlock. - Fixed a bug where the tracking call queue would not get processed after receiving consent.
Tealium for Android (Kotlin)
- Core 1.2.8
- Added
TealiumConfig.logLevel
to enable overriding the log level derived from the environment - Added
consent_last_updated
timestamp to the payload of each event triggered by the Consent Manager - Payload key constants migrated to
Dispatch.Keys.XXX
for ease of access - Bug fixes
app_name
now falls back to a non-localized version of the app label- Fixed event router crashes caused by threading.
screen_title
re-added to theTealiumView
payload by default, and set to theviewName
when one is not provided in the context data- Unnecessary logging removed when trying to load
tealium-settings.json
as an asset. - Where multiple deep links occur during a session, previous deep link parameters are now removed from the data layer prior to adding the new ones.
- Added
- CollectDispatcher 1.0.6, HostedDataLayer 1.0.4, RemoteCommandDispatcher 1.0.5, TagManagement 1.0.7
- Event key references updated to use the new
Dispatch.Keys.XXX
(only present in Core 1.2.8+).
- Event key references updated to use the new
September 1, 2021
Tealium for iOS (Swift)
- Version skipped due to publishing issues.
Tealium for Android (Kotlin)
- Core 1.2.7
- Added
device_logical_resolution
to the data layer from the DeviceData module.
- Added
Tealium for Nativescript
- Fixed iOS dependency problem
- Updated Android dependencies
August 1, 2021
Tealium for iOS (Objective C)
Low Impact Changes
- Fixed issue with Lifecycle XCFramework file that prevented successful archiving of the enclosing app’s .ipa file
- Carthage can now use XCFrameworks directly from the Github repo without requiring an intermediate JSON file (see Install). Any existing Cartfile references must be updated.
- CocoaPods now uses XCFramework files
Tealium for iOS (Swift)
Low Impact Changes
- Finalized fix on bug that caused IDFA and ATT authorization status to not update at runtime.
Tealium for React Native
- Android support for customVisitorId
- Added support to get session ID - use getSessionId()
July 1, 2021
Tealium for iOS (Swift)
Medium Impact Changes
- Storage updates to prevent unnecessary file backups.
Low Impact Changes
- Added Media module which tracks streaming media in apps through the use of custom events.
- Removed legacy authentication option from Remote HTTP Command.
Tealium for Android (Kotlin)
- Core 1.2.6
- Added
TealiumConfig.existingVisitorId
to support using your own unique identifier. - Added
TealiumConfig.consentManagerLoggingProfile
to support to overriding the profile for consent logging - Consent Logging event routed through all enabled dispatchers.
- Updated values for data layer variables
app_build
andapp_version
.
- Added
- Tag Management Dispatcher 1.0.6
- Support for consent logging profile override.
- Collect Dispatcher 1.0.5
- Support for consent logging profile override.
- Visitor Service 1.0.5
- Bug fix: Deserializing stored long values.
June 1, 2021
Tealium for iOS (Objective C)
High Impact Changes
- Added the option to set a
WKProcessPool
instance on theTealiumConfig
object for the Tealium Tag Management webview to use to avoid cookie synchronization issues.
Tealium for iOS (Swift)
Medium Impact Changes
- Updated the persistent storage module to use
Application Storage
instead of theCaches
directory. This prevents persistent data from being deleted when upgrading to iOS 14.7+.
Low Impact Changes
- Updated the
Connectivity
module to use one instance ofCTTelephonyNetworkInfo
instead of instantiating multiple times. - Removed the cookie migration logic that was used to migrate cookies from the
UIWebView
to theWKWebView
. - Updated the RegEx that was used to validate URLs. This allows more uncommon URLs to be used, such as localhost, local IPs, and URLs with ports.
Tealium for React Native
- Tealium Android dependencies updated to the latest
- Android launch event fix + tests
- iOS VisitorProfile arraysOfStrings update
- Update tealium-react-native.podspec to support 0.64+ and Hermes
- Update the index.d.ts
- Update example app
Tealium for Cordova
- Initial release.
- Cordova 9.0.0 is the minimum requirement.
- Updates the SDK from Java to Kotlin, and from Objective-C to Swift.
May 1, 2021
Tealium for iOS (Swift)
Low Impact Changes
- Minor fix to revert consent policy key back to
policy
. - Verified that the
decline_consent
event is not queued or dropped.
Tealium for Android (Kotlin)
- Fixed issues with HttpClient and consent logging failures.
- Improved asynchronous performance by moving HttpClient execution onto the IO dispatcher.
April 1, 2021
Tealium Universal Tag (utag.js)
utag.js
version 4.48 template updated withsecure_cookie
setting.
Tealium for iOS (Swift)
High Impact Changes
- Added the option to set a
WKProcessPool
instance on theTealiumConfig
object for the Tealium Tag Management webview to use to avoid cookie synchronization issues. - Removed the data layer value
call_type
and replaced it withtealium_event_type
. When the event type is a standard track and not a screen view, thetealium_event_type
value is nowevent
instead oflink
.
If your load rules or attribute rules are configured to look for call_type
, update them to look for tealium_event_type
instead. If they were checking for the value link
on event types, update the condition to check for event
.
Low Impact Changes
- Minor fix to resolve a small memory leak in the RemoteCommands module.
- Minor fix in the lifecycle module that was sending the
lifecycle_diddetectcrash=true
on sleep and wake events. - Custom consent policies are now supported.
Tealium for React Native
- New optional initialization callback to support methods that are required to be accessed after the Tealium instance is ready
- New
remoteCommands
config property to permit passingRemoteCommand
objects in during configuration.
Tealium for Android (Kotlin)
-
Core 1.2.4
- Added new data layer variables
enabled_modules
andenabled_modules_versions
. Both are arrays of strings, containing a sorted list of modules in use and their version number - latest versions of all modules required to retrieve their version.
module names have also been changed from
UPPER_SNAKE_CASE
toPascalCase
to match Swift.- New config option
remoteApiEnabled
to permit disabling ofremote_api
events when using the RemoteCommands and TagManagement modules. - New config option
overrideCollectProfile
to permit overriding the value oftealium_profile
in the event payload, routing events to a different Tealium profile to the one set on theTealiumConfig
object. - Bug fix: Added support for both
application/json
andx-www-form-urlencoded
content types when using theHttpRemoteCommand
. - Bug fix: Fixed an issue with specific collections not being encoded correctly.
- Added new data layer variables
March 1, 2021
Tealium for React Native
Low Impact Changes
- Bug Fixes:
safeGet
extension methods added in Kotlin to check key safety on earlier React Native versions earlier than 0.63.3- React module imports added to the bridging header in order to accomodate React Native versions earlier than 0.63.3
- SDK dependency and
package.json
increments
Tealium for Android (Kotlin)
- ProGuard and consumer rules revision; added missing public classes, and the consumer rules have been revised
- Core 1.2.1, Collect Dispatcher 1.0.3, TagManagement Dispatcher 1.0.3, Install Referrer 1.0.2, Lifecycle 1.0.3, Location 1.0.3, VisitorService 1.0.3, RemoteCommand Dispatcher 1.0.2, Hosted DataLayer 1.0.2, Crash Reporter 1.0.1, Ad Identifier 1.0.1
Tealium for Nativescript
- Update plugin with latest Tealium Kotlin and Swift libraries
- Added support for Consent Expiry
February 1, 2021
Tealium for Android (Java)
- Fix:
WebViewDispatcher
- Allow for proper dequeuing of offline events after reestablishing network connectivity.
Tealium for iOS (Objective C)
Medium Impact Changes
- Lower-cased the value of the
platform
variable to correct mobile session timer. Previously, sessions were measured similarly to web (30 minutes of consistent activity). By lower-casing theplatform
variable, the Customer Data Hub recognizes the incoming data as a mobile session and the session length is shortened to 2 minutes.
Update your load rules if you have Load or Attribute Rules configured checking for case sensitive platform
values such as iOS
vs ios
.
Low Impact Changes
- Resolved build warnings and updated deprecated APIs
Tealium for React Native
Low Impact Changes
- Bug Fixes:
- Included all
.ts
files in package directory (thecommon.ts
file was missing) - Updated the path to source files in the
.podspec
- Included all
Tealium for Java
- Bug fix - Updated track method to use a copy of Persistent Data to stop event data unexpectedly being stored
January 1, 2021
Tealium Universal Tag (utag.js)
-
Adds defensive code for potential jQuery vulnerability. Checks to make sure the
src
of a JavaScript file is set directly and not inherited from a compromisedObject.prototype
. This issue was fixed in jQuery 3.5.0, but re-introduced in 3.5.1. -
Update to check for
Array
type with the built-inutag.ut.typeOf
function instead of usinginstance of
. Fixes issue withutag.js
running in iframe in a testing environment (such as Cypress) and JavaScriptinstance of
operation not working correctly.
Tealium for iOS (Swift)
Low Impact Changes
- Removed
TealiumCore
as an embedded framework as it was causing AppStore submission errors when using Carthage as a dependency. - Re-added
TealiumAttribution
scheme withintealium-swift.xcodeproj
which permits the framework to be built by Carthage.
Tealium for React Native
Initial Release
Tealium for Android (Kotlin)
- Consent Management
- Consent Expiration: Introduced the ability to set an expiration for provided consent
- Deprecated
consentManagerEnabled
config property; setting a valid ConsentPolicy automatically enabled the Consent Manager - Bug fix: Incorrect consent collector logic
- Visitor ID: New method manually regenerates a Visitor ID for the device
- ProGuard: Initial ProGuard rules added to generated binaries and consumer ProGuard rules
- AdIdentifier 1.0.0
- Initial release of the AdIdentifier module: if available, AdIdentifier is added to each dispatch
- CrashReporter 1.0.0
- Initial release of the CrashReporter module: uncaught exceptions causing a crash are recorded and any crash data is sent on the next dispatch when the app launches again
- Collect Dispatcher 1.0.2, Hosted DataLayer 1.0.1, InstallReferrer 1.0.1, Lifecycle 1.0.2, Location 1.0.2, RemoteCommand Dispatcher 1.0.1, TagManagement Dispatcher 1.0.1, Visitor Service 1.0.2
- ProGuard - Initial ProGuard rules added to generated binaries and consumer ProGuard rules
Tealium for Nativescript
- Initial Release
November 1, 2020
Tealium for iOS (Swift)
New Features
- Added the Timed Events feature which tracks the time between specified events.
Low Impact Changes
- Fixed a bug that made it impossible to set a custom endpoint for the Collect module.
- Renamed the
collectOverrideURL
tooverrideCollectURL
for consistency with other libraries. - Introduced new URL override option for batched events
overrideCollectBatchURL
. - Added
device_manufacturer
to the data layer.
Tealium for Android (Kotlin)
- Timed events support for reporting the time taken between user events of interest
- New
device_model
anddevice_manufacturer
data keys provided by theDeviceCollector
- Automated unit and instrumented tests for PRs into master using GitHub actions
- Collect Dispatcher 1.0.1
- Additional Collect URL overrides
- Test coverage increase
- Hosted Datalayer 1.0.0
- Test coverage increase
- Lifecycle 1.0.1
- Bug fix: Missing autotracked key on sleep events
- Test coverage increase
- Location 1.0.1
- Bug fix: Issue with automatically adding nearby geofences
- Test coverage increase
- Visitor Service 1.0.1
- Non-breaking change for testability purposes
- Test coverage increase
October 1, 2020
Tealium for Android (Java)
- Refactor to accommodate for new remote commands adapter
- Fixes issue regarding erasing visitor profile before deletion
- RemoteCommands Adapter Module 1.0.0
- General Remote Commands extracted from core library for use with Tealium Android-Java and Tealium-Kotlin
Tealium for iOS (Swift)
New Features
- The remote commands feature was updated with a new option to use a remote or locally hosted JSON configuration files, removing the requirement for a webview. If using the Remote Command tag option, in iQ Tag Management, the webview is required. Learn more about JSON controlled remote commands.
- Added support for Approximate Location Tracking (iOS 14+) with the function
requestTemporaryFullAccuracyAuthorization(purposeKey:)
through theTealiumLocation
module. Learn more about the iOS 14 Location Updates and requesting temporary full authorization
Medium Impact Changes
- Lower-cased the value of the
platform
variable to correct mobile session timer. Previously, sessions were measured similarly to web (30 minutes of consistent activity). By lower-casing theplatform
variable, the Customer Data Hub recognizes the incoming data as a mobile session and the session length is shortened to 2 minutes.
Update your load rules if you have Load or Attribute Rules configured checking for case sensitive platform
values such as iOS
vs ios
.
Low Impact Changes
- Add
origin: mobile
to the track payload
Tealium for Xamarin 1.x nelease notes
- Updated core libraries - iOS 5.7.0, Android 5.8.0.
- Removes
UIWebView
dependency.
Tealium for Android (Kotlin)
- Support for multiple instances of Tealium
- Breaking changes introduced for construction of Tealium instances
- Fix: Connectivity issues on older Android versions
September 1, 2020
Tealium for Android (Kotlin)
- Maven dependency fix
- Additional Dispatch payload logging
August 1, 2020
Tealium for Android (Java)
- Tealium iQ session reporting is now handled by the SDK rather than the webview
Update your mobile.html
template within Tealium iQ when updating to v5.8.0 in order to support this change.
- Minor fixes for issues raised by security scan
- CrashReporter 1.1.0
- Crash data is now saved when the crash occurs and subsequently sent on the next launch of the application. This update increases the reliability that crashes are tracked successfully
Tealium for iOS (Objective C)
High Impact Changes
- Added support for native session counting in lieu of using the session counting logic within utag.js. This provides more accurate session counts, and fixes some edge cases where background activities triggered new sessions, resulting in higher than expected session counts.
⚠️ Important ⚠️ If Tag Management is enabled in the Mobile Publish Settings, you must also update the mobile.html template within the associated account. If this action isn’t performed, duplicate sessions are recorded in Tealium. Read more about how to update a template.
July 1, 2020
Tealium for iOS (Swift)
New Features
- New CCPA API added to the Consent Manager module. Learn more in the Consent Manager documentation.
- Native Hosted Data Layer support
- Automatic Deep Link tracking that will add deeplink URLs, universal link URLs, and query string parameters to the data layer when the user opens the app from one of these methods.
- Ability to start a Trace by scanning a QR Code from the Customer Data Hub UI
- Added a new
TealiumLogger
that uses the Apple preferredOSLog
vs theprint
function. There is still an option to use print by setting thelogType
property on theTealiumConfig
object. Read more about Logging. - Combined several ancillary modules into the Core library for faster and more straightforward installation. See the modules section for more information.
- Updated the
track()
method to accept aDispatch
type ofView
orEvent
. This allows us to support onetrack
method and provide more clarity around screen and event tracking. Read more about the updatedtrack()
method. - Support for more expiration options for data variables. See Data layer for more information.
- Support for native session counting in lieu of using the session counting logic within utag.js. This provides more accurate session counts, and fixes some edge cases where background activities triggered new sessions, resulting in higher than expected session counts.
⚠️Important⚠️ If the Tag Management Module is being used as the dispatch option, you must also update the mobile.html
template within the associated TiQ account/profile. If this action isn’t performed, duplicate sessions are recorded in Tealium. Learn more about how to update a template or contact your Account Manager for assistance.
High Impact Changes
- Updated the API to be more in line with Swift best practices
- Optimized the modules system for better performance
- Optimized the individual modules for better performance
- Removed multiple delegate options for API simplicity
- Improved connectivity checks -
NWPathMonitor
now used on supported devices - Removed the CrashReporter module from the project and added to a separate repository for those that want to use it
- Removed
NotificationCenter
in the RemoteCommands module and replaced it with the Delegate pattern
Low Impact Changes
- Added more protocols and result types for testability
- Updated class names for consistency with other Tealium libraries
- Added more inline code documentation
- Updated unit tests and added performance testing
For previous release notes prior to 2.x, see Tealium for Swift 1.x.
Tealium for Android (Kotlin)
- Initial release
- Tealium Tag Management support
- Collect support
May 1, 2020
Tealium for Android (Java)
- Fix: Added
Tealium.Config
APIsetOverrideCollectDispatchProfile
to override profile for Collect module - Lifecycle 1.1.4
- Fix:
tealium_event
now contains the lifecycle event type (launch/wake/sleep) to support Event Specifications
- Fix:
April 1, 2020
Tealium for Android (Java)
- Fix:
WebViewClient
onRenderProcessGone
implemented for Android API 26+ to gracefully handle a render process crash and reinitialize the WebView (TagManagement
module only)
Tealium for React Native
Low Impact Changes
- Added ability to override the Collect Dispatch URL in the
initializeCustom
method - Enabled
null
in TypeScript definition for parameters that accept it - Fixed TypeScript definition for Remote Command methods
February 1, 2020
Tealium for Flutter 1.x
High Impact Changes
- Added support for Tealium remote commands through Flutter. This allows for a remote command to be added in a JavaScript file and the payload will be passed back via a callback function. Remote commands may also be removed. Refer to the Flutter API to learn more about the remote command methods.
Low Impact Changes
- Underlying Tealium libraries updated to versions 5.7.0 (Android) and 5.6.6 (iOS)
Tealium for React Native
High Impact Changes
- Added support for Tealium remote commands through React Native. This allows for a remote command to be added in a JavaScript file and the payload will be passed back via a callback function. Remote commands may also be removed via React Native. Refer to the React Native API to learn more about the remote command methods.
Low Impact Changes
- Underlying Tealium libraries updated to versions 5.7.0 (Android) and 5.6.6 (iOS)
- Added TypeScript typings
January 1, 2020
Tealium for iOS (Objective C)
Low Impact Changes
- Bug Fix. Update log format on
removeRemoteCommandID
.
December 1, 2019
Tealium for iOS (Objective C)
Low Impact Changes
- Fix to the
captureTimeDataSourcesForType
method to use thevolatileDatasourcesCopy
instead of theclientVolatileDataSources
directly. This means that theaddToVolatileDataSources
method may now safely be called from a separate thread.
November 1, 2019
Tealium for iOS (Objective C)
Low Impact Changes
- Added the
tealium_session_id
the volatile data variables so is easily retrieved and used.
Tealium for React Native
High Impact Changes
- Support for ReactNative Autolinking in 0.60+
- Better support for nested event data specifically for Android platform
- Underlying Tealium libraries updated to versions 5.5.5 (Android) and 5.6.3 (iOS)
- Bug Fixes
- Corrected method signature for
Tealium.getPersistentData(key, callback)
- Build errors in iOS relating to
Vdata
/Event
enums have been fixed - Fixed crashes on some iPad versions (only when using
TealiumIOS
pod v5.6.0/5.6.1)
- Corrected method signature for
Tealium for Xamarin 1.x nelease notes
- Updated embedded Android SDK to 5.6.0
- Updated embedded iOS SDK to 5.6.5
- Updated sample app dependencies
October 1, 2019
Tealium for iOS (Objective C)
High Impact Changes
- Removed the
UIWebView
entirely to now only supportWKWebView
as Apple has deprecatedUIWebView
since iOS 8.0. We kept the support for theUIWebView
for convenience, and to ensure visitor sessions and analytics history was left intact. However, per ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that useUIWebView
APIs. Learn more aboutUIWebView
. We do have the WKHTTPCookieStore in place that will migrate the cookies used inUIWebView
over to theWKWebView
. This will ensure that the user IDs/visitor cookies will seamlessly transition to the new implementation.
Medium Impact Changes
- Updated the device list to include the latest Apple devices (X, XR, XS, 11, etc). We also updated the implementation to load from a JSON file instead of hardcoding the device names. Lastly, we added two more variables with extra device detail:
model_name
(such as iPhone 8, iPhone XR Max, iPhone 11 Pro, etc) andmodel_variant
" For example,"GSM"
,"WiFi"
,"model A1457, A1518, A1528"
, etc. If no extra model information is available, the standarddevice
variable will read something like:"iPhone 10,0"
.
September 1, 2019
Tealium for React Native
Low Impact Changes
- Removed
rnpm
frompackage.json
and added areact-native.config.js
per React documentation. - Updated Android and gradle versions in the sample app.
- Updated both Android and iOS sample apps to use the latest versions of their respective Tealium libraries.
August 1, 2019
Tealium for iOS (Objective C)
Low Impact Changes
- Added functionality to reattach to the view at each track call so that Tealium does not need to be reinitialized when view hierarchy changes. Validation in your own app is essential; verify that you see tracking calls leaving your app in a variety of different screens in your app, including any views that may be launched from push notifications, where the view hierarchy may have changed.
July 1, 2019
Tealium for iOS (Objective C)
Low Impact Changes
- Removed trace ID cookie check on each call to the webview since this appeared to be causing crashes. This worked nicely with
UIWebView
but seemed to cause problems withWKWebView
. Refer to Debugging Tealium Mobile Apps for other Tealium installation validation and debugging methods.
Tealium for C sharp
High Impact Changes
- Collection endpoint changed from VData to HTTP API.
- Introduced Support for both HTTP GET and POST methods for sending data; default is POST.
Low Impact Changes
- Trace helper methods added to the Tealium class to make it easier to join/leave/end a Trace.
- This adds the
tealium_trace_id
key and trace ID value to all events whilst a trace has been joined.
- This adds the
- Bug Fix
- Optional Data supplied on Config creation was not being passed in events.
- This is not present on all events.
.gitignore
file added to remove unnecessarily tracked compiled code.
Tealium for Flutter 1.x
- Initial release.
- This plugin allows users to use the Tealium native mobile libraries (Android/iOS) within Flutter applications.
April 1, 2019
Tealium for iOS (Objective C)
High Impact Changes
- Tag Management now uses
WKWebView
instead ofUIWebView
by default. Read Tag Management documentation carefully before upgrading.
Low Impact Changes
- New sample app added to showcase
WKWebView
updates/changes
March 1, 2019
Tealium for React Native
Low Impact Changes
null
activity handling, as well as extra instance null checks for Consent Manager methods.- Gradle updates to target latest Android version.
February 1, 2019
Tealium for Java
- Removed
visitor_id
and switch to"event"
endpoint tealium_visitor_id
andtealium_vid
removed- Use the
"event"
endpoint using the POST method with JSON - Created a
Udo
data object to represent data instead of the ambiguousMap<String, Object>
- Updated methods to use the
Udo
data type and deprecate API methods usingMap<String, Object>
for data - Lots of refactoring and introduction of TDD practices to encourage more maintainable code in the library
Tealium for React Native
Low Impact Changes
- Bug Fix - Fixed public
trackEvent()
to calltrackEvent()
onTealium
instance for Android
High Impact Changes
- Additional public-facing methods of Tealium iOS and Tealium Android are now exposed.
- Multiple instances of Tealium are now supported.
- New configuration options have been added that include the enablement of Consent Management, Lifecycle, and a Datasource ID.
December 1, 2018
Tealium for Xamarin 1.x nelease notes
- Initial Release
August 1, 2018
June 1, 2018
Tealium Universal Tag (utag.js)
- Adds support for the following new built-in variables:
tealium_session_number
- a duplicate of the existing value inutag.data['cp.utag_main__sn']
tealium_session_event_number
- the cookie value inutag.data['cp.utag_main__se']
that counts the number of tracking calls (utag.view()
,utag.link()
) in the current session (visit). This is useful for Single Page Apps (SPAs) where there is only one page load with many tracked events on that page. For pages using thenoview
flag, the value is ‘1’ for both page load (load rule evaluation) and the first call toutag.view()
.
- Adds support for an empty param list passed into
utag.link
,utag.view
orutag.track
calls. In previous versions, calls toutag.link()
orutag.view()
work fine, but gets an extracfg
object added to the data layer. Calls toutag.track()
causes an exception in previous versions. - For pages using
noview
flag, there are two things to keep in mind:- The data layer will have a ‘1’ value for
tealium_session_event_number
for both page load (utag.js
uses data layer to loads in tags) and first call toutag.view
(which fires tags and/or loads in more tags.) - Because cookies are used and initialized at page load time, if the
utag.view
call does not happen in time on the first page, and the page is refreshed in browser, it moves to ‘2’ for the firstutag.view
call which happens on second page. This is an edge case since most implementations callsutag.view
immediately afterutag.js
executes.
- The data layer will have a ‘1’ value for
- This update also includes fixes for the “OU” function used by legacy Privacy Manager Extension.
- The OPTOUTMULTI cookie is re-checked with each call to
utag.view/link
(no page refresh required) - Tags fired directly by tag’s UID also checks the OPTOUTMULTI cookie settings before firing
- The OPTOUTMULTI cookie is re-checked with each call to
January 1, 2018
Tealium Universal Tag (utag.js)
- Fixes bug introduced in version 4.40 that added an extra entry in browser history for pages that loaded the same tag in an iframe more than once. This issue likely impacted Single Page Apps (SPAs) using iframe-based tag vendors.
June 1, 2017
Tealium Universal Tag (utag.js)
- Removed use of global variable
i
– previously used in loop through global variableutag_cfg_ovrd
(config override object) - Removed legacy s2s support (as this was previously removed from Tealium iQ.) Cloud Delivery supported in Tealium Customer Data Hub.
- Adds support for error handler function passed into
utag.ut.loader
utility function. This is only for modern browsers (older browser may the standard callbackcb
function instead)
utag.ut.loader({
"src" : "https://www.example.com/path/file.js",
"cb" : function(){console.log("CALLBACK")},
"error" : function(){console.log("ERROR IN LOADING")}
});
Tealium for Java
- Added Datasource
- New variable
tealium_datasource
added - Persistent file name changed to
account.profile.data
(if upgrading from prior version, file no longer accessible) - Bug fix for unit test
Tealium for C sharp
- Event Tracking
- Track event names with optional additional data. Provide completion blocks to handle any responses.
- Collect Module
- Support for sending event data to a collection endpoint. If needed, override the defaults to Tealium’s VData endpoint.
- AppData Module
- Provides automatic inclusion of useful app data (session id, random number and timestamp) to each events, as well as user defined optional data.
- Logger Module
- Provides log output for debugging purposes.
- Sample application included showing example interaction with the main classes.
February 1, 2017
Tealium for Java
- New variable
tealium_event_type
added track(type, title, data, completion)
added as new primarytrack
method, types avail:activity
conversion
derived
interaction
view
DispatchCallback
update to return info dictionary instead of justencodedUrl -> ( boolean, map<String, Object>, error)
that- Removed of convenience retry
track(string, callBack)
September 1, 2016
Tealium for Java
- Bug Fix -
LogLevel
enum converted to public API
August 15, 2016
Tealium Universal Tag (utag.js)
Add new built-in Tealium event attributes. These new attributes are added to the data layer with each Tealium view or link event.
tealium_visitor_id
The Tealium-generated ID in the cookiecp.utag_main_v_id
tealium_session_id
The epoch timestamp string of current session start in mstealium_account
The account string value in the path to theutag.js
filetealium_profile
The profile string value in the path to theutag.js
filetealium_environment
The environment string value in the path to theutag.js
file. For example, “dev” or “prod.”tealium_datasource
The data source key from Tealium EventStream.tealium_random
A random number as a string for use in cache bustingtealium_library_name
The name of the library (utag.js
)tealium_library_version
The version of theutag.js
. For example, “4.42.0” for this release)tealium_timestamp_epoch
Current epoch time in seconds as an integertealium_timestamp_utc
Current ISO string timestamp for UTC time zone (not available on older browsers)tealium_timestamp_local
Current ISO string timestamp for browser’s time zone (not available on older browsers)
August 1, 2016
Tealium Universal Tag (utag.js)
Minor update to fix typo for the fallback function in utag.ut.encode
.
The encodeURIComponent
call now falls back to use JavaScript’s escape
call for the exception when encoding badly formed unicode characters.
April 1, 2016
Tealium Universal Tag (utag.js)
Improvements in behavior in Single Page App (SPA) sites using utag.link
and utag.view
Previously, items in current data layer passed to utag.link/view
were merged into the utag.data
global object. This was required to re-evaluate load rules for each utag.link/view
call. The utag.js
4.40 template takes advantage of a publish engine update so that this is no longer required. In version 4.40, the utag.data
global object is not updated with each utag.link
or utag.view
call.
You may use the following JS Extension to test for backwards compatibility with 4.39 behavior before updating to 4.40.
// JS Extension scoped to "Before Load Rules"
utag.ut.merge( b, utag.data, 0 );
utag.ut.merge( utag.data, b ,1 );
New “noconsole” flag.
Setting the flag in utag_cfg_ovrd object to true stops any output from utag.DB
from displaying in the web console. If debugging is enabled, the output still persist in the utag.db_log
array.
Creating an iframe in DOM using utag.ut.loader function
If an iframe with the same ID already exists, the iframe is not added again. Instead, the iframe src is updated.
Updating JS Page vars value for utag.view
or utag.link
calls
JS Page vars are now updated to their current value with every call to utag.view
or utag.link
. As a result the b["js_page.my_global_var"]
has the latest value in window.my_global_var
each time utag.link
is called.
Bug fix to keep cp.utag_main_ses_id
in the data layer with every utag.link
or utag.view
call
The value is now updated with a new session ID following a utag.link/view
call that occurs when the visitor has been on the same page for 30 minutes with no activity.
Removed trick to use eval
to read the document.referrer
value into the data layer’s b["dom.referrer"]
New utag.ut.encode
function
This function falls back to use escape when encodeURIComponent issues an exception (an exception is possible when attempting to encode Unicode characters that are incomplete or incorrectly formed).
_t_visitor_id
and _t_session_id
are no longer available
Auto-generated data layer values _t_visitor_id
and _t_session_id
are no longer available. These are replaced by ut.visitor_id
and ut.session_id
. If still desired, add them back in as follows:
// JS Extension scoped to "Before Load Rules"
b["_t_visitor_id"] = b["cp.utag_main_v_id"];
b["_t_session_id"] = b["cp.utag_main_ses_id"];
July 1, 2015
Tealium Universal Tag (utag.js)
- Adds support for the Tealium Collect Tag that writes visitor enrichment data to a profile-specific location in local storage.
June 1, 2015
Tealium Universal Tag (utag.js)
- Supports a new drop-down list for selecting when to execute an All-Tags-scoped Extension.
- After Load Rules (default selection)
- Before Load Rules (not supported by 4.37 and below)
- After Tags (not supported by 4.37 and below)
This feature is not compatible with 4.37 below as they may cause the Extension to run more than once.
- Added support for calling
utag.view
before all the Tags have loaded; this fixes a bug when callingutag.view
to fire a specific Tag by its UID inside a DOM Ready-scoped Extension. - Added support for calling
utag.link
for a specific Tag by its UID.
February 1, 2015
Tealium Universal Tag (utag.js)
- Fixed a bug that incorrectly decodes any instance of $ value in the
utag_main
cookie and render it as a separator instead. Following this fix, theutag_main
cookie values are not ‘double decoded’ anymore. - Fixed a bug that caused the
utag_main__ss
cookie to be set incorrectly when the readywait flag was set and /or theutag_data
object was absent from the page.
January 1, 2015
Tealium Universal Tag (utag.js)
- Load new tags on call to
utag.link()
. Callingutag.link()
can load tags not already on the page. - Fixed a bug in which the
utag.data
object was not initialized for DOM Ready-scoped extensions when thewaittimer
andreadywait
flags were set totrue
. - Added new built-in Data Layer variables:
utag.data["ut.domain"]
: The website’s domainutag.data["ut.version"]
: The version ofutag.js
loading on the siteutag.data["ut.event"]
: The type of event (link or view)utag.data["ut.account"]
: The Tealium iQ account on the siteutag.data["ut.profile"]
: The Tealium iQ profile on the siteutag.data["ut.env"]
: The publish environment
- Fixed a bug in which manual
utag.view
andutag.link
calls were not extending the session end cookie timestamp. This is especially useful for single-page apps and sites that rely on AJAX to keep the session open while the visitor interacts with the site. - Fixed a bug for blocking Tags that prevented synchronously loading Tags from being used as blocking Tags.
- Fixed a bug that prevented the loading of multiple synchronous blocking Tags from cache for older of Internet Explorer.
- Added debugging to output the Data Layer at the point right before All Tags-scoped extensions run.
December 1, 2014
Tealium Universal Tag (utag.js)
- Fixed a bug in which the Data Layer was not preserved for
utag.view()
calls made in rapid succession. Now a snapshot of the Data Layer is preserved for each call. - Added more debugging output for manual
utag.view()
andutag.link()
calls. - Added a new utility function:
utag.ut.typeOf()
. For example,utag.ut.typeOf([])
returns the value “array.”
October 1, 2014
Tealium Universal Tag (utag.js)
- Added an override (
utag_cfg_ovrd
) flag toutag.js
in order to delay the loading of Tags until the DOM readyState “complete” (AKA “load”) event. This flag provides a delay that may improve page display time speeds by causing all Tags with the Wait = Yes setting to execute even later. Set this flag by entering the following code into a PreLoader-scoped JavaScript Code extension:
var utag_cfg_ovrd = {};
utag_cfg_ovrd.dom_complete = true;
- Fixed a bug for the Internet Explorer browser in which the DOM readyState was reported as “interactive” prematurely. An extra delay for readyState “complete” was added for older of Internet Explorer.
September 1, 2014
Tealium Universal Tag (utag.js)
- Added two new DOM Variables (formerly Data Sources): browser height (
dom.viewport_height
) and browser width (dom.viewport_width
). Use these in Load Rules to detect when a visitor is using a certain devices to browse your site. For example, when this value is less than 480, you might assume the visitor is using a phone device. Try this on your phone for fun. - Added support for custom attributes on iframes/scripts to the
utag.ut.loader
function. - Fixed a bug in which Tags were not loading in order indicated in the Tags tab when fired by a manual
utag.view
call.
August 1, 2014
Tealium Universal Tag (utag.js)
- Fixed a bug with Publish Settings so that you may now enable both the Ready Wait Flag and Bundling Libs publish settings for the same profile.
- Fixed a bug in which enabling the Ready Wait Flag setting caused the utag.cfg.noview flag to reset to “false” if you had set it to “true.”
- Introducing the new configuration flag, Wait Timer (
utag_cfg_ovrd.waittimer
). Tags do not load until the DOM Ready signal goes out. With this flag set exactly how long after the DOM Ready signal the Tags wait before they load. Setting this flag exposes the load time of a webpage without including the load times of third-party vendor Tags. You set this value in milliseconds.
Here is an example of how to set the Wait Timer flag:
var utag_cfg_ovrd={};
utag_cfg_ovrd.waittimer=3000;
This code snippet delays the loading of all Tags until 3 seconds after the DOM Ready signal.
May 1, 2014
Tealium Universal Tag (utag.js)
- Fixed a UTAG utility function bug for Internet Explorer browsers when bringing in external JavaScript files and running a callback function. This addresses a rare timing issue in which the callback function runs too soon.
- Introduces additional debugging output for when
utag.view
is called before all Tags are loaded. The Tag UID which may have an error now shows up in the output.
April 1, 2014
Tealium Universal Tag (utag.js)
- Fixes a bug which prevented support for more than one blocking Tag. You may now have more than one Tag act as a blocking Tag. For example, Tealium Currency Converter with another external
.js
file. - Extensions scoped to “All Tags” run after any blocking Tags complete.
- The
utag.v.js
file is no longer sent in the situation that you are self-hosting theutag.js
file. - Removed “top.” from visitor ID generation logic. This fixes issues with iframes.
February 1, 2014
Tealium Universal Tag (utag.js)
- Introduces support for AudienceStream Data Layer Enrichment. This requires AudienceStream and the DataCloud Tag.
- The
utag.js
reads Meta tags with everyutag.view
call in order to capture dynamic Meta tags. - There are several changes to the
utag_main
cookie:-
The
utag_main
cookie’s lifespan is now set to 1 year to conform to EU laws. -
The session ID (
ses_id
) value in theutag_main
cookie is now a timestamp that is used to compute a visitor’s time on your website.To reference this value, use the following syntax:
b["cp.utag_main_ses_id"]
-
Introduces the session number value in the
utag_main
cookie.To reference this value, use the following syntax:
b["cp.utag_main__sn"]
-
Introduces the page number value, which increments every time
utag.js
loads, essentially with each new URL load. This is not to be confused with an Event Counter. This value starts over at 1 with each new session.To reference this value, use the following syntax:
b["cp.utag_main__pn"]
-
Known issue: The page number (
_pn
) and session number (_sn
) values are set to NaN whenever a visitor visits a website in which theutag_main
session cookies was already set by a version ofutag.js
prior to 4.27. This issue is resolved inutag.js
version 4.28.
-
- Introduces the utag.ut.flatten function, which flattens objects. This is primarily used with Data Layer Enrichment for AudienceStream.
January 1, 2014
Tealium Universal Tag (utag.js)
Load rules are re-evaluated for both utag.view()
and utag.link()
calls.
Changes to the way the utag.js
4.26 file handles query string parameters and meta tags means that they are no longer lower-cased by default. If you have query string parameters or meta tags identified as data sources in your profile, you may need to update those data source names in the Data Layer tab to match upper case and lower case letters exactly.
Custom Script Source is a Blocking Tag
A blocking tag is a tag that must run before any other tags run. When you enter the location for the custom script source advanced setting for a tag, this tag automatically becomes a blocking tag. This tag still loads asynchronously, but subsequent asynchronous scripts. For example, utag.10.js
does not load until the blocking tag is complete.
Best Practice: If you want to load custom JavaScript for a tag but you do not want it to be a blocking tag, use the Tealium Generic Tag to load it.
Wait Flag Improvement
The Wait Flag is an advanced setting within tag configuration.
Tags whose Wait Flag is set to “No” load and fire immediately after the utag.js
file loads. Those tags, whose Wait Flag is set to “No,” that load sooner may fire sooner, regardless of their order in Tealium iQ. For example, if Tag 2 loads before Tag 1, and Tag 1 is placed higher in the Tags tab in Tealium iQ, Tag 2 may still fire sooner, despite the order they’re in. Previously, tags executed in the order specified in Tealium iQ. These tags then waited for tags placed higher in the order to load before loading themselves.
This means that you may now have a mixture of tags with their Wait Flag set to ‘No’ and tags with their Wait Flag set to ‘Yes’ in the same profile.
Control Load Rules-based Tracking for AJAX
Subsequent utag.view()
calls on the page trigger load rules to load new tags. In previous versions, a utag.view
call does not load new tags. This feature is enabled by default in utag.js
4.26.
Disable this feature to keep current behavior. See utag.cfg.load_rules_ajax flag details below for more information.
A utag.link()
call does not load a new tag. Only a utag.view()
call does this.
Load a Tag Directly By UID (Update to utag.view
and utag.track
calls)
For advanced implementations, especially those using AJAX, use the utag.view()
call to bring in a new tag and fire it based on the tag’s UID (as seen in the Tags tab of Tealium iQ). This bypasses all load rules.
utag.view({page_name : "New Page"}, null, [5]);
- Param 1: Data Layer
- Param 2: Callback function (or null)
- Param 3: Array of UIDs to load and fire
Learn more about page tracking.
Automatically Read New “Meta” tags
These types of meta tags with “name=” were picked up in a previous version of utag.js
:
<meta name="keywords" content="Apple,Tab" />
The new utag.js
4.26 now picks up those with property=
(see “Open Graph” meta tags)
<meta property="og:type" content="video.movie" />
Removing the “lowercase” by default of “qp.” (query string) and “meta.” variables
This is a logic change in the default behavior of utag.data
. Set the utag.cfg.lowerqp flag to true
to automatically lowercase. However, the default setting keeps the mixed case.
Set the utag.cfg.lowerqp
flag to true for backward compatibility with previous utag.js
behavior.
Set the utag.cfg.lowermeta
flag to true
to enable lower-casing for the meta tags. This only applies to the name of the name/value pair for that meta tag.
If you have mixed-case query string parameters, you need to update the data source’s name in the Data Sources tab to match exactly. Any code that refers to this query string type data source must also be updated.
New Values in utag_main
Cookie
There are new cookie name/value pairs in the utag_main
cookie:
utag_main_vid
A long string to uniquely identify the visitor, such as013efdc67183001adeec0eef13010a051001b00f0093c
)utag_main__ss
A “Session Start” flag. Set to"1"
for the first page view of a new session. Default session time is 30 minutes elapsed with no activity.
(The previous cookie values utag_main__st
and utag_main_ses_id
are still set.)
Session Start Tracking
A request for an empty file, utag.v.js
, is made once at the start of a visitor’s session. This is used internally by Tealium to log the session count. The HTTP request URL looks like this:
http://tags.tiqcdn.com/utag/tiqapp/utag.v.js?a=tealium/main/201306012057&cb=1370276499302
The new cookie value utag_main__ss
, is used to determine when to fire. This is only sent on the first event of a session. This request is sent last, after all tags have fired.
New “Tealium” Values
Identify the new cookie values in the Data Layer tab:
- The session ID value in the
utag_main_ses_id
cookie - The visitor ID value in the
utag_main_v_id
cookie - The session start flag (0 or 1) found in the
utag_main__ss
cookie
URL Fragment Parameters
Previously the name/value pairs in a URL after the ?
were read and stored in utag.data
as qp.
values. Now, items after the hash/fragment #
sign are also used to build these. This adds an important feature for AJAX sites.
Example Domain URL:(http://www.example.com?param1=value1¶m2=value2#hash1=value3)`
Previous:
utag.data = { "qp.param1" : "value1", "qp.param2" : "value2"}
New:
utag.data = { "qp.param1" : "value1", "qp.param2" : "value2", "qp.hash1" : "value3"}
All Page Data Available to utag.view
and utag.link
Calls
Previously, utag.view
and utag.link
calls only knew about the data you passed them. Items like b["qp.campaign"]
were not available. Now, all “built-in” data points such as URL, meta, or cookie values are added to the data layer for the utag.link
and utag.view
calls.
Also, dynamic items that may have changed for AJAX sites (such as b["dom.url"]
) are re-built so they use the current value. The current value may be different from the value at the time of the initial landing on an AJAX page.
New Options in utag.cfg
Use a Pre Loader-scoped JavaScript Code Extension and the global variable window.utag_cfg_ovrd
.
// JS Code in Preloader Extension
window.utag_cfg_ovrd = {
"noview" : true,
"lowerqp" : true,
"load_rules_ajax" : false
};
The following new options are available:
utag.cfg.load_rules_ajax
Set this flag tofalse
when you do not wish to “re-evaluate” load rules for eachutag.view
andutag.link
call. Forutag.view
, this may also load a newutag.X.js
file if it did not load on the initial page view.utag.udoname
The name of the data object. Theutag.js
code assumes the data object is a global variable. For example, not an object within another object. By default, this is set toutag_data
utag.cfg.load_rules_at_wait
Set this flag totrue
when you wish to re-evaluate load rules at Wait (DOM Ready). This enables legacy support where data may have been set afterutag.js
loads and you want to use this data to fire a Tag set to wait for DOM Ready.utag.cfg.lowerqp
Set this flag totrue
if you wish to lowercase your query string name/value pairs. This used to be the default behavior.utag.cfg.lowermeta
Set this flag totrue
if you wish to lowercase your meta tags’ names. The value of the name/value pair for the meta tag is not lowercased.utag.cfg.noview
Set this flag totrue
if you wish to control when the initialutag.view
call is made. This is common for AJAX sites where your application controls the page view event (not the initial page load action.)
Things to Consider
-
Accidentally Firing Multiple Orders - The
utag.link
andutag.view
calls now have all of the “DOM” type of data points available in every call. For example, the query string data such asb["qp.order_id"]
is read on the page load and trigger an order event. However, if you fire autag.link
call on that same order page, it also has theb["qp.order_id"]
data set and trigger a second order event. -
For most intuitive behavior, we recommend setting all
utag_data
values before you load in theutag.js
file. And keeputag.cfg.load_rules_at_wait
at “false,” which is the default. -
Be aware that updating to
utag.js
4.26 changes the default behavior for lower casing your query string params. Values are no longer automatically lower-cased. -
“All Tags”-scoped Extensions may or may not run before DOM Ready-scoped extensions. Order is not guaranteed. If you manipulate a data layer element in an All Tags-scoped extension, then it may affect your Content Modification Extension’s criteria.
Best Practice: Do not modify the original data layer object. If you need to modify a value, use a new variable instead.
Known Issues
- The Data Layer’s
utag_data
object becomes a reference toutag.data
, and changing one changes the other. - Internet Explorer 8 may introduce timing issues if your Data Layer is defined at the end of your
<body>
element, just before DOM Ready (and theutag.js
is already loaded). As a best practice, always declare yourutag_data
object before you load theutag.js
file.
November 1, 2013
Tealium Universal Tag (utag.js)
Fixes a bug when using the Tealium Currency Converter tag or any Tag with a value set for Custom Source Advanced setting, in which the Tag waits until for a force timeout threshold of 3 seconds or greater to call the u.send function for the other Tags.
September 1, 2013
Tealium Universal Tag (utag.js)
Fixes a bug in which “Wait = Yes” tags wait for a “load” event instead of DOM Ready event when utag.js
was executed after DOM Ready.
For many sites, this is a significant performance boost and loads tags that are set to wait for DOM Ready much sooner.
March 1, 2013
Tealium Universal Tag (utag.js)
Update to support domains ending in “.edu.au” and “.net.au” (using “au” for an example.) The previous utag.js
only supported “.com.au” and “.org.au”
Update to utag.loader.GV
(the internal “Get Variables in Object” function) to use hasOwnProperty. This is the safer way to iterate.
January 1, 2013
Tealium Universal Tag (utag.js)
The Publish Engine builds a utag.loader.cfgsort
variable that is an Array of the Tag UIDs. This Array is in the right order of the Tags in Tealium iQ. Tags now fire in the order that matches the Tealium iQ’s order.
December 1, 2012
Tealium Universal Tag (utag.js)
Adds the utility function utag.ut.decode
.
Also adds support for a “no cookie” flag utag.cfg.nocookie
. When the utag.cfg.nocookie
value is defined and set to true then utag.js
does not write any utag_main
cookies.
Existing utag_main
cookies are not modified or removed. Some tags expect that utag_main
cookies exist, so use this flag at your own risk.
Sample (Pre Loader-scoped JavaScript Code Extension):
var utag_cfg_ovrd={};
utag_cfg_ovrd.nocookie=true;
utag.ut.decode
is a safer version of decodeURIComponent
(if decodeURIComponent
issues an exception, then unescape is used)
November 1, 2012
Tealium Universal Tag (utag.js)
Includes a fix for an Internet Explorer DOM Ready Extension “timing” issue in Internet Explorer 7 and Internet Explorer 8 in which Internet Explorer may or may not run the DOM Ready Extensions before Tags are loaded. This version fixes the issue to ensure that DOM Ready Extensions run first. This provides consistent behavior in all browsers.
Changes in utag.DB
. This function is changed so that every utag.DB
call does not “re-check” the cookie for utagdb=true
; this makes for a high-performance utag.DB
function.
Adds additional utag.DB
calls in utag.js
.
How do you turn on debugging? Run this in a console: document.cookie="utagdb=true"
Sample utag.DB
call:
utag.DB("Inside of DOM Ready Extension");
October 1, 2012
Tealium Universal Tag (utag.js)
Adds the ability to set a utag_main
cookie to expire at a specific timestamp.
utag.loader.SC("utag_main",{"mycookie123":"testing123;exp-1351111959896u"});
Note the u
at the end of the timestamp
August 1, 2012
Tealium Universal Tag (utag.js)
Fixes a cookie decode issue in which the cookie had strange characters.