Skip to content

task: sync react-native ← Android corev8.3.0 + iOS 7.7.1 (rn-final-1)#4

Open
clevertap-wrapper-sync[bot] wants to merge 1 commit into
task/setup-sync-automationfrom
task/release_rn-final-1
Open

task: sync react-native ← Android corev8.3.0 + iOS 7.7.1 (rn-final-1)#4
clevertap-wrapper-sync[bot] wants to merge 1 commit into
task/setup-sync-automationfrom
task/release_rn-final-1

Conversation

@clevertap-wrapper-sync

Copy link
Copy Markdown

Sync react-native ← Android corev8.3.0 + iOS 7.7.1 (rn-final-1)

🤖 Auto-generated by clevertap-wrapper-sync via clevertap-wrapper-tooling.

⚠️ Flagged for review — NOT auto-applied

  • 🔁 Behavior: handleWillPresentNotification:withDefaultOptions:completionHandler: (native v7.7.1) — New method for manual SDK integration (non-autoIntegrate apps) to handle silent-in-foreground push via willPresent delegate; host apps using manual integration must add this call to their AppDelegate.m/AppDelegate.swift.
  • 🔁 Behavior: wzrk_sif silent-in-foreground push (native v7.7.1) — New push payload key wzrk_sif:true suppresses foreground notification heads-up; no RN SDK code change required, but manual-integration host apps must implement willPresent and call handleWillPresentNotification:.
  • 🔁 Behavior: Inbox Viewed/Clicked event deduplication (native v7.7.0) — Rapid duplicate events now suppressed automatically; custom inbox implementations must call recordInboxNotificationViewedEvent / pushInboxNotificationViewedEvent before markReadInboxMessage — reversed order silently drops the Viewed event.

Version pins bumped

  • Android: clevertap-android-sdk 8.1.0 → 8.3.0
  • iOS: CleverTap-iOS-SDK 7.6.0 → 7.7.1

Release prep

  • Wrapper version: 4.1.0 → 4.2.0 (minor — adds fetchInbox(callback?) and pushDisplayUnitElementClickedEventForID; no breaking changes, minSdk unchanged)
  • libVersion: 40100 → 40200
  • Docs updated:
    • docs/usage.md — entries added for: fetchInbox, pushDisplayUnitElementClickedEventForID
    • docs/install.md — Android pin bumped to 8.3.0
    • CHANGELOG.md — iOS changelog entry added
  • Example demos added: fetchInbox, pushDisplayUnitElementClickedEventForID (both added via Android sync; iOS sync added only the native bridge wiring in CleverTapReact.mm)

Android sync

Surfaced (2)

  • CleverTap.fetchInbox() — overload pair (fetchInbox() + fetchInbox(FetchInboxCallback)) surfaced as a single JS method with optional callback; callback delivers a boolean success flag.
  • CleverTap.pushDisplayUnitElementClickedEventForID(unitID, additionalProperties) — new public API for fine-grained click analytics on Display Unit elements; args are unitID (string) and additionalProperties (object).

Skipped (1)

  • ⏭️ getDisplayUnitForID (changelog-only) — already exists in JS wrapper as getDisplayUnitForId; changelog note is a behavior change only (now routes through cache), no new API surface needed.

Deferred for design review (1)

  • ⚠️ setDisplayUnitCache — takes a DisplayUnitCache Java interface; there is no meaningful way to implement a Java interface from JS. (next_step: invoke clevertap-react-native-backfill-missing-coverage skill)

Build manifest propagated

  • clevertap-android-sdk pin 8.1.0 → 8.3.0 (android/build.gradle, docs/install.md)
  • androidx.swiperefreshlayout:swiperefreshlayout:1.1.0 added to native SDK's version catalog — internal dependency of the pull-to-refresh feature; consumed transitively, no change needed in the RN SDK's build.gradle.

iOS sync

Surfaced (2)

  • CleverTap.fetchInbox() — new fetchInboxWithCallback: overload added in 7.7.0; JS layer already present from Android sync; RCT_EXPORT_METHOD wired in CleverTapReact.mm.
  • CleverTap.pushDisplayUnitElementClickedEventForID(unitID, additionalProperties) — new recordDisplayUnitElementClickedEventForID:additionalProperties: added in 7.7.1; JS layer already present from Android sync; RCT_EXPORT_METHOD wired in CleverTapReact.mm.

