Skip to content

task: sync flutter ← Android corev8.4.1 + iOS 7.8.1 (2026-08-11) - #369

Open
clevertap-wrapper-sync[bot] wants to merge 1 commit into
feat/release_4.2.0from
task/release_2026-08-11
Open

task: sync flutter ← Android corev8.4.1 + iOS 7.8.1 (2026-08-11)#369
clevertap-wrapper-sync[bot] wants to merge 1 commit into
feat/release_4.2.0from
task/release_2026-08-11

Conversation

@clevertap-wrapper-sync

Copy link
Copy Markdown

Sync flutter ← Android corev8.4.1 + iOS 7.8.1 (2026-08-11)

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

⚠️ Flagged for review — NOT auto-applied

  • 🔁 Behavior: Spin-the-Wheel and Scratch Card in-app templates (native Android v8.4.1) — changelog announces two new gamified Advanced InApp Builder templates; api_diff shows no new public symbol, so these are campaign-driven and need no wrapper API — reviewer should confirm the Flutter in-app callbacks (onInAppButtonClick etc.) carry the new templates' payloads.
  • 🔁 Behavior: CLEVERTAP_INAPP_FRAGMENTLESS_BANNERS manifest flag (native Android v8.4.1) — opt-in flag read from the host app's AndroidManifest.xml, documented in CHANGELOG.md rather than declared in the plugin manifest — reviewer may want it covered in doc/Integrate-Android.md.
  • 🔁 Behavior: Split of Clicks — per-element in-app click attribution and swipe-to-dismiss (native Android v8.4.0) — richer Notification Clicked event data plus a new dismiss gesture; no added/changed public symbol, so runtime behavior only — reviewer should verify the extra click properties reach Dart through the existing in-app callback maps.
  • Unconfirmed: iOS bridge for dismissPipInApp (native Android v8.4.1) — Android sync could not verify an iOS selector (no iOS source cached at that point); resolved by the iOS sync, which source-verified -[CleverTap dismissPipInApp] and wired up ios/Classes/CleverTapPlugin.m.
  • 🔁 Behavior: Spin-the-Wheel and Scratch Card gamified templates (native iOS v7.8.1) — campaign-driven Advanced InApp Builder templates with no new public API; documented in CHANGELOG only.
  • 🔁 Behavior: Split of Clicks — per-element click attribution and configurable tap-outside / swipe-to-dismiss gestures (native iOS v7.8.0) — extra properties on the existing Notification Clicked event and new dismiss gestures, handled natively with no public API change.
  • 🔁 Behavior: Accessibility improvements (VoiceOver labels, larger dismiss tap area, image content descriptions) (native iOS v7.8.0) — runtime rendering changes inside native in-app and App Inbox views; no API surface for the wrapper.
  • 🔁 Behavior: In-app / variables / App Inbox bug fixes (native iOS v7.8.0, v7.8.1) — backgrounded in-apps, HTML in-app deeplink properties, AIB safe area, empty CS in-app payloads, variable-diff and concurrent variants crashes, App Inbox pull-to-refresh repaint — behavior-only, inherited via the pin bump.

Version pins bumped

  • Android: core 8.3.0 → 8.4.1 (android/build.gradle)
  • iOS: CleverTap-iOS-SDK 7.7.1 → 7.8.1 (ios/clevertap_plugin.podspec)

Release prep

  • Wrapper version: 4.1.0 → 4.2.0 (minor — adds dismissPipInApp(); additive only, no removed public API, no minSdk or deployment-target change)
  • libVersion: 40100 → 40200
  • Docs updated:
    • CHANGELOG.md — 4.2.0 entry covering both platforms; iOS merged into the existing entry rather than duplicating the version heading
    • README.md — version references bumped to 4.2.0
  • Example demos added: dismissPipInApp (example/lib/main.dart, tile retitled from "Dismiss PIP InApp (Android only)" to "Dismiss PIP InApp")

