Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
## CHANGE LOG.

### April 17, 2026
* [CleverTap Android SDK v8.1.0](docs/CTCORECHANGELOG.md).

### April 13, 2026
Comment thread
deeksha-rgb marked this conversation as resolved.
* [CleverTap Push Templates SDK v2.4.0](docs/CTPUSHTEMPLATESCHANGELOG.md).

Expand Down
14 changes: 11 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ We publish the SDK to `mavenCentral` as an `AAR` file. Just declare it as depend

```groovy
dependencies {
implementation "com.clevertap.android:clevertap-android-sdk:8.0.0"
implementation "com.clevertap.android:clevertap-android-sdk:8.1.0"
}
```

Alternatively, you can download and add the AAR file included in this repo in your Module libs directory and tell gradle to install it like this:

```groovy
dependencies {
implementation (name: "clevertap-android-sdk-8.0.0", ext: 'aar')
implementation (name: "clevertap-android-sdk-8.1.0", ext: 'aar')
}
```

Expand All @@ -46,7 +46,7 @@ Add the Firebase Messaging library and Android Support Library v4 as dependencie

```groovy
dependencies {
implementation "com.clevertap.android:clevertap-android-sdk:8.0.0"
implementation "com.clevertap.android:clevertap-android-sdk:8.1.0"
implementation "androidx.core:core:1.13.0"
implementation "com.google.firebase:firebase-messaging:24.0.0"
implementation "com.google.android.gms:play-services-ads:23.6.0" // Required only if you enable Google ADID collection in the SDK (turned off by default).
Expand Down Expand Up @@ -92,6 +92,14 @@ Interstitial InApp Notification templates support Audio and Video with the help
implementation "com.google.android.exoplayer:exoplayer-ui:2.19.1"
```

PIP (Picture-in-Picture) In-App Notifications with video media require `AndroidX Media3`. Add the following dependencies in your `build.gradle` file:
```groovy
implementation "androidx.media3:media3-exoplayer:1.4.0"
implementation "androidx.media3:media3-exoplayer-hls:1.4.0"
implementation "androidx.media3:media3-ui:1.4.0"
```
**Note:** PIP image and GIF media types work without Media3. The dependency is only required for PIP video playback.

Once you've updated your module `build.gradle` file, make sure you have specified `mavenCentral()` and `google()` as a repositories in your project `build.gradle` and then sync your project in File -> Sync Project with Gradle Files.

## 🎉 Integration
Expand Down
18 changes: 18 additions & 0 deletions docs/CTCORECHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,22 @@
## CleverTap Android SDK CHANGE LOG
### Version 8.1.0 (April 17, 2026)

#### New Features
* **Picture-in-Picture (PIP) In-App Notifications:** Adds support for Picture-in-Picture in-app notifications — compact, draggable floating windows that overlay app content. Supports image, GIF, and video media with expand/collapse, drag-to-reposition (9-point snap grid), and configurable controls. Video playback requires AndroidX Media3 dependencies.
* **InApp Media Support:** Adds GIF and Video support for all InApp notification templates, enabling richer in-app experiences.

#### Breaking Changes
* **Minimum SDK Version Updated:** Bumps the minimum supported Android API level from 21 (Android 5.0) to 23 (Android 6.0). Apps targeting API levels below 23 will no longer be able to integrate this SDK version.

#### Improvements
* **App Inbox Default Media View:** Adds a fallback media view for App Inbox when the backend does not provide a media orientation, rendering images, GIFs, video posters, and audio thumbnails at their natural aspect ratio.
* **Network Monitoring:** Replaces deprecated network APIs with a modern `NetworkMonitor` for more accurate connectivity detection, including captive portal support.
* **ExoPlayer Deprecated:** Deprecates ExoPlayer (`com.google.android.exoplayer2`) support. Developers using ExoPlayer for video playback should migrate to Media3 (`androidx.media3`) before v9.0.0, when ExoPlayer support will be removed. IDE tooling provides automatic migration suggestions.
* **Unmute API:** Adds method to unmute network traffic from app with `CleverTapAPI#unmute()`, allowing the SDK to resume normal event tracking and network operations without waiting for the backend-set mute period to expire.

#### Bug Fixes
* Fixes an `IndexOutOfBoundsException` in file cleanup by using a thread-safe collection.

