- Header encoding for OkHttp 4.x compatibility (Fix)
- Add 16KB page size support for Android 15+ devices (Fix)
- Fix missing
logs()method in Logger interface (Fix)
- Integrate contextual cohorts with classification models (Update)
- Integrate content-based contextual cohorts (New)
- Introduce Dagger as dependency injection framework (v2.53.1) (New)
- Automatic contextual cohort targeting integration for Google Ad Manager requests (New)
- Automatic contextual cohort targeting integration for AppNexus/Xandr ad requests (New)
- Fix issue causing cohort transition event aggregation to stop working in some situations. (Fix)
- Remove aho-corasick string-searching from cohort processing to reduce memory usage. (Fix)
- Integrate with new API for audience matching to improve matching based on external data (New)
- Fix close button on debug overlay (Fix)
- Fix logging when setting completion percentage (Fix)
- Update Google Play Services Ads dependency to 24.0.0 (Update)
- Changed Android minSdk version to 23 (Update)
- Add aggregations of cohort transition events to PageviewComplete event properties to reduce our network load (New)
- Fix missing class issues by removing dependency on ktor utils library from the query engine (Fix)
- Fix issue that could occur when synchronising user state (Fix)
- Update compile SDK version to 34 (Update)
- Update Google Play Services Ads dependency to 23.2.0 (Update)
- Remove
PermutiveAdManagerAdRequestBuilder.addNetworkExtrasfunction (removed from ads SDK) (Breaking change) - Remove
PermutiveAdManagerAdRequestBuilder.setLocationfunction (removed from ads SDK) (Breaking change) - Deprecate
PermutiveAdManagerAdRequestBuilder.addCustomEventsExtrasBundlefunction (deprecated in ads SDK) (Deprecation)
- Add remotely configurable list of third and second party data providers that are excluded from usage reporting (New)
- Replace RxJava2 with Kotlin Flow in state synchronisation (Update)
- Add new feature flag to enable Classification Model cohorts for this version and above (Update)
- Add video ad tracking functionality through the
AdTracker. See here for more information (New) - Add new container classes for video properties,
MediaTracker.VideoPropertiesandMediaTracker.PageProperties. (New) - Add new
trackVideoViewfunction which takes the new property objects and deprecatecreateVideoTracker. (Update) - Release beta version of the debug overlay UI tool. (New)
- Add new
TriggersProviderfunctions which supportbooleanresults for cohorts. (New) - Remove Rhino Javascript engine library. (Update)
- Remove intermediate objects created during event processing to improve memory usage. (Update)
- Fix RxJava undeliverable exceptions escaping error handling. (Fix)
- Fix issue resulting from Kotlin reflection library dependency conflicts. (Fix)
- Update the native query runtime to the latest version with more efficient state updates. This will reduce the number of calls to the Permutive API made by the SDK. (New)
- Fix crash occurring on devices running Android 25 and below caused by desugared java.time library not being included in AAR. (Fix)
- Increase minimum Android SDK version from 16 to 21. For more information on why we’re doing it and how we’ll be minimising disruption read here.
- Added support for Classification Model cohorts. (New)
- Added new properties for retrieving cohorts and activations.
PermutiveSdk.currentCohorts: List<String>&PermutiveSdk.currentActivations: Map<String, List<String>>. (New) To allow us to support more cohorts we have switched from using integers to strings as cohort IDs. The new properties are equivalent to the oldPermutiveSdk.currentSegments: List<Int>&PermutiveSdk.currentReactions: Map<String, List<Int>>properties respectively. - Deprecate the
PermutiveSdk.currentSegments&PermutiveSdk.currentReactionsproperties. (Deprecation) - Fix a query in the native query runtime. (Fix)
- Change evaluation of some debug log strings to be lazy. (Fix)
- Retrieve cohorts using the new
PermutiveSdk.currentActivationsfunction. (Update)
- Retrieve cohorts using the new
PermutiveSdk.currentActivationsfunction. (Update)
- Downgrade Kotlin requirement to v1.6+. (Update)
- Enable the native query runtime by default. (New)
- Fix native query runtime not interpreting some queries correctly. (Fix)
- Fix issue with external state decoding. (Fix)
- Fix crash occurring when retrieving Classification Model cohorts (Fix)
- Fix missing common module classes (Fix)
- Fix issue with debug event recorder caching large amount of events. (Fix)
- Remove the “CTV” prefix from the names of our video events tracked through the
MediaTrackerAPI to better reflect their usecase for all video content. (Update) - Update to how we capture the
client.user_agentevent property to allow us to support better device distinction in the insights platform. (Update) - Additional fixes to query interpretation when using the native engine. (Fix)
- Update the new
clearPersistentDatafunction to always run on coroutineDispatchers.IOto prevent possibility of database access from the wrong thread. (Fix) - Added some additional proguard consumer rules to prevent native engine deserialization classes from being removed. (Fix) Please ensure you test you application with minification and Permutive debugging enabled (see verification guide)
- Fix issue causing certain queries not to be interpreted correctly. (Fix)
- Add new instance functions for clearing persistent data and deprecate old function. (New) The previous
clearPersistentDatafunction was potentially causing issues with the Permutive SDK database instance resulting in crashes. The new functions are safer to use and also inform of success or failure. - Add migration path for users moving from event-sync to our new native state-sync. (New)
- Add handling for undelivered exceptions. (New)
- Fix exception when migrating from database version 4 to 5. (Fix)
- Add new
setPermutiveAdListenerfunction which enables automatic impression tracking. For more information see AppNexus/Xandr integration. (New)
- Fix issue which caused the SDK to stop if the user received network errors when making an identity call. (Fix)
- Add new native engine to replace the Rhino Javascript engine. This feature will be rolled out gradually. (New) Rhino Javascript will be removed in a subsequent release after rollout of the native engine is complete.
- Update EventProperties API so that it allows nullable values. (New)
- Fix exception which could occur when doing database migration. (Fix)
- Add support for setting priority and expiry for aliases set through the identity APIs. (New) The identity APIs support new functionality for prioritising aliases and deleting them automatically on expiry. For more information see our documentation on identity management.
- Add support for tracking Fire and Fire TV as platforms. (New) Fire and Fire TV devices are now tracked as separate platforms types for clients.
- Fix printing of nested EventProperties which previously showed as ‘null’. (Fix) Nested EventProperties in the developer log were incorrectly showing as null, they now show as the correct nested structure.
- Fix memory leak caused by some internal resources not closing correctly. (Fix)
Parts of the SDK were found to still run even after
close()was called on an SDK instance. These have now been fixed. - Fix issue that could sometimes cause events to be processed more than once. (Fix) Sometimes events could end up being tracked more than once causing slowdown and memory consumption. This has now been fixed.
- Update Xandr/AppNexus dependency to 7.X.
- Add support for Google Ads slots clicked events. (New) Additional information is included in the GAM request which allows for server side generation of slot events.
- Fix in-IDE documentation for core APIs. (New) API documentation is now accessible in the IDE.
- Adds in page engagement support. (New) Engagement segments can not be evaluated in the current page, rather than only once that page has closed/completed.
- Add video tracking support. (New) Similar to pages we now support tracking video events and video engagement using the MediaTracker class.
- Fix exception happening when events containing an empty list as a child of
EventPropertiesare tracked. (Fix)
- Optimise segmentation engine memory usage. (New) An optimised way of passing events to the segmentation engine has been added which will reduce OutOfMemoryErrors.
- Fix exception when using
EventPropertiescontaining a list ofEventProperties. (Fix) Correct property handling has been added forEventPropertieswhich contain a value which itself is a list ofEventProperties.
- Add more comprehensive logging to the SDK. (New) Improved logging will assist in verifying integrations and debugging any potential issues. See the verification guide for details on what logs are available.
- Remove internal logging of current segments and current reactions. (New) These can easily be logged externally so have been removed to reduce noise from the internal SDK logs.
- Fix memory leaks when restarting the SDK (Fix)
- Update library dependencies (New) Updates Google-Play-Services dependency from v18 to v20.
- Update library dependencies (New) Updates third party dependencies - room, rxjava, androidx to the latest versions.
- Update minimum SDK version to 16 (New) Updates minimum SDK version from 14 to 16.
- Always identify on startup (New) In order to prevent potential identity collapse, the SDK always identifies upon startup, so any such issues can be resolved by the server.
- Fix ConcurrentModificationException at startup (Fix) The deferred queue has been updated to fix an issue where ConcurrentModificationException can be thrown due to a deferred operation that itself modifies the deferred queue.
- Fix SQLite issue when migrating to state sync (Fix) Rewrite SQLite query for migration to state sync so that it does not exceed the maximum variable limit for the Android SQLite implementation.
- Fix conflicting cache issue with OkHttp (Fix) Cache issues can occur if both the host application and the Permutive SDK use OkHttp in the same cache directory. Permutive SDK now uses a subdirectory of the cache directory.
- Update URLs to
permutive.app(New) Moving frompermutive.com- SDK traffic should usepermutive.appname. - Fine tune metrics for the state-sync/event-sync variants (Fix) Metrics are now able to be fine tuned so that the variants do not interfere with the reported data.
- Add state synchronisation support (New) We now merge off-device state using states rather than raw events.
- Fix migration issue with 1.5.2 (Fix) Fixes a critical persistence issue when upgrading to 1.5.2 with persisted state from an older version.
- Constrain event cache upon startup (New) Excess events are dropped upon startup if the events cache is lowered.
- Handle OOM exception when evaluating script (Fix) We now disable the SDK & report an issue if an OOM condition occured when evaluating the segmentation script.
- Update Kotlin to 1.4.20 (New) Updated to the latest stable developer release of Kotlin.
- Disable pre lollipop devices by default (Fix) Devices older than 5.0 are unable to communicate with our servers as we use the more secure TLS 1.2 protocol.
- Handle OOM exceptions more gracefully (Fix) Disable the SDK when an OOM occurs during segmentation, freeing up memory for the host application.
- Add CheckResult annotation for all public methods that return values (New) Warnings should occur in the IDE when using public functions that returns values.
- Updated to Kotlin 1.4.0 (New)
- Better developer logs & dynamic log support (New) It is now possible to dynamically turn on logging for a deployed app, which can help for verification of the deployment.
- Fix halting when there is a connection issue (Fix) Under some circumstances the SDK would halt execution when a connection issue occurred.
- Do not include rejected events in cache (Fix) Rejected events are not not included in the events cache.
- Fix watson decode issue (Fix) Watson would not decode correctly if a client was using a later version of the moshi library.
- Add Enterprise workspace support (New) Passing through a Workspace Id rather than a Project Id will use segments and events configured for that particular workspace, rather than for the whole organization. If migrating from an existing ProjectId to a new Workspace Id, local state is still retained during the migration.
- Stop running the segmentation engine when a memory trim level has been sent by the OS (New) When the device starts running out of memory, the Android SDK will shutdown it’s running systems until a call to the public APIs is made.
- Only track engagement events if configured to (Fix) We only send PageviewComplete events if the project is configured for this.
- Handle devices that are configured with a DNS sinkhole (Fix) Fix issue when a device is connected to a DNS sinkhole under certain conditions the SDK can make repeated requests for the same resource.
- Add Watson enrichment support (New) EventProperties.ALCHEMY_* strings can be used to enrich an event with the watson information provided for the current/page URL.
- Add PageviewComplete event (New) Adds page engagement support for the Android platform. The PageviewComplete event is automatically generated when calling close on a PageTracker object.
- Always use application context on initialisation (Fix) Prevents Activity leaks when passing an Activity as the SDK’s context, rather than the Application.
- Turn off TPD usage reporting as a default (Fix) TPD usage reporting is not used by our customers at this time, so this has defaulted to off.
- Report SDK version as a metric (New) Reporting SDK version will give us better information on current deployments.
- Add hashed ip as an event enrichment type (New) The string “$ip_address_hash” will now resolve to a hashed version of the client’s ip address.
- Fix instances of dependencies upon startup (Fix) Fixes a potential race condition that could allow double creations of SDK dependencies.
- Fix error reporting so that it includes script date/time (Fix) To better diagnose issues we now report the query language creation time in error reports.
- Handle illegal argument exception when unregistering broadcast receiver (Fix) Fixed an issue when unregistering a broadcast receiver that has not yet been registered in some cases.
- Always ask server to resolve resources, regardless of cache-control max-age (Fix) We now do not honor the cache-control max-age header, as if this is very long we will not fetch the updates files from our servers.
- do not generate segment_exit events for deleted/missing segments (Fix) We now do not generate segment_exit events for missing/deleted segments.
- update library dependencies (New) We’ve updated our library dependencies to take advantage of the latest bugfixes & enhancements.
- Remove deleted queries from persisted state (New) We now detect & delete queries & segments that have been deleted/disabled from the dashboard.
- Add date support to EventProperties (New) In older SDKs a developer had to manually format a datetime object to a String (in ISO 9601), we’ve added date support for EventProperties so that this will happen automatically.
- Add appnexus support to add permutive targeting (New) We’ve added preliminary support for ad targeting using the AppNexus SDK with our new appnexus addon library.
- Add OS/Script/App info to error reports (New) When we report an error to our endpoints we now include additional information to help us diagnose issues: The operating system version, the segmentation queries version that is being executed as well as information on the Application (version & identifier).
- Limit deferred functions upon startup (New) While the SDK is initialising, we defer execution of public function calls until this has completed. This was previously unlimited, we have put in a cap so that this does not become unbounded.
- Add pagetracking API & deprecate context APIs (New) The PageTracker API gives support for Pageview and PageviewEngagementAggregate events. The page’s context (url/title/referrer) are now tied to a Page, rather than a global Permutive setting. Using the PageTracker API will allow for better reporting & better visibility of engagement on the Android SDK. As a result, we would recommend using PageTracker rather than EventTracker for page related events. As a general rule: if an event has a url/title/referrer - it should probably be tracked by the PageTracker object. The global context methods setTitle/setUrl/setReferrer are now deprecated as a result, and we have stopped persisting these values.
- Fix illegal state in db when reading (Fix) A small percentage (around 0.5%) of users have reported an IllegalStateException under certain circumstances. Previously we would halt segmentation & disable the SDK for these users, for 1.4.0 we have a fix so that this will no longer happen.
- Fix regex matching when disabling (Fix) We have made our regular expression matching more straightforward in the event that we have to disable a deployment.
- Fix consumer proguard typo (Fix) Some setups of proguard have stripped away functions that we are using internally. Although we had a @Keep clause on the function, it is still possible that it can be stripped away. We have updated our consumer-proguard so that this is fixed.
- fix issue when migrating from older versions
- Add ability to remotely disable by application, os, or sdk version (New)
- Remove dependency on core library for google ads library (New)
- Add third party data usage reporting support (New)
- Make engine events session_id & user_id optional (Fix)
- Fix stack size issue for Dalvik VMs (Fix)
- Use Rhino as the js engine (New)
- Non-beta release of the Android SDK
- Correctly handle date time when the format is incorrect (Fix)
- Reduce memory overhead for db so that it performs well on low end systems (Fix)
- Only update event server time when posting events (Fix)