Android sync

Surfaced (1)

  • CleverTapPlugin.dismissPipInApp() — dismisses a visible Picture-in-Picture in-app notification; thin no-arg pass-through so host apps can clear a PIP in-app on screen transitions. Source-verified as public void dismissPipInApp() in CleverTapAPI.java:3164 at tag corev8.4.1.

Skipped (4)

  • ⏭️ App Inbox pull-to-refresh repaint fix — native bug fix inside the built-in inbox view with no public API surface; picked up via the pin bump.
  • ⏭️ App Inbox SQLite UPSERT fix (Android 6.0–10) — native persistence fix requiring no host-app or wrapper change; documented in CHANGELOG.md since it affects every App Inbox user on 4.0.0/4.1.0.
  • ⏭️ Media3PlayerListener AbstractMethodError crash fix — internal listener fix with no API surface; resolved by the pin bump.
  • ⏭️ In-App and App Inbox accessibility improvements (8.4.0) — native UI-layer work with no public API added.

Deferred for design review (0)

Build manifest propagated

  • None — the diff's only build-manifest deltas were the native repo's own version catalog. No minSdk, deployment-target, or permission changes.

iOS sync

Surfaced (1)

  • CleverTapPlugin.dismissPipInApp() — iOS 7.8.1 adds the public -[CleverTap dismissPipInApp] selector, so the iOS side of the shared Dart method (added Android-only by the Android sync) is now wired up and documented as cross-platform. Source-verified against CleverTapSDK/CleverTap+InAppNotifications.h:67 at tag 7.8.1.

Skipped (11)

  • ⏭️ _dismissPipInApp — internal CTInAppDisplayManager helper behind the public dismissPipInApp; not host-facing.
  • ⏭️ announceInAppShown — declared in private header CTInAppDisplayViewControllerPrivate.h; internal accessibility plumbing.
  • ⏭️ handleNotificationDidShow — private in-app view-controller header; internal display lifecycle hook.
  • ⏭️ notifyDelegateActionTriggered:withExtras: — private header, supports per-element click attribution internally.
  • ⏭️ triggerCloseActionWithCallToAction:elementId: — private header, backs the new dismiss-gesture click tracking.
  • ⏭️ recordInAppNotificationMediaError:forNotification: — declared in CleverTapInternal.h; SDK-internal telemetry.
  • ⏭️ updateMessages:completion: — internal CTInboxController method backing the App Inbox pull-to-refresh fix.
  • ⏭️ variantsCopy — internal CTVarCache accessor added for the variables concurrency fix.
  • ⏭️ CTSessionManager methods (createSessionIfNeeded, updateSessionStateOnLaunch, updateSessionTime:, initWithConfig:…) — internal session-manager refactor, never exposed through the Flutter bridge.
  • ⏭️ CTInActionResult / CTTimerResult factory methods (cancelledWithId:message:, completedWithId:scheduledAt:, discardedWithId:, errorWithId:…, readyToFetchWithId:data:) — internal in-app scheduler result types.
  • ⏭️ discardedWithId:message: — signature change is a de-duplication of a redundant declaration in internal CTDelayedInAppResult.h; no host-facing impact.

Deferred for design review (0)

Build manifest propagated

  • None — no deployment-target or build-setting changes.

