# Push Templates by CleverTap
CleverTap Push Templates SDK helps you engage with your users using fancy push notification templates built specifically to work with [CleverTap](https://www.clevertap.com).
# Table of contents
- [Installation](#installation)
- [Dashboard Usage](#dashboard-usage)
- [Template Types](#template-types)
- [Template Keys](#template-keys)
- [Developer Notes](#developer-notes)
- [Sample App](#sample-app)
# Installation
[(Back to top)](#table-of-contents)
### Out of the box
1. Add the dependencies to the `build.gradle`
```groovy
implementation "com.clevertap.android:push-templates:2.2.0"
implementation "com.clevertap.android:clevertap-android-sdk:7.7.1" // 4.4.0 and above
```
2. Add the following line to your Application class before the `onCreate()`
#### Kotlin
```kotlin
CleverTapAPI.setNotificationHandler(PushTemplateNotificationHandler() as NotificationHandler);
```
#### Java
```java
CleverTapAPI.setNotificationHandler((NotificationHandler)new PushTemplateNotificationHandler());
```
### Custom Handling Push Notifications
Add the following code in your custom FirebaseMessageService class
```java
public class PushTemplateMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
CTFcmMessageHandler()
.createNotification(getApplicationContext(), remoteMessage);
}
@Override
public void onNewToken(@NonNull final String s) {
//no-op
}
}
```
# Dashboard Usage
[(Back to top)](#table-of-contents)
While creating a Push Notification campaign on CleverTap, just follow the steps below -
1. On the "WHAT" section pass the desired values in the "title" and "message" fields (NOTE: We prioritise title and message provided in the key-value pair - as shown in step 2, over these fields)

2. Click on "Advanced" and then click on "Add pair" to add the [Template Keys](#template-keys)

3. You can also add the above keys into one JSON object and use the `pt_json` key to fill in the values

4. Send a test push and schedule!
# Template Types
[(Back to top)](#table-of-contents)
## Basic Template
Basic Template is the basic push notification received on apps.
(Expanded and unexpanded example)

## Auto Carousel Template
Auto carousel is an automatic revolving carousel push notification.
(Expanded and unexpanded example)
## Manual Carousel Template
This is the manual version of the carousel. The user can navigate to the next image by clicking on the arrows.
(Expanded and unexpanded example)
If only one image can be downloaded, this template falls back to the Basic Template
### Filmstrip Variant
The manual carousel has an extra variant called `filmstrip`. This can be used by adding the following key-value -
Template Key | Required | Value
---:|:---:|:---
pt_manual_carousel_type | Optional | `filmstrip`
(Expanded and unexpanded example)
## Rating Template
Rating template lets your users give you feedback, this feedback is captured in the event "Rating Submitted" with in the property `wzrk_c2a`.
(Expanded and unexpanded example)

## Product Catalog Template
Product catalog template lets you show case different images of a product (or a product catalog) before the user can decide to click on the "BUY NOW" option which can take them directly to the product via deep links. This template has two variants.
### Vertical View
(Expanded and unexpanded example)

### Linear View
Use the following keys to enable linear view variant of this template.
Template Key | Required | Value
---:|:---:|:---
pt_product_display_linear | Optional | `true`

## Five Icons Template
Five icons template is a push notification with no text, just 5 icons which can help your users go directly to the functionality of their choice with a button's click.
If at least 3 icons are not retrieved, the library doesn't render any notification. The bifurcation of each CTA is captured in the event Notification Clicked with in the property `wzrk_c2a`.
If user clicks on any notification area except the five icons, then by default it will launch an activity intent.
## Timer Template
This template features a live countdown timer. You can even choose to show different title, message, and background image after the timer expires.
Timer notification is only supported for Android O (8) and above. For OS versions below O, the library falls back to the Basic Template.

## Zero Bezel Template
The Zero Bezel template ensures that the background image covers the entire available surface area of the push notification. All the text is overlayed on the image.
The library will fallback to the Basic Template if the image can't be downloaded.

## Input Box Template
The Input Box Template lets you collect any kind of input including feedback from your users. It has four variants.
### With CTAs
The CTA variant of the Input Box Template use action buttons on the notification to collect input from the user.
To set the CTAs use the Advanced Options when setting up the campaign on the dashboard.

Template Key | Required | Value
---:|:---:|:---
pt_dismiss_on_click | Optional | Dismisses the notification without opening the app
*Note If `pt_dismiss_on_click` is false we'll have to add the below code to not dismiss the
notification for Android 12 and above
fun dismissNotification(intent: Intent?, applicationContext: Context){
intent?.extras?.apply {
var autoCancel = true
var notificationId = -1
getString("actionId")?.let {
Log.d("ACTION_ID", it)
autoCancel = getBoolean("autoCancel", true)
notificationId = getInt("notificationId", -1)
}
/**
* If using InputBox template, add ptDismissOnClick flag to not dismiss notification
* if pt_dismiss_on_click is false in InputBox template payload. Alternatively if normal
* notification is raised then we dismiss notification.
*/
val ptDismissOnClick = intent.extras!!.getString(PTConstants.PT_DISMISS_ON_CLICK,"")
if (autoCancel && notificationId > -1 && ptDismissOnClick.isNullOrEmpty()) {
val notifyMgr: NotificationManager =
applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notifyMgr.cancel(notificationId)
}
}
}
### CTAs with Remind Later option
This variant of the Input Box Template is particularly useful if the user wants to be reminded of the notification after sometime. Clicking on the remind later button raises an event to the user profiles, with a custom user property p2 whose value is a future time stamp. You can have a campaign running on the dashboard that will send a reminder notification at the timestamp in the event property.
To set one of the CTAs as a Remind Later button set the action id to `remind` from the dashboard.
Template Key | Required | Value
---:|:---:|:---
pt_event_name | Required | for e.g. `Remind Later`,
pt_event_property_ | Optional | for e.g. ``,
pt_event_property_ | Required | future epoch timestamp. For e.g., `$D_1592503813`
pt_dismiss_on_click | Required | Value should be `true`. It dismisses the notification without opening the app and raises a required event to the user profile, needed to send a reminder notification.

### Reply as an Event
This variant raises an event capturing the user's input as an event property. The app is not opened after the user sends the reply.
To use this variant, use the following values for the keys.
Template Key | Required | Value
---:|:---:|:---
pt_input_label | Required | for e.g., `Search`
pt_input_feedback | Required | for e.g., `Thanks for your feedback`
pt_event_name | Required | for e.g. `Searched`,
pt_event_property_ | Optional | for e.g. ``,
pt_event_property_ | Required to capture input | fixed value - `pt_input_reply`

### Reply as an Intent
This variant passes the reply to the app as an Intent. The app can then process the reply and take appropriate actions.
To use this variant, use the following values for the keys.
Template Key | Required | Value
---:|:---:|:---
pt_input_label | Required | for e.g., `Search`
pt_input_feedback | Required | for e.g., `Thanks for your feedback`
pt_input_auto_open | Required | fixed value - `true`
To capture the input, the app can get the `pt_input_reply` key from the Intent extras.

# Template Keys
[(Back to top)](#table-of-contents)
### Basic Template
Basic Template Keys | Required | Description
---:|:---:|:---|
pt_id | Required | Value - `pt_basic`
pt_title | Required | Title
pt_msg | Required | Message
pt_msg_summary | Required | Message line when Notification is expanded
pt_subtitle | Optional | Subtitle
pt_bg | Optional | Background Color in HEX
pt_big_img | Optional | Image
pt_big_img_alt_text | Optional | Alt Text for Image
pt_gif | Optional | GIF
pt_gif_frames | Optional | Number of frames to extract from the GIF
pt_scale_type | Optional | ScaleType for the big image in the ImageView ("center_crop"/"fit_center")
pt_ico | Optional | Large Icon
pt_dl1 | Optional | One Deep Link (minimum)
pt_title_clr | Optional | Title Color in HEX
pt_msg_clr | Optional | Message Color in HEX
pt_small_icon_clr | Optional | Small Icon Color in HEX
pt_sticky | Optional | Should the notification be sticky? ("true"/"false")
pt_dismiss | Optional | Auto dismiss the notification after a set time (value in seconds)
pt_json | Optional | Above keys in JSON format
### Auto Carousel Template
Auto Carousel Template Keys | Required | Description
---:|:---:|:---
pt_id | Required | Value - `pt_carousel`
pt_title | Required | Title
pt_msg | Required | Message
pt_msg_summary | Optional | Message line when Notification is expanded
pt_subtitle | Optional | Subtitle
pt_dl1 | Required | Deep Link (Max one)
pt_img1 | Required | Image One
pt_img1_alt_text | Optional | Alt Text for Image One
pt_img2 | Required | Image Two
pt_img2_alt_text | Optional | Alt Text for Image Two
pt_img3 | Required | Image Three
pt_img3_alt_text | Optional | Alt Text for Image Three
pt_img`n` | Optional | Image `N`
pt_img`n`_alt_text | Optional | Alt Text for Image `N`
pt_scale_type | Optional | ScaleType for the big image in the ImageView ("center_crop"/"fit_center")
pt_bg | Optional | Background Color in HEX
pt_ico | Optional | Large Icon
pt_title_clr | Optional | Title Color in HEX
pt_msg_clr | Optional | Message Color in HEX
pt_small_icon_clr | Optional | Small Icon Color in HEX
pt_sticky | Optional | Should the notification be sticky? ("true"/"false")
pt_dismiss | Optional | Auto dismiss the notification after a set time (value in seconds)
pt_json | Optional | Above keys in JSON format
### Manual Carousel Template
Manual Carousel Template Keys | Required | Description
---:|:---:|:---
pt_id | Required | Value - `pt_manual_carousel`
pt_title | Required | Title
pt_msg | Required | Message
pt_msg_summary | Optional | Message line when Notification is expanded
pt_subtitle | Optional | Subtitle
pt_dl1 | Required | Deep Link One
pt_dl2 | Optional | Deep Link Two
pt_dl`n` | Optional | Deep Link for the nth image
pt_img1 | Required | Image One
pt_img1_alt_text | Optional | Alt Text for Image One
pt_img2 | Required | Image Two
pt_img2_alt_text | Optional | Alt Text for Image Two
pt_img3 | Required | Image Three
pt_img3_alt_text | Optional | Alt Text for Image Three
pt_img`n` | Optional | Image `N`
pt_img`n`_alt_text | Optional | Alt Text for Image `N`
pt_scale_type | Optional | ScaleType for the big image in the ImageView ("center_crop"/"fit_center")
pt_bg | Optional | Background Color in HEX
pt_ico | Optional | Large Icon
pt_title_clr | Optional | Title Color in HEX
pt_msg_clr | Optional | Message Color in HEX
pt_small_icon_clr | Optional | Small Icon Color in HEX
pt_sticky | Optional | Should the notification be sticky? ("true"/"false")
pt_dismiss | Optional | Auto dismiss the notification after a set time (value in seconds)
pt_json | Optional | Above keys in JSON format
pt_manual_carousel_type | Optional | `filmstrip`
### Rating Template
Rating Template Keys | Required | Description
---:|:---:|:---
pt_id | Required | Value - `pt_rating`
pt_title | Required | Title
pt_msg | Required | Message
pt_big_img | Optional | Image
pt_gif | Optional | GIF
pt_gif_frames | Optional | Number of frames to extract from the GIF
pt_big_img_alt_text | Optional | Alt Text for Image
pt_scale_type | Optional | ScaleType for the big image in the ImageView ("center_crop"/"fit_center")
pt_msg_summary | Optional | Message line when Notification is expanded
pt_subtitle | Optional | Subtitle
pt_default_dl | Required | Default Deep Link for Push Notification
pt_dl1 | Required | Deep Link for first/all star(s)
pt_dl2 | Optional | Deep Link for second star
pt_dl3 | Optional | Deep Link for third star
pt_dl4 | Optional | Deep Link for fourth star
pt_dl5 | Optional | Deep Link for fifth star
pt_bg | Optional | Background Color in HEX
pt_ico | Optional | Large Icon
pt_title_clr | Optional | Title Color in HEX
pt_msg_clr | Optional | Message Color in HEX
pt_small_icon_clr | Optional | Small Icon Color in HEX
pt_sticky | Optional | Should the notification be sticky? ("true"/"false")
pt_dismiss | Optional | Auto dismiss the notification after a set time (value in seconds)
pt_json | Optional | Above keys in JSON format
### Product Catalog Template
Product Catalog Template Keys | Required | Description
---:|:---:|:---
pt_id | Required | Value - `pt_product_display`
pt_title | Required | Title
pt_msg | Required | Message
pt_subtitle | Optional | Subtitle
pt_img1 | Required | Image One
pt_img1_alt_text | Optional | Alt Text for Image One
pt_img2 | Required | Image Two
pt_img2_alt_text | Optional | Alt Text for Image Two
pt_img3 | Required | Image Three
pt_img3_alt_text | Optional | Alt Text for Image Three
pt_scale_type | Optional | ScaleType for the big image in the ImageView ("center_crop"/"fit_center")
pt_bt1 | Required | Big text for first image
pt_bt2 | Required | Big text for second image
pt_bt3 | Required | Big text for third image
pt_st1 | Required | Small text for first image
pt_st2 | Required | Small text for second image
pt_st3 | Required | Small text for third image
pt_dl1 | Required | Deep Link for first image
pt_dl2 | Required | Deep Link for second image
pt_dl3 | Required | Deep Link for third image
pt_price1 | Required | Price for first image
pt_price2 | Required | Price for second image
pt_price3 | Required | Price for third image
pt_bg | Optional | Background Color in HEX
pt_product_display_action | Required | Action Button Label Text
pt_product_display_linear | Optional | Linear Layout Template ("true"/"false")
pt_product_display_action_clr | Required | Action Button Background Color in HEX
pt_title_clr | Optional | Title Color in HEX
pt_msg_clr | Optional | Message Color in HEX
pt_small_icon_clr | Optional | Small Icon Color in HEX
pt_sticky | Optional | Should the notification be sticky? ("true"/"false")
pt_dismiss | Optional | Auto dismiss the notification after a set time (value in seconds)
pt_json | Optional | Above keys in JSON format
### Five Icons Template
Five Icons Template Keys | Required | Description
---:|:---:|:---
pt_id | Required | Value - `pt_five_icons`
pt_img1 | Required | Icon One
pt_img1_alt_text | Optional | Alt Text for Icon One
pt_img2 | Required | Icon Two
pt_img2_alt_text | Optional | Alt Text for Icon Two
pt_img3 | Required | Icon Three
pt_img3_alt_text | Optional | Alt Text for Icon Three
pt_img4 | Optional | Icon Four
pt_img4_alt_text | Optional | Alt Text for Icon Four
pt_img5 | Optional | Icon Five
pt_img5_alt_text | Optional | Alt Text for Icon Five
pt_dl1 | Required | Deep Link for first icon
pt_dl2 | Required | Deep Link for second icon
pt_dl3 | Required | Deep Link for third icon
pt_dl4 | Optional | Deep Link for fourth icon
pt_dl5 | Optional | Deep Link for fifth icon
pt_bg | Optional | Background Color in HEX
pt_small_icon_clr | Optional | Small Icon Color in HEX
pt_sticky | Optional | Should the notification be sticky? ("true"/"false")
pt_dismiss | Optional | Auto dismiss the notification after a set time (value in seconds)
pt_json | Optional | Above keys in JSON format
### Timer Template
Timer Template Keys | Required | Description
---:|:---:|:---
pt_id | Required | Value - `pt_timer`
pt_title | Required | Title
pt_title_alt | Optional | Title to show after timer expires
pt_msg | Required | Message
pt_msg_alt | Optional | Message to show after timer expires
pt_msg_summary | Optional | Message line when Notification is expanded
pt_msg_summary_alt | Optional | Message summary to show after timer expires
pt_subtitle | Optional | Subtitle
pt_dl1 | Required | Deep Link
pt_big_img | Optional | Image
pt_gif | Optional | GIF
pt_gif_frames | Optional | Number of frames to extract from the GIF
pt_big_img_alt_text | Optional | Alt Text for Image
pt_scale_type | Optional | ScaleType for the big image in the ImageView ("center_crop"/"fit_center")
pt_big_img_alt | Optional | Image to show when timer expires
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_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")
pt_title_clr | Optional | Title Color in HEX
pt_msg_clr | Optional | Message Color in HEX
pt_small_icon_clr | Optional | Small Icon Color in HEX
pt_sticky | Optional | Should the notification be sticky? ("true"/"false")
pt_dismiss | Optional | Auto dismiss the notification after a set time (value in seconds)
pt_json | Optional | Above keys in JSON format
### Zero Bezel Template
Zero Bezel Template Keys | Required | Description
---:|:---:|:---
pt_id | Required | Value - `pt_zero_bezel`
pt_title | Required | Title
pt_msg | Required | Message
pt_msg_summary | Optional | Message line when Notification is expanded
pt_subtitle | Optional | Subtitle
pt_big_img | Required | Image
pt_gif | Optional | GIF
pt_gif_frames | Optional | Number of frames to extract from the GIF
pt_big_img_alt_text | Optional | Alt Text for Image
pt_scale_type | Optional | ScaleType for the big image in the ImageView ("center_crop"/"fit_center")
pt_big_img_collapsed | Optional | Image for the collapsed view
pt_gif_collapsed | Optional | GIF for the collapsed view
pt_gif_frames_collapsed | Optional | Number of frames to extract from the GIF for the collapsed view
pt_big_img_collapsed_alt_text | Optional | Alt Text for Image in the collapsed view
pt_scale_type_collapsed | Optional | ScaleType for the image in the collapsed View ("center_crop"/"fit_center")
pt_small_view | Optional | Select text-only small view layout (`text_only`)
pt_dl1 | Optional | Deep Link
pt_title_clr | Optional | Title Color in HEX
pt_msg_clr | Optional | Message Color in HEX
pt_small_icon_clr | Optional | Small Icon Color in HEX
pt_ico | Optional | Large Icon
pt_sticky | Optional | Should the notification be sticky? ("true"/"false")
pt_dismiss | Optional | Auto dismiss the notification after a set time (value in seconds)
pt_json | Optional | Above keys in JSON format
### Input Box Template
Input Box Template Keys | Required | Description
---:|:---:|:---
pt_id | Required | Value - `pt_input`
pt_title | Required | Title
pt_msg | Required | Message
pt_msg_summary | Optional | Message line when Notification is expanded
pt_subtitle | Optional | Subtitle
pt_big_img | Required | Image
pt_big_img_alt_text | Optional | Alt Text for Image
pt_big_img_alt | Optional | Image to be shown after feedback is collected
pt_big_img_alt_alt_text | Optional | Alt Text for Image to be shown after feedback is collected
pt_event_name | Optional | Name of Event to be raised
pt_event_property_ | Optional | Value for event property
pt_event_property_ | Optional | Value for event property
pt_event_property_ | Optional | Value for event property
pt_input_label | Required | Label text to be shown on the input
pt_input_auto_open | Optional | Auto open the app after feedback
pt_input_feedback | Required | Feedback
pt_dl1 | Required | Deep Link
pt_title_clr | Optional | Title Color in HEX
pt_msg_clr | Optional | Message Color in HEX
pt_small_icon_clr | Optional | Small Icon Color in HEX
pt_ico | Optional | Large Icon
pt_dismiss_on_click | Optional | Dismiss notification on click
pt_sticky | Optional | Should the notification be sticky? ("true"/"false")
pt_dismiss | Optional | Auto dismiss the notification after a set time (value in seconds)
pt_json | Optional | Above keys in JSON format
### NOTE
* `pt_title` and `pt_msg` in all the templates support HTML elements like bold ``, italics `` and underline ``
# Developer Notes
[(Back to top)](#table-of-contents)
* Using images of 3 MB or lower are recommended for better performance under Android 11.
* A silent notification channel with importance: `HIGH` is created every time on an interaction with the Rating, Manual Carousel, and Product Catalog templates with a silent sound file. This prevents the notification sound from playing when the notification is re-rendered.
* The silent notification channel is deleted whenever the notification is dismissed or clicked.
* For Android 11 and Android 12, please use images which are less than 100kb else notifications will not be rendered as advertised.
* Due to Android 12 trampoline restrictions, the Input Box template with auto open of deeplink feature will fallback to simply raising the event for a reply.
## Image Specifications
The following are the image specifications and guidelines for the Push Templates:
| Template | Aspect Ratios (Approx.) | Maximum File Size (OS version 12 and above) |
|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------|
| **Standard** | - OS version 12 and above: **3:2**
- OS version 11 and below: **5:3** | |
| **Basic** | - OS version 12 and above: **3:2**
- OS version 11 and below: **5:3** | 500 KB |
| **Auto Carousel** | - OS version 12 and above: **3:2**
- OS version 11 and below: **5:3** | 86 KB |
| **Manual Carousel** | - OS version 12 and above: **3:2**
- OS version 11 and below: **5:3** | 86 KB |
| **Five Icon** | - OS version 12 and above: **1:1**
- OS version 11 and below: **1:1** | 50 KB |
| **Text over Image** | - OS version 12 and above: **1:1**
- OS version 11 and below: **2:1** | 500 KB |
| **Timer** | - OS version 12 and above: **3:2**
- OS version 11 and below: **5:3** | 326 KB |
## Image Guidelines
Ensure images for the following templates meet the specified size guidelines:
| Template Name | Recommended Resolution |
|:---------------------------|:-----------------------|
| Auto Carousel Template | 400 x 300 px |
| Manual Carousel Template | 240 x 180 px |
| Five Icon Template | 300 x 300 px |
| Product Catalogue Template | 225 x 225 px |
- For Text over Image Template, ensure the text is center-aligned within the image for devices running OS version 12 and above.
## GIF Guidelines
To use GIFs in the Push Templates, ensure you are using Push Templates SDK version `2.2.0` and above. Also make sure gifs meet the specified size guidelines. You can use [this tool](https://ezgif.com/resize) to resize the GIF.
| GIF Size | Recommended Number of Frames |
|:---------------------------|:-----------------------------|
| 180 x 120 px | 15 |
| 240 x 160 px | 10 |
| 300 x 200 px | 6 |
## Dark Mode
To use the Dark mode feature, ensure you are using Push Templates SDK version 2.1.0 and above.
Push templates automatically adapt to the device's theme settings, rendering notifications in dark or light mode.
Templates support **custom color definitions** that adapt to both themes for visual consistency. Refer [here](https://developer.clevertap.com/docs/android-push-templates#dark-mode) for more details
## Image Scaling
To use the Image scaling feature, ensure you are using Push Templates SDK version 2.1.0 and above.
Android supports various image scaling options to control how images appear in push notifications. CleverTap optimizes image rendering to maintain visual consistency across devices while leveraging Android native scaling behavior.
To handle scaling in a Push template, you must add the key `pt_scale_type` key and the value is set as `fit_center` or `center_crop` based on the requirement. Refer [here](https://developer.clevertap.com/docs/android-push-templates#image-scaling) for more details
## Android 12 Trampoline restrictions
With Android 12, the Rating and Product Display template push notifications do not get dismissed once the deeplink is opened.
To handle this, you'll have to add the following code to the `onActivityResumed` or `onNewIntent` of your app
#### Kotlin
```kotlin
val payload = activity.intent?.extras
if (payload?.containsKey("pt_id") == true && payload["pt_id"] =="pt_rating")
{
val nm = activity.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
nm.cancel(payload["notificationId"] as Int)
}
if (payload?.containsKey("pt_id") == true && payload["pt_id"] =="pt_product_display")
{
val nm = activity.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
nm.cancel(payload["notificationId"] as Int)
}
```
#### JAVA
```java
Bundle payload = activity.getIntent().getExtras();
if (payload.containsKey("pt_id")&& payload.getString("pt_id").equals("pt_rating"))
{
NotificationManager nm = (NotificationManager) activity.getSystemService(Context.NOTIFICATION_SERVICE);
nm.cancel(payload.getInt("notificationId"));
}
if (payload.containsKey("pt_id")&& payload.getString("pt_id").equals("pt_product_display"))
{
NotificationManager nm = (NotificationManager) activity.getSystemService(Context.NOTIFICATION_SERVICE);
nm.cancel(payload.getInt("notificationId"));
}
```
## Android 12 Screenshots
You can see the renditions of all the Push Templates on an Android 12 devices [here](https://github.com/CleverTap/clevertap-android-sdk/blob/master/docs/CTPUSHTEMPLATESANDROID12.md)
# Sample App
[(Back to top)](#table-of-contents)
Check out the [Sample app](sample)