{"id":18426124,"url":"https://github.com/clevertap/ctnotificationcontent","last_synced_at":"2026-02-19T09:25:03.750Z","repository":{"id":37396510,"uuid":"84394635","full_name":"CleverTap/CTNotificationContent","owner":"CleverTap","description":" A Notification Content Extension class to display custom content interfaces for iOS 10 push notifications","archived":false,"fork":false,"pushed_at":"2024-10-04T11:42:28.000Z","size":57403,"stargazers_count":15,"open_issues_count":4,"forks_count":7,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-18T22:48:22.290Z","etag":null,"topics":["apns","carousel","clevertap","engagement","notifications","push-notifications","rich-push-notifications","user-retention"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CleverTap.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2017-03-09T03:38:20.000Z","updated_at":"2025-01-13T07:46:03.000Z","dependencies_parsed_at":"2024-04-17T10:43:13.743Z","dependency_job_id":null,"html_url":"https://github.com/CleverTap/CTNotificationContent","commit_stats":{"total_commits":168,"total_committers":14,"mean_commits":12.0,"dds":0.7738095238095238,"last_synced_commit":"0d0b103ea695dc34033fd4347a02e6cfcad8f811"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CleverTap%2FCTNotificationContent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CleverTap%2FCTNotificationContent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CleverTap%2FCTNotificationContent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CleverTap%2FCTNotificationContent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CleverTap","download_url":"https://codeload.github.com/CleverTap/CTNotificationContent/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247688094,"owners_count":20979603,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apns","carousel","clevertap","engagement","notifications","push-notifications","rich-push-notifications","user-retention"],"created_at":"2024-11-06T05:06:58.595Z","updated_at":"2026-02-19T09:25:03.744Z","avatar_url":"https://github.com/CleverTap.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/CleverTap/clevertap-ios-sdk/blob/master/docs/images/clevertap-logo.png\" width = \"50%\"/\u003e\n\u003c/p\u003e\n\n\n# CTNotificationContent\n\n[![Version](https://img.shields.io/cocoapods/v/CTNotificationContent.svg?style=flat)](http://cocoapods.org/pods/CTNotificationContent)\n[![SwiftPM compatible](https://img.shields.io/badge/SwiftPM-compatible-brightgreen.svg)](https://swift.org/package-manager/)\n[![Platform](https://img.shields.io/cocoapods/p/CTNotificationContent.svg?style=flat)](http://cocoapods.org/pods/CTNotificationContent)\n![iOS 10.0+](https://img.shields.io/badge/iOS-10.0%2B-blue.svg)\n[![License](https://img.shields.io/cocoapods/l/CTNotificationContent.svg?style=flat)](http://cocoapods.org/pods/CTNotificationContent)\n\n\n### A Notification Content Extension class to display custom content interfaces for iOS 10 push notifications\n\nStarting with iOS 10 you can add custom content views to iOS push notifications.  This library provides a class to accomplish that.  It provides a default Image Slideshow view and is designed to be easily extensible to display additional view types. \n\n[Custom push notification content interfaces](https://developer.apple.com/videos/play/wwdc2016/708/) are enabled in iOS 10 via a [Notification Content Extension](https://developer.apple.com/reference/usernotificationsui/unnotificationcontentextension), a separate and distinct binary embedded in your app bundle.\n\n# Table of contents\n- [Installation](#installation)\n- [Setup](#setup)\n- [Dashboard Usage](#dashboard-usage)\n- [Template Types](#template-types)\n- [Template Keys](#template-keys)\n- [Sample App](#sample-app)\n- [Changelog](#changelog)\n\n# 🎉 Installation #\n[(Back to top)](#table-of-contents)\n## [CocoaPods](http://cocoapods.org)\n\nYour Podfile should look something like this:\n\n    source 'https://github.com/CocoaPods/Specs.git'\n    platform :ios, '10.0'\n\n    use_frameworks!\n\n    target 'YOUR_NOTIFICATION_CONTENT_TARGET_NAME' do  \n        pod 'CTNotificationContent'  \n    end     \n\nThen run `pod install`\n\n[See example Podfile here](https://github.com/CleverTap/CTNotificationContent/blob/master/Example/Podfile).\n\n## Swift Package Manager\n\nSwift Package Manager is an Xcode tool that installs project dependencies. To use it to install CTNotificationContent SDK, follow these steps:\n\n- In Xcode, navigate to **File -\u003e Swift Package Manager -\u003e Add Package Dependency.**\n- Enter **https://github.com/CleverTap/CTNotificationContent.git** when choosing package repo and Click **Next.**\n- On the next screen, Select an SDK version (by default, Xcode selects the latest stable version). Click **Next.**\n- Click **Finish** and ensure that the **CTNotificationContent** has been added to the appropriate target.\n\n# 🚀 Setup #\n\n[(Back to top)](#table-of-contents)\n### Configure your app for Push and add a Notification Content Extension target\n\nEnable [push notifications](https://developer.apple.com/notifications/) in your main app.\n\nCreate a Notification Content Extension in your project. To do that in your Xcode project, select File -\u003e New -\u003e Target and choose the Notification Content Extension template.\n\n![notification content extension](https://github.com/CleverTap/CTNotificationContent/blob/master/images/content_extension.png)\n\n\n\n### Configure your Notification Content Extension to use the CTNotificationViewController class\n\nChange the superclass of your NotificationViewController to `CTNotificationViewController`. You should not implement any of the UNNotificationContentExtension protocol methods in your NotificationViewController class, those will be handled by `CTNotificationViewController`.  [See Objective-C example here](https://github.com/CleverTap/CTNotificationContent/tree/master/Example/NotificationContent) and [Swift example here](https://github.com/CleverTap/CTNotificationContent/tree/master/ExampleSwift/NotificationContent). \n\nEdit the `Maininterface.storyboard` in your NotificationContent target to a plain UIView, [see example here](https://github.com/CleverTap/CTNotificationContent/blob/master/Example/NotificationContent/Base.lproj/MainInterface.storyboard). \n\nIn your AppDelegate, register the Notification category and actions:\n\nSwift:\n```Swift\n    // register category with actions\n    let action1 = UNNotificationAction(identifier: \"action_1\", title: \"Back\", options: [])\n    let action2 = UNNotificationAction(identifier: \"action_2\", title: \"Next\", options: [])\n    let action3 = UNNotificationAction(identifier: \"action_3\", title: \"View In App\", options: [])\n    let category = UNNotificationCategory(identifier: \"CTNotification\", actions: [action1, action2, action3], intentIdentifiers: [], options: [])\n    UNUserNotificationCenter.current().setNotificationCategories([category])\n```\nObjective-C:\n```Objc\n    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];\n    UNNotificationAction *action1 = [UNNotificationAction actionWithIdentifier:@\"action_1\" title:@\"Back\" options:UNNotificationActionOptionNone];\n    UNNotificationAction *action2 = [UNNotificationAction actionWithIdentifier:@\"action_2\" title:@\"Next\" options:UNNotificationActionOptionNone];\n    UNNotificationAction *action3 = [UNNotificationAction actionWithIdentifier:@\"action_3\" title:@\"View In App\" options:UNNotificationActionOptionNone];\n    UNNotificationCategory *cat = [UNNotificationCategory categoryWithIdentifier:@\"CTNotification\" actions:@[action1, action2, action3] intentIdentifiers:@[] options:UNNotificationCategoryOptionNone];\n    [center setNotificationCategories:[NSSet setWithObjects:cat, nil]];\n```\n\n[See Objective-C example here](https://github.com/CleverTap/CTNotificationContent/blob/master/Example/CTNotificationContentExample/AppDelegate.m) and [Swift example here](https://github.com/CleverTap/CTNotificationContent/blob/master/ExampleSwift/CTNotificationContentExampleSwift/AppDelegate.swift).\n\nThen configure your Notification Content target Info.plist to reflect the category identifier you registered: `NSExtension -\u003e NSExtensionAttributes -\u003e UNNotificationExtensionCategory`.  In addition, set the `UNNotificationExtensionInitialContentSizeRatio -\u003e 0.1` and `UNNotificationExtensionDefaultContentHidden -\u003e true`.  \n\nAlso, If you plan on downloading non-SSL urls please be sure to enable `App Transport Security Settings -\u003e Allow Arbitrary Loads -\u003e true` in your plist.  [See plist example here](https://github.com/CleverTap/CTNotificationContent/blob/master/Example/NotificationContent/Info.plist).  \n\n# Dashboard Usage\n\n[(Back to top)](#table-of-contents)\nWhile creating a Push Notification campaign on CleverTap, just follow the steps below -\n\n1. On the \"WHAT\" section pass the desired required values in the \"title\" and \"message\" fields (NOTE: These are iOS alert title and body).\n![Dashboard alert](https://github.com/CleverTap/CTNotificationContent/blob/master/images/dashboard_alert.png)\n2. Click on \"Advanced\" and then click on \"Rich Media\" and select Single or Carousel template.\n![Dashboard Rich Media](https://github.com/CleverTap/CTNotificationContent/blob/master/images/dashboard_richMedia.png)\n3. For adding custom key-value pair, add the [template Keys](#template-keys) individually or into one JSON object and use the `pt_json` key to fill in the values.\n![Dashboard Custom Key individual](https://github.com/CleverTap/CTNotificationContent/blob/master/images/dashboard_customKeysIndividual.png)\n![Dashboard Custom Key JSON](https://github.com/CleverTap/CTNotificationContent/blob/master/images/dashboard_customKeyValue.png)\n4. Send a test push and schedule!\n\n# Template Types\n\n[(Back to top)](#table-of-contents)\n\n## Rich Media\n### Single Media\nSingle media is for basic view with single image.\n![Single Media](https://github.com/CleverTap/CTNotificationContent/blob/master/images/SingleMedia.png)\n\n### Content Slider\nContent Slider is for image slideshow view where user can add multiple images with different captions, sub-captions, and actions.\n\n\u003cimg src=\"https://github.com/CleverTap/CTNotificationContent/blob/master/images/ContentSlider.gif\" alt=\"Content slider\" width=\"450\" height=\"800\"/\u003e\n\n## Custom key-value pair\n\n### Basic Template\nBasic Template is the basic push notification received on apps where user can also update text colour, background colour.\n\n![Custom Basic template](https://github.com/CleverTap/CTNotificationContent/blob/master/images/CustomBasicTemplate.png)\n\n### Auto Carousel Template\nAuto carousel is an automatic revolving carousel push notification where user can also update text colour, background colour.\n\n\u003cimg src=\"https://github.com/CleverTap/CTNotificationContent/blob/master/images/CustomAutoCarousel.gif\" alt=\"Auto carousel\" width=\"450\" height=\"800\"/\u003e\n\n### Manual Carousel Template\nThis is the manual version of the carousel. The user can navigate to the next/previous image by clicking on the Next/Back buttons.\n---\n**NOTE:**\n\nFor iOS 12 and above, you need to configure your Notification Content target Info.plist to reflect the category identifier you registered: `NSExtension -\u003e NSExtensionAttributes -\u003e UNNotificationExtensionCategory`.  In addition, set the `UNNotificationExtensionInitialContentSizeRatio -\u003e 0.1` ,  `UNNotificationExtensionDefaultContentHidden -\u003e true` and `UNNotificationExtensionUserInteractionEnabled -\u003e 1`.\n\nFor iOS 11 and below, the previous/next buttons will not work. Please use notification actions with identifiers `action_1` and `action_2` for this purpose.\n\n---\n\n\u003cimg src=\"https://github.com/CleverTap/CTNotificationContent/blob/master/images/CustomManualCarousel.gif\" alt=\"Manual carousel\" width=\"450\" height=\"800\"/\u003e\n\n### Timer Template\nThis template features a live countdown timer. You can even choose to show different title, message, and background image after the timer expires.\n\n\u003cimg src=\"https://github.com/CleverTap/CTNotificationContent/blob/master/images/CustomTimerTemplate.gif\" alt=\"Timer template\" width=\"450\" height=\"800\"/\u003e\n\n### Zero Bezel Template\n\nThe 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.\n\n![Zero Bezel template](https://github.com/CleverTap/CTNotificationContent/blob/master/images/ZeroBezel.png)\n\n### Rating Template\n\nRating template lets your users give you feedback.\n\n**NOTE:**\n\nFor iOS 12 and above, you need to configure your Notification Content target Info.plist to reflect the category identifier you registered: `NSExtension -\u003e NSExtensionAttributes -\u003e UNNotificationExtensionCategory`.  In addition, set the `UNNotificationExtensionInitialContentSizeRatio -\u003e 0.1` ,  `UNNotificationExtensionDefaultContentHidden -\u003e true` and `UNNotificationExtensionUserInteractionEnabled -\u003e 1`.\nFor iOS 11 and below, it will fallback to a basic template.\n\n---\n\n![Rating](https://github.com/CleverTap/CTNotificationContent/blob/master/images/Rating.gif)\n\n### Product Catalog Template\n\nProduct 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.\n\n**NOTE:**\n\nFor iOS 12 and above, you need to configure your Notification Content target Info.plist to reflect the category identifier you registered: `NSExtension -\u003e NSExtensionAttributes -\u003e UNNotificationExtensionCategory`.  In addition, set the `UNNotificationExtensionInitialContentSizeRatio -\u003e 0.1` ,  `UNNotificationExtensionDefaultContentHidden -\u003e true` and `UNNotificationExtensionUserInteractionEnabled -\u003e 1`.\nFor iOS 11 and below, it will fallback to a basic template.\n\n---\n\n### Vertical View \n\n![Product Display](https://github.com/CleverTap/CTNotificationContent/blob/master/images/ProductDisplayVertical.gif)\n\n### Linear View\n\nUse the following keys to enable linear view variant of this template.\n\nTemplate Key | Required | Value\n---:|:---:|:---\npt_product_display_linear | Optional | `true`\n\n![Product Display](https://github.com/CleverTap/CTNotificationContent/blob/master/images/ProductDisplayLinear.gif)\n\n### WebView Template \n\nWebView template lets you load a remote https URL.\n\n![WebView Template](https://github.com/CleverTap/CTNotificationContent/blob/master/images/WebView.gif)\n\n**Note:** If any image can't be downloaded, the template falls back to basic template with caption and sub caption only.\n\n# Template Keys\n\n[(Back to top)](#table-of-contents)\n\n## Rich Media\n### Content Slider\nConfigure your APNS payload:\n\nThen, when sending notifications via [APNS](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html):\n- include the mutable-content flag in your payload aps entry (this key must be present in the aps payload or the system will not call your app extension) \n- for the Image Slideshow view, add the `ct_ContentSlider` key with a json object value, see example below, to the payload, outside of the aps entry.\n\n\n\n```\n{\n\n    \"aps\": {\n        \"alert\": {\n            \"body\": \"test message\",\n            \"title\": \"test title\",\n        },\n        \"category\": \"CTNotification\",\n        \"mutable-content\": true,\n      },\n    \"ct_ContentSlider\": {\n        \"orientation\": \"landscape\", // landscape assumes 16:9 images, remove to display default square/portrait images\n        \"showsPaging\": true, // optional to display UIPageControl\n        \"autoPlay\": true, // optional to auto play the slideshow\n        \"autoDismiss\": true, // optional to auto dismiss the notification on item actionUrl launch\n        \"items\":[\n            {\n                \"caption\": \"caption one\",\n                \"subcaption\": \"subcaption one\",\n                \"imageUrl\": \"https://s3.amazonaws.com/ct-demo-images/landscape-1.jpg\",\n                \"actionUrl\": \"com.clevertap.ctcontent.example://item/one\"\n            }, \n            {\n                \"caption\": \"caption two\", \n                \"subcaption\": \"subcaption two\", \n                \"imageUrl\": \"https://s3.amazonaws.com/ct-demo-images/landscape-2.jpg\",\n                \"actionUrl\": \"com.clevertap.ctcontent.example://item/two\"\n            }\n       ]\n   }\n}\n```\n## Custom key-value pair\n\n### Basic Template\nBasic Template Keys | Required | Description\n ---:|:---:|:---| \npt_id | Required | Value - `pt_basic`\npt_title | Required | Title\npt_msg | Required | Message\npt_msg_summary | Required | Message line when Notification is expanded\npt_bg | Optional | Background Color in HEX\npt_bg_dark | Optional | Background Color for dark mode in HEX\npt_big_img | Optional | Image\npt_gif | Optional | GIF\npt_big_img_alt_text | Optional | Alt Text for Image\npt_dl1 | Optional | One Deep Link\npt_title_clr | Optional | Title Color in HEX\npt_msg_clr | Optional | Message Color in HEX\npt_title_clr_dark | Optional | Title Color for dark mode in HEX\npt_msg_clr_dark | Optional | Message Color for dark mode in HEX\npt_json | Optional | Above keys in JSON format\n\n### Auto Carousel Template\n\nAuto Carousel Template Keys | Required | Description\n  ---:|:---:|:--- \npt_id | Required | Value - `pt_carousel`\npt_title | Required | Title\npt_msg | Required | Message\npt_msg_summary | Optional | Message line when Notification is expanded\npt_dl1 | Required | Deep Link\npt_img1 | Required | Image One\npt_img1_alt_text | Optional | Alt Text for Image One\npt_img2 | Required | Image Two\npt_img2_alt_text | Optional | Alt Text for Image Two\npt_img3 | Required | Image Three\npt_img3_alt_text | Optional | Alt Text for Image Three\npt_bg | Optional | Background Color in HEX\npt_bg_dark | Optional | Background Color for dark mode in HEX\npt_title_clr | Optional | Title Color in HEX\npt_msg_clr | Optional | Message Color in HEX\npt_title_clr_dark | Optional | Title Color for dark mode in HEX\npt_msg_clr_dark | Optional | Message Color for dark mode in HEX\npt_json | Optional | Above keys in JSON format\n\n### Manual Carousel Template\n\nManual Carousel Template Keys | Required | Description\n  ---:|:---:|:--- \npt_id | Required | Value - `pt_manual_carousel`\npt_title | Required | Title\npt_msg | Required | Message\npt_msg_summary | Optional | Message line when Notification is expanded\npt_dl1 | Required | Deep Link One\npt_img1 | Required | Image One\npt_img1_alt_text | Optional | Alt Text for Image One\npt_img2 | Required | Image Two\npt_img2_alt_text | Optional | Alt Text for Image Two\npt_img3 | Required | Image Three\npt_img3_alt_text | Optional | Alt Text for Image Three\npt_bg | Optional | Background Color in HEX\npt_bg_dark | Optional | Background Color for dark mode in HEX\npt_title_clr | Optional | Title Color in HEX\npt_msg_clr | Optional | Message Color in HEX\npt_title_clr_dark | Optional | Title Color for dark mode in HEX\npt_msg_clr_dark | Optional | Message Color for dark mode in HEX\npt_json | Optional | Above keys in JSON format\n\n### Timer Template\n\nTimer Template Keys | Required | Description\n  ---:|:---:|:--- \npt_id | Required | Value - `pt_timer`\npt_title | Required | Title\npt_title_alt | Optional | Title to show after timer expires\npt_msg | Required | Message\npt_msg_alt | Optional | Message to show after timer expires\npt_msg_summary | Optional | Message line when Notification is expanded\npt_dl1 | Required | Deep Link\npt_big_img | Optional | Image\npt_gif | Optional | GIF\npt_big_img_alt_text | Optional | Alt Text for Image\npt_big_img_alt | Optional | Image to show when timer expires\npt_gif_alt | Optional | GIF to show when timer expires\npt_big_img_alt_alt_text | Optional | Alt Text for Image to show when timer expires\npt_bg |Optional | Background Color in HEX\npt_bg_dark | Optional | Background Color for dark mode in HEX\npt_chrono_title_clr | Optional | Color for timer text in HEX\npt_chrono_title_clr_dark | Optional | Color for timer text for dark mode in HEX\npt_timer_threshold | Required | Timer duration in seconds. Will be given higher priority. \npt_timer_end | Optional | Epoch Timestamp to countdown to (for example, $D_1595871380 or 1595871380). Not needed if pt_timer_threshold is specified.\npt_title_clr | Optional | Title Color in HEX\npt_msg_clr | Optional | Message Color in HEX\npt_title_clr_dark | Optional | Title Color for dark mode in HEX\npt_msg_clr_dark | Optional | Message Color for dark mode in HEX\npt_json | Optional | Above keys in JSON format\n\n### Zero Bezel Template\n \n Zero Bezel Template Keys | Required | Description \n  ---:|:---:|:--- \n  pt_id | Required | Value - `pt_zero_bezel`\n  pt_title | Required | Title \n  pt_msg | Required | Message\n  pt_msg_summary | Optional | Message line when Notification is expanded\n  pt_subtitle | Optional | Subtitle\n  pt_big_img | Required | Image\n  pt_gif | Optional | GIF\n  pt_big_img_alt_text | Optional | Alt Text for Image\n  pt_dl1 | Required | Deep Link\n  pt_title_clr | Optional | Title Color in HEX\n  pt_title_clr_dark | Optional | Title Color for dark mode in HEX\n  pt_msg_clr | Optional | Message Color in HEX\n  pt_json | Optional | Above keys in JSON format\n\n### Rating Template\n\nRating Template Keys | Required | Description\n ---:|:---:|:--- \npt_id | Required  | Value - `pt_rating`\npt_title | Required  | Title\npt_msg | Required  | Message\npt_big_img | Optional | Image\npt_gif | Optional | GIF\npt_big_img_alt_text | Optional | Alt Text for Image\npt_msg_summary | Optional | Message line when Notification is expanded\npt_subtitle | Optional | Subtitle\npt_default_dl | Required  | Default Deep Link for Push Notification\npt_dl1 | Required  | Deep Link for first/all star(s)\npt_dl2 | Optional | Deep Link for second star\npt_dl3 | Optional | Deep Link for third star\npt_dl4 | Optional | Deep Link for fourth star\npt_dl5 | Optional | Deep Link for fifth star\npt_bg | Optional  | Background Color in HEX\npt_bg_dark | Optional  | Background Color in HEX\npt_ico | Optional | Large Icon\npt_title_clr | Optional | Title Color in HEX\npt_msg_clr | Optional | Message Color in HEX\npt_title_clr_dark | Optional | Title Color for dark mode in HEX\npt_msg_clr_dark | Optional | Message Color for dark mode in HEX\npt_json | Optional | Above keys in JSON format\n\n### Product Catalog Template\n\nProduct Catalog Template Keys | Required | Description\n ---:|:---:|:--- \npt_id | Required  | Value - `pt_product_display`\npt_title | Required  | Title\npt_msg | Required  | Message\npt_subtitle | Optional  | Subtitle\npt_img1 | Required  | Image One\npt_img1_alt_text | Optional | Alt Text for Image One\npt_img2 | Required  | Image Two\npt_img2_alt_text | Optional | Alt Text for Image Two\npt_img3 | Optional  | Image Three\npt_img3_alt_text | Optional | Alt Text for Image Three\npt_bt1 | Required  | Big text for first image\npt_bt2 | Required  | Big text for second image\npt_bt3 | Required  | Big text for third image\npt_st1 | Required  | Small text for first image\npt_st2 | Required  | Small text for second image\npt_st3 | Required  | Small text for third image\npt_dl1 | Required  | Deep Link for first image\npt_dl2 | Required  | Deep Link for second image\npt_dl3 | Required  | Deep Link for third image\npt_price1 | Required  | Price for first image\npt_price2 | Required  | Price for second image\npt_price3 | Required  | Price for third image\npt_bg | Optional  | Background Color in HEX\npt_bg_dark | Optional  | Background Color for dark mode in HEX\npt_product_display_action | Required  | Action Button Label Text\npt_product_display_linear | Optional  | Linear Layout Template (\"true\"/\"false\")\npt_product_display_action_clr | Required  | Action Button Background Color in HEX\npt_product_display_action_clr_dark | Required  | Action Button Background Color for dark mode in HEX\npt_title_clr | Optional  | Title Color in HEX\npt_msg_clr | Optional  | Message Color in HEX\npt_title_clr_dark | Optional | Title Color for dark mode in HEX\npt_msg_clr_dark | Optional | Message Color for dark mode in HEX\npt_json | Optional  | Above keys in JSON format\n\n### WebView Template\n\nWebView Template Keys | Required | Description\n ---:|:---:|:--- \npt_id | Required  | Value - `pt_web_view`\npt_dl1 | Required  | Deep Link\npt_url | Required  | URL to load\npt_orientation | Optional  | Value - `landscape` or `portrait`\npt_json | Optional  | Above keys in JSON format\n\n# Sample App #\n\n[(Back to top)](#table-of-contents)\n- See [an example Swift project here](./ExampleSwift).\n\n- See [an example Objective-C project here](./Example).\n\n- See [an example SwiftPM project here](./ExampleSwiftPM).\n\n# Changelog #\n\n[(Back to top)](#table-of-contents)\nRefer to the [Change Log](./CHANGELOG.md).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclevertap%2Fctnotificationcontent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclevertap%2Fctnotificationcontent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclevertap%2Fctnotificationcontent/lists"}