CHANGELOG entries added

  • [Android and iOS Platform] — supports CleverTap Android SDK v8.4.1 and CleverTap iOS SDK v7.8.1
  • [Android and iOS Platform] — adds dismissPipInApp() to dismiss the currently visible Picture-in-Picture (PIP) In-App notification
  • [Android and iOS Platform] — adds Spin-the-Wheel and Scratch Card gamified templates to Advanced InApp Builder in-app notifications
  • [Android and iOS Platform] — adds per-element click attribution to the In-App Notification Clicked event, plus configurable swipe/tap-outside dismiss gestures
  • [Android and iOS Platform] — in-app and App Inbox accessibility improvements
  • [Android Platform] — adds opt-in CLEVERTAP_INAPP_FRAGMENTLESS_BANNERS manifest flag for HTML header/footer in-apps without a FragmentActivity
  • [Android Platform] — fixes App Inbox messages never being saved on Android 6.0–10 (SQLite UPSERT), present in wrapper 4.0.0/4.1.0
  • [Android Platform] — fixes an AbstractMethodError crash when a PIP In-App played video on Android 6.0
  • [Android and iOS Platform] — fixes App Inbox not repainting the message list after pull-to-refresh
  • [iOS Platform] — fixes CS InApps not persisted on empty array, AIB safe-area handling for full-screen cover in-apps, NSKeyedArchiver replaceObject: crash on variable diffs, concurrency crash on simultaneous variants updates, missing deeplink properties on HTML In-App Notification Clicked, and in-apps missed while backgrounded not showing on foreground

Native CHANGELOG entries (reviewer reference)

Android — corev8.4.1

Version 8.4.1 (August 7, 2026)

New Features

  • Spin-the-Wheel and Scratch Card Templates: Adds Spin-the-Wheel and Scratch Card gamified
    template support to Advanced InApp Builder in-app notifications.
  • Dismiss PIP In-App API: New dismissPipInApp() method on CleverTapAPI dismisses the
    currently visible Picture-in-Picture (PIP) In-App notification. Safe to call from any thread;
    a no-op when no PIP is visible, and other in-app types are never affected.
    • Note: Dismissing frees the in-app display slot, so the next queued in-app (if any) may
      show immediately. To keep a screen free of all in-apps, pair this with
      suspendInAppNotifications() on screen entry and resumeInAppNotifications() on exit.
  • HTML Header/Footer In-Apps Without FragmentActivity: Custom-HTML header and footer in-app
    notifications can now render when the host Activity is not a FragmentActivity — for example
    Unity or Unreal game engines. Opt-in via the CLEVERTAP_INAPP_FRAGMENTLESS_BANNERS manifest
    flag; default off, so existing integrations are unaffected.

Bug Fixes

  • App Inbox Pull-to-Refresh: Fixes an issue where the built-in App Inbox did not repaint the
    message list after a pull-to-refresh — newly fetched messages only appeared after closing and
    reopening the inbox.

Android — intermediate corev8.4.0

Version 8.4.0 (July 28, 2026)

New Features

  • Split of Clicks:
    Adds per-element click attribution to In-Apps Notification Clicked event across all in-app templates. Also adds configurable
    swipe-to-dismiss gesture for In-Apps, and tracks these dismissals as Notification Clicked events.

Improvements

  • Accessibility:
    Enhances accessibility across In-App notifications and App Inbox with dynamic text scaling, screen-reader announcements and
    content descriptions (close button, images, media controls), a larger 48dp dismiss-button tap area, and corrected carousel
    TalkBack navigation — helping apps meet accessibility standards.

Bug Fixes

  • App Inbox on Android 6.0 – 10: Fixes a critical issue where App Inbox messages were never saved on the device, leaving the inbox permanently empty on Android 6.0 through Android 10 (API 23 – 29). The SDK was using a SQLite statement (UPSERT) that needs SQLite 3.24.0 or newer, which Android only ships from Android 11 onwards, so every inbox write failed silently on older devices. Present in v8.2.0 and v8.3.0.
    • Note: This affects every account using App Inbox, not only those enabled for App Inbox Cross-Device Sync. Messages delivered the classic way and messages delivered through Cross-Device Sync are saved by the same code, so both were affected.
    • Note: No code change or migration is required on your side. After updating, messages reappear automatically on the next inbox fetch.
  • Crash while playing video on Android 6.0: Fixes an AbstractMethodError crash seen when a Picture-in-Picture (PIP) In-App notification played a video on Android 6.0 (API 23). Media3's Player.Listener interface relies on Java 8 default methods, which Android 6.0 does not support at runtime, so any callback the SDK had not explicitly overridden crashed the app. The SDK's shared Media3PlayerListener now implements all of them. Only affects apps whose minSdkVersion is below 24.
    • Note: This listener is shared by every Media3 video surface, so the fix also protects In-App video and App Inbox video playback on Android 6.0, not only PIP.