### Version 8.0.0 (February 20, 2026)
#### New Features
* **Android 16 Support:** Adds support for Android 16, making the SDK compliant with Android 16 requirements. Details [here](https://developer.android.com/about/versions/16/summary)
Expand Down
2 changes: 1 addition & 1 deletion docs/CTGEOFENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Add the following dependencies to the `build.gradle`

```Groovy
implementation "com.clevertap.android:clevertap-geofence-sdk:1.4.0"
implementation "com.clevertap.android:clevertap-android-sdk:8.0.0" // 3.9.0 and above
implementation "com.clevertap.android:clevertap-android-sdk:8.1.0" // 3.9.0 and above
implementation "com.google.android.gms:play-services-location:21.3.0"
implementation "androidx.work:work-runtime:2.10.2" // required for FETCH_LAST_LOCATION_PERIODIC
implementation "androidx.concurrent:concurrent-futures:1.2.0" // required for FETCH_LAST_LOCATION_PERIODIC
Expand Down
12 changes: 10 additions & 2 deletions docs/CTPUSHTEMPLATES.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ CleverTap Push Templates SDK helps you engage with your users using fancy push n

```groovy
implementation "com.clevertap.android:push-templates:2.4.0"
implementation "com.clevertap.android:clevertap-android-sdk:8.0.0" // 4.4.0 and above
implementation "com.clevertap.android:clevertap-android-sdk:8.1.0" // 4.4.0 and above
```

2. Add the following line to your Application class before the `onCreate()`
Expand Down Expand Up @@ -465,7 +465,15 @@ pt_gif_alt | Optional | GIF to show when timer expires
pt_gif_frames_alt | Optional | Number of frames to extract from the alternate GIF
pt_big_img_alt_alt_text | Optional | Alt Text for Image to show when timer expires
pt_bg | Optional | Background Color in HEX
pt_chrono_title_clr | Optional | Color for timer text in HEX
pt_chrono_title_clr | Optional | Color for timer text in HEX. Falls back to `pt_title_clr` if absent.
pt_chrono_style | Optional | Chronometer box styling mode. One of `"solid"`, `"gradient_linear"`, or `"gradient_radial"`. If absent, no background is drawn on the chronometer box.
pt_chrono_bg_clr | Optional | Chronometer box background fill color in HEX. Required when `pt_chrono_style` is `"solid"`; if missing, no background is drawn.
pt_chrono_grad_clr1 | Optional | Gradient start color in HEX. Required (along with `pt_chrono_grad_clr2`) when `pt_chrono_style` is `"gradient_linear"` or `"gradient_radial"`.
pt_chrono_grad_clr2 | Optional | Gradient end color in HEX. Required (along with `pt_chrono_grad_clr1`) for gradient styles.
pt_chrono_grad_dir | Optional | Gradient angle in degrees (String). Applies to linear gradients only. Defaults to `"90"` (top → bottom).
pt_chrono_border_clr | Optional | Chronometer box border color in HEX. Works with all styles. No border is drawn if absent.
pt_chrono_border_width | Optional | Chronometer box border width in dp. No border is drawn if absent, even when `pt_chrono_border_clr` is set.
pt_chrono_border_radius | Optional | Chronometer box corner radius in dp. Defaults to `"6"`.
pt_timer_threshold | Required | Timer duration in seconds (minimum 10). Will be given higher priority.
pt_timer_end | Optional | Epoch Timestamp to countdown to (for example, $D_1595871380 or 1595871380). Not needed if pt_timer_threshold is specified.
pt_render_terminal | Optional | Should terminal notification be rendered? ("true"/"false")
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ lifecycleRuntimeTesting = "2.9.4"
installreferrer = "2.2"

#SDK Versions
clevertap_android_sdk = "8.0.0"
clevertap_android_sdk = "8.1.0"
clevertap_rendermax_sdk = "1.0.3"
clevertap_geofence_sdk = "1.4.0"
clevertap_hms_sdk = "1.5.1"
Expand Down
12 changes: 6 additions & 6 deletions sample/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ android {
applicationId "com.clevertap.demo"
minSdkVersion 23
targetSdkVersion 36
versionCode 8000000
versionName "8.0.0"
versionCode 8010000
versionName "8.1.0"
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

Expand Down Expand Up @@ -179,14 +179,14 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
implementation "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.1.1"*/

remoteImplementation("com.clevertap.android:clevertap-android-sdk:8.0.0")
remoteImplementation("com.clevertap.android:clevertap-android-sdk:8.1.0")
remoteImplementation("com.clevertap.android:clevertap-geofence-sdk:1.4.0")
remoteImplementation("com.clevertap.android:push-templates:2.3.0")
remoteImplementation("com.clevertap.android:push-templates:2.4.0")
remoteImplementation("com.clevertap.android:clevertap-hms-sdk:1.5.1")

stagingImplementation("com.clevertap.android:clevertap-android-sdk:8.0.0")
stagingImplementation("com.clevertap.android:clevertap-android-sdk:8.1.0")
stagingImplementation("com.clevertap.android:clevertap-geofence-sdk:1.4.0")
stagingImplementation("com.clevertap.android:push-templates:2.3.0")
stagingImplementation("com.clevertap.android:push-templates:2.4.0")
stagingImplementation("com.clevertap.android:clevertap-hms-sdk:1.5.1")
}

Expand Down
18 changes: 18 additions & 0 deletions templates/CTCORECHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,22 @@
## CleverTap Android SDK CHANGE LOG
### Version 8.1.0 (April 17, 2026)

#### New Features
* **Picture-in-Picture (PIP) In-App Notifications:** Adds support for Picture-in-Picture in-app notifications — compact, draggable floating windows that overlay app content. Supports image, GIF, and video media with expand/collapse, drag-to-reposition (9-point snap grid), and configurable controls. Video playback requires AndroidX Media3 dependencies.
* **InApp Media Support:** Adds GIF and Video support for all InApp notification templates, enabling richer in-app experiences.

#### Breaking Changes
* **Minimum SDK Version Updated:** Bumps the minimum supported Android API level from 21 (Android 5.0) to 23 (Android 6.0). Apps targeting API levels below 23 will no longer be able to integrate this SDK version.

#### Improvements
* **App Inbox Default Media View:** Adds a fallback media view for App Inbox when the backend does not provide a media orientation, rendering images, GIFs, video posters, and audio thumbnails at their natural aspect ratio.
* **Network Monitoring:** Replaces deprecated network APIs with a modern `NetworkMonitor` for more accurate connectivity detection, including captive portal support.
* **ExoPlayer Deprecated:** Deprecates ExoPlayer (`com.google.android.exoplayer2`) support. Developers using ExoPlayer for video playback should migrate to Media3 (`androidx.media3`) before v9.0.0, when ExoPlayer support will be removed. IDE tooling provides automatic migration suggestions.
* **Unmute API:** Adds method to unmute network traffic from app with `CleverTapAPI#unmute()`, allowing the SDK to resume normal event tracking and network operations without waiting for the backend-set mute period to expire.

#### Bug Fixes
* Fixes an `IndexOutOfBoundsException` in file cleanup by using a thread-safe collection.

### Version 8.0.0 (February 20, 2026)
#### New Features
* **Android 16 Support:** Adds support for Android 16, making the SDK compliant with Android 16 requirements. Details [here](https://developer.android.com/about/versions/16/summary)
Expand Down
10 changes: 9 additions & 1 deletion templates/CTPUSHTEMPLATES.md
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,15 @@ pt_gif_alt | Optional | GIF to show when timer expires
pt_gif_frames_alt | Optional | Number of frames to extract from the alternate GIF
pt_big_img_alt_alt_text | Optional | Alt Text for Image to show when timer expires
pt_bg | Optional | Background Color in HEX
pt_chrono_title_clr | Optional | Color for timer text in HEX
pt_chrono_title_clr | Optional | Color for timer text in HEX. Falls back to `pt_title_clr` if absent.
pt_chrono_style | Optional | Chronometer box styling mode. One of `"solid"`, `"gradient_linear"`, or `"gradient_radial"`. If absent, no background is drawn on the chronometer box.
pt_chrono_bg_clr | Optional | Chronometer box background fill color in HEX. Required when `pt_chrono_style` is `"solid"`; if missing, no background is drawn.
pt_chrono_grad_clr1 | Optional | Gradient start color in HEX. Required (along with `pt_chrono_grad_clr2`) when `pt_chrono_style` is `"gradient_linear"` or `"gradient_radial"`.
pt_chrono_grad_clr2 | Optional | Gradient end color in HEX. Required (along with `pt_chrono_grad_clr1`) for gradient styles.
pt_chrono_grad_dir | Optional | Gradient angle in degrees (String). Applies to linear gradients only. Defaults to `"90"` (top → bottom).
pt_chrono_border_clr | Optional | Chronometer box border color in HEX. Works with all styles. No border is drawn if absent.
pt_chrono_border_width | Optional | Chronometer box border width in dp. No border is drawn if absent, even when `pt_chrono_border_clr` is set.
pt_chrono_border_radius | Optional | Chronometer box corner radius in dp. Defaults to `"6"`.
pt_timer_threshold | Required | Timer duration in seconds (minimum 10). Will be given higher priority.
pt_timer_end | Optional | Epoch Timestamp to countdown to (for example, \$D_1595871380 or 1595871380). Not needed if pt_timer_threshold is specified.
pt_render_terminal | Optional | Should terminal notification be rendered? ("true"/"false")
Expand Down
8 changes: 8 additions & 0 deletions templates/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,14 @@ Interstitial InApp Notification templates support Audio and Video with the help
implementation "${ext.exoplayer_ui}"
```

PIP (Picture-in-Picture) In-App Notifications with video media require `AndroidX Media3`. Add the following dependencies in your `build.gradle` file:
```groovy
implementation "androidx.media3:media3-exoplayer:1.4.0"
implementation "androidx.media3:media3-exoplayer-hls:1.4.0"
implementation "androidx.media3:media3-ui:1.4.0"
```
**Note:** PIP image and GIF media types work without Media3. The dependency is only required for PIP video playback.

Once you've updated your module `build.gradle` file, make sure you have specified `mavenCentral()` and `google()` as a repositories in your project `build.gradle` and then sync your project in File -> Sync Project with Gradle Files.

## 🎉 Integration
Expand Down