Skipped (19)

  • ⏭️ handleWillPresentNotification:withDefaultOptions:completionHandler: — app delegate lifecycle hook; must be called from native AppDelegate, not bridgeable as a JS method.
  • ⏭️ addV2MessageIds: — internal CTInboxController method, not on the public CleverTap instance interface.
  • ⏭️ buildInboxMessageStateEvent:forMessage:isV2Message:andQueryParameters:completionHandler: — internal CTEventBuilder static method, not public API.
  • ⏭️ deleteAbsentPersistentV2MessagesFromResponseIds: — internal CTInboxController method.
  • ⏭️ inboxV2DeleteMessagesRequestWithConfig:params:url: — internal CTRequestFactory networking method.
  • ⏭️ inboxV2FetchRequestWithConfig:params:url: — internal CTRequestFactory networking method.
  • ⏭️ inboxViewControllerDidRequestRefreshWithCallback: — private view controller protocol method (CleverTapInboxViewControllerPrivate.h).
  • ⏭️ inboxViewControllerGetMessages — private view controller protocol method.
  • ⏭️ inboxViewControllerIsInboxV2Enabled — private view controller protocol method.
  • ⏭️ isV2MessageId: — internal CTInboxController helper.
  • ⏭️ performExpiryPurge — internal CTInboxController maintenance method.
  • ⏭️ removeV2MessageId: — internal CTInboxController helper.
  • ⏭️ swizzleWillPresentOnClass: — internal CTSwizzleManager method, not a host-app API.
  • ⏭️ getAllDisplayUnits (CHANGED) — nullability annotation tightened (_Nonnullnullable); no JS API change needed.
  • ⏭️ getDisplayUnitForID: (CHANGED) — additional header declaration; effective signature unchanged.
  • ⏭️ initWithAccountId:guid: (CHANGED) — internal CTDisplayUnitController initializer; not public RN API.
  • ⏭️ updateDisplayUnits: (CHANGED) — internal CTDisplayUnitController method; parameter type refinement not user-facing.
  • ⏭️ buildInboxMessageStateEvent:forMessage:andQueryParameters:completionHandler: (REMOVED) — internal CTEventBuilder method replaced by isV2Message overload; never exposed in RN SDK.
  • ⏭️ displayUnitsDidUpdate (REMOVED) — internal CTDisplayUnitController method; never exposed in RN SDK.

Deferred for design review (1)

  • ⚠️ setDisplayUnitCache: — takes id<CleverTapDisplayUnitCache>, a native Objective-C protocol JS callers cannot implement; requires native SDK-to-SDK integration design. (next_step: invoke clevertap-react-native-backfill-missing-coverage skill)

Build manifest propagated

(none)

CHANGELOG entries added

  • [Android] Bump clevertap-android-sdk to 8.3.0 — adds fetchInbox(callback?) for on-demand inbox refresh and pushDisplayUnitElementClickedEventForID(unitID, additionalProperties) for element-level click analytics.
  • [iOS] Bump CleverTap-iOS-SDK to 7.7.1 — adds fetchInbox(callback?) and pushDisplayUnitElementClickedEventForID on iOS bridge; App Inbox Cross-Device Sync; silent-in-foreground push support.

Native CHANGELOG entries (reviewer reference)

Android — corev8.3.0

Version 8.3.0 (June 2026)