iOS — 7.8.1

Version 7.8.1 (August 7, 2026)

Added

  • Spin-the-Wheel and Scratch Card Templates: Adds Spin-the-Wheel and Scratch Card gamified template support to Advanced InApp Builder in-app notifications.
  • Dismiss PIP In-App API: New dismissPipInApp() method on CleverTapAPI dismisses the currently visible Picture-in-Picture (PIP) In-App notification.
    • Note: Dismissing frees the in-app display slot, so the next queued in-app (if any) may show immediately. To keep a screen free of all in-apps, pair this with
      suspendInAppNotifications() on screen entry and resumeInAppNotifications() on exit.

Fixed

  • App Inbox Pull-to-Refresh: Fixes an issue where the built-in App Inbox did not repaint the message list after a pull-to-refresh.

iOS — intermediate 7.8.0

Version 7.8.0 (July 28, 2026)

Added

  • Split of Clicks: Adds per-element click attribution to In-Apps Notification Clicked event across all in-app templates. Also adds configurable tap-outside and swipe-to-dismiss gestures for In-Apps, and tracks these dismissals as Notification Clicked events.
  • Accessibility Improvements: Enhances accessibility support across In-App notifications and App Inbox, including VoiceOver labels, a larger dismiss-button tap area, and better handling of image content descriptions, to help apps meet accessibility standards.

Fixed

  • Fixes a bug where CS InApps were not persisted when empty array was received.
  • Fixes a bug where the AIB in-app would not respect safe area for full-screen cover inapps.
  • Fixes a potential crash at NSKeyedArchiver replaceObject: that could occur while saving variable diffs.
  • Fixes a potential concurrency-related crash during simultaneous variants updates.
  • Fixes a bug where the Notification Clicked event was not including deeplink properties for HTML In-Apps.
  • Fixes a bug where InApps that were missed while the app was in the background were not shown when the app returned to the foreground.

Run metadata

  • Model: claude-opus-5 (with claude-haiku-4-5 for auxiliary calls)
  • Tokens used: 2,776,355 total (Android 1,617,419 / iOS 1,158,936 — input + cache creation + cache read + output)
  • Approx cost: $2.774 (Android $1.537 + iOS $1.237)
  • Self-heal attempts: not reported
  • Soft cap ($3) exceeded: no

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. Note both platforms surfaced the same method: the Android sync shipped dismissPipInApp as Android-only, and the iOS sync then corrected the Dart doc comment and example tile to cross-platform.
  2. Read Skipped — confirm we didn't miss anything obvious. iOS reports 10 added / 11 removed / 1 changed API-diff rows, all in private or internal headers, so the removals do not justify a major bump — worth a spot check.
  3. Read Deferred — none this run.
  4. Check Build manifest propagated — none on either platform. No minSdk or deployment-target bumps to call out as breaking.
  5. CI must be green before merge: lint + Android build + iOS Example app build.

Android: core 8.4.1
iOS: core 7.8.1

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

Co-Authored-By: Claude <noreply@anthropic.com>
@shubhambjadhavar

shubhambjadhavar commented Aug 11, 2026

Copy link
Copy Markdown

Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
Open Source Security 0 0 0 0 0 issues
Licenses 0 0 0 0 0 issues
Code Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@reshab-code
reshab-code self-requested a review August 12, 2026 11:00
@reshab-code
reshab-code changed the base branch from develop to feat/release_4.2.0 August 17, 2026 07:35
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.

1 participant