June 2026
We are excited to share the June SDK changelog for our product!
NoteClick each SDK header to view the corresponding GitHub repository for release details.
June 09
What's new
Android
- Supports CleverTap Android SDK 8.3.0.
iOS
- Supports CleverTap iOS SDK 7.7.1.
- Silent-in-foreground push notifications via the
wzrk_sif:truepayload key, server-controlled, no app-side wiring needed when usingautoIntegrate.
Android and iOS
- App Inbox Cross-Device Sync: Syncs the inbox states (read, deleted) across a user's devices automatically. Includes a pull-to-refresh gesture in the built-in
showInbox()view, throttled to once every 5 minutes.
Web
- Supports CleverTap Web SDK 2.7.2.
- Adds new API
getVariants()- Returns variants for the current user for A/B testing.
API changes
Android and iOS
fetchInbox()- Triggers an on-demand App Inbox refresh (fire-and-forget), throttled to once every 5 minutes.fetchInboxWithCallback()- Triggers an on-demand App Inbox refresh and returns aFuture<bool?>indicating success or failure, throttled to once every 5 minutes.pushDisplayUnitElementClickedEvent(unitId, additionalProperties)- Records a Notification Clicked event for a specific element within a Display Unit, enriched with caller-suppliedadditionalProperties.
Bug Fixes
iOS
- Fixes a bug where server-side InApps evaluation IDs were duplicated in UserDefaults.
- Fixes a bug where apps were freezing when InApps were being shown in low network conditions.
June 08
What's New
- Adds Product Experiences (PE) Variables: Full support for PE Variables on Android and iOS, matching the CleverTap Unity SDK's variable type coverage.
- Supported variable types: Boolean, byte, short, int, long, float, double, string, file, dictionary.
Bug Fixes
iOS
enablePersonalizationis now called during SDK initialisation on iOS. This is required for PE Variables and the Personalization API to function, as without it, variable definitions and fetch calls are silently ignored.
June 05
What's New
Android
- Supports CleverTap Android SDK 8.3.0.
- App Inbox Cross-Device Sync: Syncs the inbox states (read, deleted) across a user's devices automatically. Includes a pull-to-refresh gesture in the built-in
showInbox()view, throttled to once every 5 minutes.
iOS
- Supports CleverTap iOS SDK 7.7.1.
- App Inbox Cross-Device Sync: Syncs the inbox states (read, deleted) across a user's devices automatically. Includes a pull-to-refresh gesture in the built-in App Inbox view, throttled to once every 5 minutes.
- Silent-in-foreground push notifications via the
wzrk_sif:truepayload key. server-controlled, no app-side wiring needed when usingautoIntegrate.
API changes
Android and iOS
- Adds a new API
fetchInbox()to trigger an on-demand inbox refresh. The callback is optional and receives(error, success)once the fetch completes. Throttled to once every 5 minutes between consecutive calls.fetchInbox(): fire-and-forgetfetchInbox((err, success) => { ... }): with completion callback
- Adds a new API
pushDisplayUnitElementClickedEventForID(unitID, additionalProperties)to record aNotificationClickedevent for a specific element within a Native Display Unit.additionalPropertiesis merged with cachedwzrk_*attribution fields for finer-grained click analytics.
Bug Fixes
iOS
- Fixes a bug where server-side InApps evaluation IDs were duplicated in UserDefaults.
- Fixes a bug where apps were freezing when InApps were being shown in low network conditions.
June 04
What's New
- Native Display Element Click
- New
pushDisplayUnitElementClickedEventForID(String unitID, HashMap<String, Object> additionalProperties)onCleverTapAPIrecords aNotification Clickedevent for a specific element within a Display Unit. - When called, the caller-supplied
additionalProperties(includingwzrk_element_idfrom the action'smetadata) are copied in first. Cachedwzrk_*attribution fields from the unit are then layered on top, overriding any same-named keys supplied by the caller.
- New
- Display Unit Cache API
- New public interface
DisplayUnitCacheandsetDisplayUnitCache(DisplayUnitCache)onCleverTapAPIlet external SDKs (such as the Native Display SDK) inject a custom display-unit store.getAllDisplayUnits()andgetDisplayUnitForID()now route through this cache. The default implementation (CTDisplayUnitController) remains active when no override is installed. - Implementations of
DisplayUnitCachewith four methods:
- New public interface
ArrayList<CleverTapDisplayUnit> getAllDisplayUnits();
CleverTapDisplayUnit getDisplayUnitForID(String unitID);
void updateDisplayUnits(List<CleverTapDisplayUnit> displayUnits);
void reset();updateDisplayUnits()is called by the SDK when fresh data arrives from the server.reset()is called on logout. External implementors must handle both correctly.wzrk_*keys inadditionalPropertiesare no longer filtered out. Cached unitwzrk_*fields are layered on top of caller-supplied properties, same-named keys from the server override those supplied by the caller.
Improvements
- Adds timer box background styling via
pt_chrono_bg_clrandpt_chrono_bg_clr_darkwith support for solid color, linear gradient, and radial gradient (pt_chrono_style,pt_chrono_grad_clr1,pt_chrono_grad_clr2,pt_chrono_grad_dir).
Note
pt_chrono_grad_dirspecifies the gradient angle in degrees (0–360, default90). It applies to linear gradients only — radial gradients always radiate from center and ignore this key.If
pt_chrono_bg_clr_darkis absent in dark mode, the SDK falls back topt_chrono_bg_clr. The dark key is optional.
- Adds timer box border customisation via
pt_chrono_border_clr,pt_chrono_border_clr_dark,pt_chrono_border_width, andpt_chrono_border_radius.
NoteThe SDK silently enforces maximum values:
pt_chrono_border_widthis capped at 10pt andpt_chrono_border_radiusis capped at 25pt. Values above these limits are accepted without error but are clamped to the maximum.
- Improves visual consistency in Rating and Zero Bezel templates.
- Improves padding in templates.
Bug Fixes
- Fixes timer state persistence: the countdown now correctly reflects elapsed time since notification delivery when the notification is expanded.
NoteFor this fix to work, the host app must set
notificationDeliveryDatefromUNNotificationContent.date. Without this, the timer cannot calculate elapsed time and will not reflect the correct state on expand.
What's New
-
Silent in-foreground push notifications: Push notifications can now be suppressed when your app is in the foreground via the
wzrk_sif:truekey-value pair in the push payload. This applies only to CleverTap push notifications.- On iOS 14 and above, the notification is delivered silently to the tray instead of appearing as a heads-up notification. On iOS 13 and below, the notification is fully suppressed.
- This requires the
willPresentmethod ofUNUserNotificationCenterDelegateto be implemented. - Adds
handleWillPresentNotification:withNotification:defaultPresentationOptions:to support silent-in-foreground behaviour in manual integrations (withoutautoIntegrate). Call this from yourwillPresentimplementation.defaultPresentationOptionscontrols the presentation options applied to non-SIF notifications. Not required when usingautoIntegrate.
-
Adds
recordDisplayUnitElementClickedEventForID:withAdditionalProperties:which records aNotification Clickedevent for a specific element within a Display Unit. -
Adds
setDisplayUnitCache:which lets external SDKs (such as the CleverTap Native Display SDK) inject a custom Display Unit store. Implementations must provide all four methods:getAllDisplayUnits,getDisplayUnitForID:,updateDisplayUnits:, andreset.updateDisplayUnits:is called by the SDK when fresh data arrives from the server;resetis called on logout.
Bug Fixes
- Fixes a bug where server-side InApp evaluation IDs were duplicated in UserDefaults. For installs already affected, the SDK automatically recovers once the stored list exceeds 1000 entries.
- Fixes a bug where apps were freezing when HTML InApps were shown in low network conditions. The InApp is now hidden on load error instead of leaving the app unresponsive.