New Features

  • Native Display Element Click: New pushDisplayUnitElementClickedEventForID(String unitID, HashMap<String, Object> additionalProperties) on CleverTapAPI records a Notification Clicked event for a specific element within a Display Unit. Caller-supplied additionalProperties (including wzrk_element_id from the action's metadata) are merged first, then enriched with cached wzrk_* attribution fields from the unit — giving finer-grained click analytics for Native Display experiences.
  • Display Unit Cache API: New public interface DisplayUnitCache and setDisplayUnitCache(DisplayUnitCache) on CleverTapAPI let external SDKs (e.g. the Native Display SDK) inject a custom display-unit store. getAllDisplayUnits() and getDisplayUnitForID() now route through this cache. The default implementation (CTDisplayUnitController) remains active when no override is installed.

Android — intermediate corev8.2.0

Version 8.2.0 (May 20, 2026)

New Features

  • App Inbox Cross-Device Sync: App Inbox messages now sync across a user's devices. If a user deletes or reads a message on one device, it is automatically reflected on their other devices.
    • New Inbox Fetch APIs: The SDK already fetches inbox messages automatically on app launch and user login. Two new public methods have been added to CleverTapAPI to complement this with on-demand refresh support:
      • fetchInbox() — triggers an inbox refresh from the server (fire-and-forget).
      • fetchInbox(FetchInboxCallback) — same as above, but invokes the callback with a success/failure result when the fetch completes. The callback fires on the SDK's network thread, not the main thread.
      • Note: Both methods are throttled to once every 5 minutes between consecutive calls. This throttle is shared with the built-in pull-to-refresh gesture.
    • Pull-to-Refresh in Built-in Inbox: The built-in App Inbox (showAppInbox()) now includes a pull-to-refresh gesture. Manual inbox fetches — including those triggered by fetchInbox() — are throttled to once every 5 minutes between consecutive calls.
      • Note: Pull-to-refresh is automatically disabled for accounts that are not enabled for App Inbox Cross-Device Sync. The message list remains fully visible and scrollable; only the swipe gesture is disabled.
    • Inbox Viewed and Clicked Event Deduplication: Rapid duplicate Notification Viewed and Notification Clicked events for the same inbox message are now automatically suppressed to prevent analytics inflation. Additionally, a Notification Viewed event is not raised for messages that have already been read on another device.
      • Note: For custom inbox implementations, ensure pushInboxNotificationViewedEvent(messageId) is called when a message becomes visible to the user, before calling markReadInboxMessage(messageId) — calling them in reverse order will silently drop the Viewed event.
      • Note: The "already read" suppression applies only to accounts enabled for App Inbox Cross-Device Sync. For accounts not using this feature, Notification Viewed continues to be raised regardless of read state, preserving existing behaviour.

iOS — 7.7.1

Version 7.7.1 (June 04, 2026)

Added

  • Silent-in-foreground push notification: Push notifications can now be suppressed when your app is in the foreground via the wzrk_sif:true key-value pair in the push payload.
    • The notification will be delivered silently to the tray instead of appearing as a heads-up notification. This will only work if the method willPresent of UNUserNotificationCenterDelegate is implemented.
    • Adds a new method handleWillPresentNotification: which handles a UNNotification in the foreground to support silent-in-foreground behaviour when using manual SDK integration (i.e. without autoIntegrate). This should be called from your method willPresent of UNUserNotificationCenterDelegate and is not required when using autoIntegrate.
  • Adds a new method recordDisplayUnitElementClickedEventForID: which records a Notification Clicked event for a specific element within a Display Unit.
  • Adds a new public method setDisplayUnitCache: which lets external SDKs (e.g. the CleverTap Native Display SDK) inject a custom Display Unit store.

Fixed

  • Fixes a bug where server-side InApps evaluation IDs were being duplicated in UserDefaults.
  • Fixes a bug where apps were freezing when InApps were being shown in low network conditions.

iOS — intermediate 7.7.0

Version 7.7.0 (May 19, 2026)

New Features

  • App Inbox Cross-Device Sync: App Inbox messages now sync across a user's devices. If a user deletes or reads a message on one device, it is automatically reflected on their other devices.
    • New Inbox Fetch API: Two new public methods added for on-demand refresh support:
      • fetchInbox() — triggers an inbox refresh from the server (fire-and-forget).
      • fetchInbox(callback:) — same as above, but invokes the callback with a success/failure result when the fetch completes.
      • Note: Both methods are throttled to once every 5 minutes between consecutive calls.
    • Pull-to-Refresh in Built-in Inbox: The built-in App Inbox now includes a pull-to-refresh gesture; throttled to once every 5 minutes.
    • Inbox Viewed and Clicked Event Deduplication: Rapid duplicate events suppressed automatically.
      • Note: For custom inbox implementations, ensure recordInboxNotificationViewedEvent(messageId) is called before markReadInboxMessage(messageId) — reversed order silently drops the Viewed event.

Fixed

  • Fixes a crash in CTInAppEvaluationManager corrupting NSUserDefaults.

Run metadata

  • Model: claude-sonnet-4-6 (primary), claude-haiku-4-5-20251001 (tooling)
  • Tokens used: 66,700 (inner estimate; 7,098,734 gross incl. cache reads)
  • Approx cost: $3.42
  • Soft cap ($3) exceeded: yes

For the reviewer

This PR is auto-generated. Please:

  1. Read the Surfaced sections — confirm each surfaced API is genuinely host-facing and the wrapper API shape looks idiomatic.
  2. Read Skipped — confirm we didn't miss anything obvious.
  3. Read Deferred — these need follow-up tickets to be opened or addressed locally.
  4. Check Build manifest propagated — any minSdk / deployment-target bumps are visible to host apps. Make sure CHANGELOG calls them out as breaking if applicable.
  5. CI must be green before merge: lint + Android build + iOS Example app build.

Android: core 8.3.0
iOS: core 7.7.1

Auto-generated by clevertap-wrapper-sync via clevertap-wrapper-tooling.

Co-Authored-By: Claude <noreply@anthropic.com>
@clevertap-wrapper-sync

Copy link
Copy Markdown
Author

⚠️ Run cost: $3.42 — exceeded soft cap of $3

Total tokens: 41616.
No action required — soft cap is informational. Review this run if costs are consistently high.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants