Embed the MoEngage Cards feed in a Jetpack Compose user interface using the cards-ui-compose module.
The cards-ui-compose module provides the MoEngage Cards feed as a Jetpack Compose user interface. The module renders the card list, the category tabs, pull to refresh, and the empty state, and it handles click tracking and card actions.The module is written in Kotlin and exposes composable functions. It is available from MoEngage Android BOM 4.4.0.For the Cards feature and campaign setup, refer to Cards Overview.
MoEngage recommends the BOM for dependency management, because it resolves a compatible version for every MoEngage module. Refer to the Install Using BOM document.Add the module to the application dependencies. Replace [BOM_VERSION] with the BOM version for the SDK release you integrate, which the Android SDK release notes list for each release.
Enable Jetpack Compose in your application module before you add the dependency. Refer to the Jetpack Compose setup guide for the required build configuration.
Integrate the card feed either by launching the activity that the SDK provides or by placing the composable inside an existing screen.Each API accepts the workspace identifier. Pass it if your application is configured with more than one MoEngage workspace, and omit it if your application uses a single workspace.
MoECardComposeActivity is a complete screen with a toolbar and back navigation. The module manifest already declares it, so launch it directly.
import com.moengage.cards.ui.compose.MoECardComposeActivityimport com.moengage.core.MOENGAGE_ACCOUNT_IDENTIFIERval intent = Intent(this, MoECardComposeActivity::class.java)// Pass the extra only if your application is configured with more than one workspace.intent.putExtra(MOENGAGE_ACCOUNT_IDENTIFIER, "YOUR_WORKSPACE_ID")startActivity(intent)
If the MOENGAGE_ACCOUNT_IDENTIFIER extra is absent, the activity uses the default instance.
The feed ships with a set of colors and text styles. Override the colors, the text styles, or both through MoECardsComposeUiHelper.setTheme().MoECardColorsLight and MoECardDefaultTextStyles hold the default values. Copy from them and change only the properties you require, so that the remaining properties keep their defaults.
Set the theme before the feed is rendered, usually in onCreate(). The theme applies everywhere the feed is shown, including MoECardComposeActivity.Pass null to restore the default theme. If the override applies to a single screen, clear it in onDestroy() of that screen, because the theme otherwise remains in effect wherever the feed is shown next.
The following color properties are available:background, header, message, timestamp, cta, unclickedIndicator, separator, tabBackground, tabSelectedText, tabUnselectedText, newUpdatesText, newUpdatesBackground, toolbarContent, refreshIndicatorBackground, refreshIndicatorContent, and dialogBackground.The following text style properties are available:header, message, cta, timestamp, and tab.
To override any of the text in the feed, declare the same resource name in your application’s strings.xml file.
Resource name
Where it appears
Default
moe_card_feed_title
The toolbar title in MoECardComposeActivity, and the activity label.
Inbox
moe_card_new_updates
The button shown when new cards arrive while the feed is open.
New Updates
moe_card_no_message_available
The empty state.
No notifications to show, check again later.
moe_card_delete_title
The delete option on long press.
Delete
<resources> <!-- Toolbar title in MoECardComposeActivity, and the activity label. Default: Inbox --> <string name="moe_card_feed_title">Notifications</string> <!-- Button shown when new cards arrive while the feed is open. Default: New Updates --> <string name="moe_card_new_updates">New messages</string> <!-- Empty state. Default: No notifications to show, check again later. --> <string name="moe_card_no_message_available">You are all caught up.</string> <!-- Delete option on long press. Default: Delete --> <string name="moe_card_delete_title">Remove</string></resources>
The card parameter exposes the header, message, CTA text, image URL, timestamp, pinned state, clicked state, and the configured actions.Pass null to restore the default card layout.
Tapping a card executes the action configured on the MoEngage dashboard by default. To handle the navigation within your application instead, register a click listener.
import com.moengage.cards.ui.compose.MoECardsComposeUiHelperMoECardsComposeUiHelper.setClickListener({ clickData -> // clickData.card holds the card that was tapped. // clickData.navigationAction holds the configured action. false}, "YOUR_WORKSPACE_ID")
Return true if your application handles the redirection for the card, in which case the SDK does not execute the configured action. Return false to let the SDK execute the configured action. The SDK tracks the click in both cases.
Invoke onClick() when the user taps the card, so that the SDK tracks the click and executes the configured action.
The module renders static card images without additional setup. On Android 9 and above, it also renders animated GIFs without additional setup.To render animated GIFs on earlier Android versions, or to use an image loading library that your application already includes, add either Coil or Glide. The SDK is compiled against Coil 3.5.0 and Glide 5.0.7. Use these versions or higher.
dependencies { implementation("io.coil-kt.coil3:coil-compose:3.5.0") implementation("io.coil-kt.coil3:coil-network-okhttp:3.5.0") implementation("io.coil-kt.coil3:coil-gif:3.5.0") // Required for animated GIFs.}
coil-network-okhttp is required alongside coil-compose, because Coil 3 does not load images over the network without it.No further configuration is required. The SDK detects the available library at runtime and uses it.
The SDK provides an API to fetch the number of cards which hasn’t been clicked by the users. To get the count, you can use the below APIs.
import com.moengage.cards.core.MoECardHelper// Call this API on worker thread as it reads from a file.MoECardHelper.getUnClickedCardCount(context)// This API returns the count asynchronously in the listener passed as a parameter.MoECardHelper.getUnClickedCardCountAsync(context, listener)
import com.moengage.cards.core.MoECardHelper;// Call this API on worker thread as it reads from a file.MoECardHelper.INSTANCE.getUnClickedCardCount(context);// This API returns the count asynchronously in the listener passed as a parameter.MoECardHelper.INSTANCE.getUnClickedCardCountAsync(context, listener);
The SDK provides an API to get the new cards for the user on the device. To get the count, use the below API.
import com.moengage.cards.core.MoECardHelper// Call this API on worker thread as it reads from a file.MoECardHelper.getNewCardCount(context)// This API returns the count asynchronously in the listener passed as a parameter.MoECardHelper.getNewCardCountAsync(context, listener)
import com.moengage.cards.core.MoECardHelper;// Call this API on worker thread as it reads from a file.MoECardHelper.INSTANCE.getNewCardCount(context);// This API returns the count asynchronously in the listener passed as a parameter.MoECardHelper.INSTANCE.getNewCardCountAsync(context, listener);
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"MoEngage","colors":{"primary":"#2E69FF","light":"#6691FF","dark":"#2554CC"},"logo":{"light":"https://mintcdn.com/moengage/VG5pJbeZsDUmdCZM/logo/light.svg?fit=max\u0026auto=format\u0026n=VG5pJbeZsDUmdCZM\u0026q=85\u0026s=28ca5909311cb6ffe01738e1503b5e64","dark":"https://mintcdn.com/moengage/VG5pJbeZsDUmdCZM/logo/dark.svg?fit=max\u0026auto=format\u0026n=VG5pJbeZsDUmdCZM\u0026q=85\u0026s=728a767d8fb8d3434575a28de18d08c5","href":"https://www.moengage.com/docs/"},"favicon":"https://mintcdn.com/moengage/bJi_ZHRHKldZCdcW/logo/favicon.svg?fit=max\u0026auto=format\u0026n=bJi_ZHRHKldZCdcW\u0026q=85\u0026s=9d13744d3b616913967983f324947bb5","api":{"examples":{"languages":["curl"]}},"appearance":{"default":"system"},"background":{"decoration":"gradient","color":{"light":"#FFFFFF","dark":"#121212"}},"navbar":{"links":[{"href":"/user-guide/contact-support/raise-a-support-ticket-through-moengage-dashboard","label":"Support"},{"href":"https://www.moengage.com/request-demo","label":"Request Demo"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.moengage.com/"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/moengage","x":"https://x.com/i/flow/login?redirect_after_login=%2Fmoengage","youtube":"https://www.youtube.com/c/MoEngage_Global","facebook":"https://www.facebook.com/moengage","github":"https://github.com/moengage"},"links":[{"header":"Support","items":[{"label":"Contact Support","href":"https://www.moengage.com/docs/user-guide/contact-support/raise-a-support-ticket-through-moengage-dashboard"},{"label":"AIRA Support Bot","href":"https://www.moengage.com/docs/user-guide/contact-support/aira-support-bot/aira-overview"},{"label":"Suggest a Feature","href":"https://www.moengage.com/docs/user-guide/contact-support/suggest-a-feature"},{"label":"System Status","href":"https://status.moengage.com"}]},{"header":"Learn","items":[{"label":"MoEngage Academy","href":"https://academy.moengage.com/student/catalog"},{"label":"Use Cases","href":"https://www.moengage.com/docs/use-cases/introduction"},{"label":"Release Notes","href":"https://www.moengage.com/docs/release-notes/subscribe-to-release-notes"},{"label":"Blog","href":"https://www.moengage.com/blog"}]},{"header":"For AI Tools","items":[{"label":"Setup Guide","href":"https://www.moengage.com/docs/documentation-access-to-agents"},{"label":"llms.txt","href":"https://www.moengage.com/docs/llms.txt"},{"label":"llms-full.txt","href":"https://www.moengage.com/docs/llms-full.txt"}]}]},"seo":{"metatags":{"google-site-verification":"ICNaPDX9oefbF09W1b5_U9PDnlkyfyKSRbIap6_dW6o"},"indexing":"all"},"fonts":{"heading":{"family":"circular","source":"https://app-cdn.moengage.com/images/Fonts/CircularXXWeb-Regular.woff2","format":"woff2"},"body":{"family":"circular","source":"https://app-cdn.moengage.com/images/Fonts/CircularXXWeb-Regular.woff2","format":"woff2"}},"styling":{"eyebrows":"breadcrumbs","latex":true},"contextual":{"options":["copy","view","chatgpt","claude","cursor","vscode"],"display":"header"},"interaction":{"drilldown":true},"navigation":{"languages":[{"language":"en","href":""},{"language":"ja","href":"ja"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"moengage","hasAudioNarration":false,"actualSubdomain":"moengage","customDomains":["moengage.com"],"gitSource":{"type":"github","owner":"moengage","repo":"moengage-documentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":false,"contextualFeedback":{"allowEmail":true},"issues":false,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af46495c6574eb8dd279151","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"en","tag":"Guide","count":1187},{"language":"ja","tag":"ガイド","count":1180},{"language":"en","tag":"User Guide","count":798},{"language":"ja","tag":"ユーザーガイド","count":798},{"language":"en","tag":"Campaigns and Channels","count":437},{"language":"ja","tag":"キャンペーンとチャネル","count":437},{"language":"en","tag":"Partner Integrations","count":390},{"language":"ja","tag":"パートナー統合","count":383},{"language":"en","tag":"SDKs","count":340},{"language":"en","tag":"Developer Guide (SDKs)","count":329},{"language":"ja","tag":"SDK","count":308},{"language":"ja","tag":"開発者ガイド(SDK)","count":297},{"language":"en","tag":"Use Cases","count":218},{"language":"ja","tag":"ユースケース","count":218},{"language":"en","tag":"API Guide","count":183},{"language":"ja","tag":"APIガイド","count":183},{"language":"en","tag":"Endpoints","count":177},{"language":"ja","tag":"エンドポイント","count":177},{"language":"en","tag":"Release Notes","count":140},{"language":"ja","tag":"リリースノート","count":136}],"searchSettings":{"maxResults":8,"isFiltersEnabled":true}},"assistantConfig":{"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"deflection":{"enabled":false,"type":"email"}},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"starterQuestions":[{"_id":"69a03c84f0b21f38ae93fdfb","deploymentId":"68bea8f8fe02728a34cf2acf","questionText":"How do I track user events?","status":"active","generatedBy":"manual","createdAt":"2026-02-26T12:28:52.454Z","updatedAt":"2026-02-26T12:28:52.454Z","__v":0}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[{"filePath":"style.css","href":"/docs/_mintlify/custom/moengage/0a209f0cf9e21c6c/style.css"}],"page":{"pagePath":"developer-guide/android-sdk/cards/cards-ui-compose","slug":"/developer-guide/android-sdk/cards/cards-ui-compose","pageMetadata":{"title":"Cards in Jetpack Compose","description":"Embed the MoEngage Cards feed in a Jetpack Compose user interface using the cards-ui-compose module.","keywords":["Jetpack Compose Cards","cards-ui-compose","MoECardsScreen","MoECardsComposeUiHelper","Android Compose App Inbox","MoECardComposeActivity"],"href":"/developer-guide/android-sdk/cards/cards-ui-compose"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Embed the MoEngage Cards feed in a Jetpack Compose user interface using the cards-ui-compose module.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,CodeGroup,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`cards-ui-compose`}),` module provides the MoEngage Cards feed as a Jetpack Compose user interface. The module renders the card list, the category tabs, pull to refresh, and the empty state, and it handles click tracking and card actions.`]}),`\n`,_jsx(_components.p,{children:`The module is written in Kotlin and exposes composable functions. It is available from MoEngage Android BOM 4.4.0.`}),`\n`,_jsxs(_components.p,{children:[`For the Cards feature and campaign setup, refer to `,_jsx(_components.a,{href:`/user-guide/campaigns-and-channels/cards/getting-started-with-cards/cards-overview`,children:`Cards Overview`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`sdk-installation`,children:`SDK Installation`}),`\n`,_jsx(Heading,{level:`3`,id:`install-using-bom`,children:`Install Using BOM`}),`\n`,_jsxs(_components.p,{children:[`MoEngage recommends the BOM for dependency management, because it resolves a compatible version for every MoEngage module. Refer to the `,_jsx(_components.a,{href:`/developer-guide/android-sdk/sdk-integration/basic-integration/Install-Using-BOM`,children:`Install Using BOM`}),` document.`]}),`\n`,_jsxs(_components.p,{children:[`Add the module to the application dependencies. Replace `,_jsx(_components.code,{children:`[BOM_VERSION]`}),` with the BOM version for the SDK release you integrate, which the `,_jsx(_components.a,{href:`/release-notes/sdks/android#23rd-september-2026`,children:`Android SDK release notes`}),` list for each release.`]}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`build.gradle.kts`,wrap:`true`,numberOfLines:`5`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`dependencies`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` implementation`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`platform`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"com.moengage:android-bom:[BOM_VERSION]\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` implementation`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"com.moengage:cards-ui-compose\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),`\n`,_jsx(Heading,{level:`3`,id:`enable-jetpack-compose`,children:`Enable Jetpack Compose`}),`\n`,_jsxs(_components.p,{children:[`Enable Jetpack Compose in your application module before you add the dependency. Refer to the `,_jsx(_components.a,{href:`https://developer.android.com/develop/ui/compose/setup`,children:`Jetpack Compose setup guide`}),` for the required build configuration.`]}),`\n`,_jsx(Heading,{level:`2`,id:`adding-the-ui-component`,children:`Adding the UI Component`}),`\n`,_jsx(_components.p,{children:`Integrate the card feed either by launching the activity that the SDK provides or by placing the composable inside an existing screen.`}),`\n`,_jsx(_components.p,{children:`Each API accepts the workspace identifier. Pass it if your application is configured with more than one MoEngage workspace, and omit it if your application uses a single workspace.`}),`\n`,_jsx(Heading,{level:`3`,id:`using-the-activity-provided-by-the-sdk`,children:`Using the Activity Provided by the SDK`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MoECardComposeActivity`}),` is a complete screen with a toolbar and back navigation. The module manifest already declares it, so launch it directly.`]}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`Kotlin`,wrap:`true`,numberOfLines:`7`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.ui.compose.MoECardComposeActivity`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.core.MOENGAGE_ACCOUNT_IDENTIFIER`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`val`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` intent `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Intent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`this`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, MoECardComposeActivity::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.java)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Pass the extra only if your application is configured with more than one workspace.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`intent.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`putExtra`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(MOENGAGE_ACCOUNT_IDENTIFIER, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"YOUR_WORKSPACE_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`startActivity`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(intent)`})]}),`\n`]})})})}),`\n`,_jsxs(_components.p,{children:[`If the `,_jsx(_components.code,{children:`MOENGAGE_ACCOUNT_IDENTIFIER`}),` extra is absent, the activity uses the default instance.`]}),`\n`,_jsx(Heading,{level:`3`,id:`using-the-composable`,children:`Using the Composable`}),`\n`,_jsxs(_components.p,{children:[`To render the feed inside an existing screen, use `,_jsx(_components.code,{children:`MoECardsScreen()`}),`. It renders the complete feed, including the category tabs.`]}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`Kotlin`,wrap:`true`,numberOfLines:`11`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.ui.compose.MoECardsScreen`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setContent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` ApplicationTheme`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Scaffold`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(topBar `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`ApplicationToolbar`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() }) { paddingValues `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`->`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Box`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(modifier `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Modifier.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`padding`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(paddingValues)) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` MoECardsScreen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(appId `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"YOUR_WORKSPACE_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),`\n`,_jsx(Heading,{level:`3`,id:`rendering-a-single-category`,children:`Rendering a Single Category`}),`\n`,_jsxs(_components.p,{children:[`To render the cards of one category without the tab bar, use `,_jsx(_components.code,{children:`MoECardsList()`}),`.`]}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`Kotlin`,wrap:`true`,numberOfLines:`3`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.ui.compose.MoECardsList`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`MoECardsList`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(category `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Offers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, appId `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"YOUR_WORKSPACE_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})})}),`\n`,_jsx(Heading,{level:`2`,id:`ui-customizations`,children:`UI Customizations`}),`\n`,_jsx(Heading,{level:`3`,id:`colors-and-text-styles`,children:`Colors and Text Styles`}),`\n`,_jsxs(_components.p,{children:[`The feed ships with a set of colors and text styles. Override the colors, the text styles, or both through `,_jsx(_components.code,{children:`MoECardsComposeUiHelper.setTheme()`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MoECardColorsLight`}),` and `,_jsx(_components.code,{children:`MoECardDefaultTextStyles`}),` hold the default values. Copy from them and change only the properties you require, so that the remaining properties keep their defaults.`]}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`Kotlin`,wrap:`true`,numberOfLines:`19`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`19`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.ui.compose.theme.MoECardColorsLight`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.ui.compose.theme.MoECardDefaultTextStyles`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.ui.compose.theme.MoECardsThemeSpec`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.ui.compose.MoECardsComposeUiHelper`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`val`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` colors `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` MoECardColorsLight.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`copy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` background `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Color`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0xFFFFF3E0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` header `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Color`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0xFFBF360C`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` cta `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Color`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0xFF00695C`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`val`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` textStyles `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` MoECardDefaultTextStyles.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`copy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` header `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` MoECardDefaultTextStyles.header.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`copy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(fontSize `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 20`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.sp)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MoECardsComposeUiHelper.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setTheme`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` MoECardsThemeSpec`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(colors `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` colors, textStyles `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` textStyles),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"YOUR_WORKSPACE_ID\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})})}),`\n`,_jsxs(_components.p,{children:[`Set the theme before the feed is rendered, usually in `,_jsx(_components.code,{children:`onCreate()`}),`. The theme applies everywhere the feed is shown, including `,_jsx(_components.code,{children:`MoECardComposeActivity`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Pass `,_jsx(_components.code,{children:`null`}),` to restore the default theme. If the override applies to a single screen, clear it in `,_jsx(_components.code,{children:`onDestroy()`}),` of that screen, because the theme otherwise remains in effect wherever the feed is shown next.`]}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`Kotlin`,wrap:`true`,numberOfLines:`3`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.ui.compose.MoECardsComposeUiHelper`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MoECardsComposeUiHelper.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setTheme`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"YOUR_WORKSPACE_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})})}),`\n`,_jsx(_components.p,{children:`The following color properties are available:`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`background`}),`, `,_jsx(_components.code,{children:`header`}),`, `,_jsx(_components.code,{children:`message`}),`, `,_jsx(_components.code,{children:`timestamp`}),`, `,_jsx(_components.code,{children:`cta`}),`, `,_jsx(_components.code,{children:`unclickedIndicator`}),`, `,_jsx(_components.code,{children:`separator`}),`, `,_jsx(_components.code,{children:`tabBackground`}),`, `,_jsx(_components.code,{children:`tabSelectedText`}),`, `,_jsx(_components.code,{children:`tabUnselectedText`}),`, `,_jsx(_components.code,{children:`newUpdatesText`}),`, `,_jsx(_components.code,{children:`newUpdatesBackground`}),`, `,_jsx(_components.code,{children:`toolbarContent`}),`, `,_jsx(_components.code,{children:`refreshIndicatorBackground`}),`, `,_jsx(_components.code,{children:`refreshIndicatorContent`}),`, and `,_jsx(_components.code,{children:`dialogBackground`}),`.`]}),`\n`,_jsx(_components.p,{children:`The following text style properties are available:`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`header`}),`, `,_jsx(_components.code,{children:`message`}),`, `,_jsx(_components.code,{children:`cta`}),`, `,_jsx(_components.code,{children:`timestamp`}),`, and `,_jsx(_components.code,{children:`tab`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`text-strings`,children:`Text Strings`}),`\n`,_jsxs(_components.p,{children:[`To override any of the text in the feed, declare the same resource name in your application’s `,_jsx(_components.code,{children:`strings.xml`}),` file.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Resource name`}),_jsx(_components.th,{children:`Where it appears`}),_jsx(_components.th,{children:`Default`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`moe_card_feed_title`})}),_jsxs(_components.td,{children:[`The toolbar title in `,_jsx(_components.code,{children:`MoECardComposeActivity`}),`, and the activity label.`]}),_jsx(_components.td,{children:`Inbox`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`moe_card_new_updates`})}),_jsx(_components.td,{children:`The button shown when new cards arrive while the feed is open.`}),_jsx(_components.td,{children:`New Updates`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`moe_card_no_message_available`})}),_jsx(_components.td,{children:`The empty state.`}),_jsx(_components.td,{children:`No notifications to show, check again later.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`moe_card_delete_title`})}),_jsx(_components.td,{children:`The delete option on long press.`}),_jsx(_components.td,{children:`Delete`})]})]})]}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`strings.xml`,wrap:`true`,numberOfLines:`13`,language:`xml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`xml`,children:_jsxs(_components.code,{language:`xml`,numberOfLines:`13`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`resources`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` \u003c!-- Toolbar title in MoECardComposeActivity, and the activity label. Default: Inbox -->`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`string`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"moe_card_feed_title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Notifications`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` \u003c!-- Button shown when new cards arrive while the feed is open. Default: New Updates -->`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`string`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"moe_card_new_updates\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`New messages`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` \u003c!-- Empty state. Default: No notifications to show, check again later. -->`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`string`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"moe_card_no_message_available\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`You are all caught up.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` \u003c!-- Delete option on long press. Default: Delete -->`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`string`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"moe_card_delete_title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Remove`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`resources`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`]})})})}),`\n`,_jsx(Heading,{level:`3`,id:`custom-card-layout`,children:`Custom Card Layout`}),`\n`,_jsx(_components.p,{children:`Replace the card layout entirely while the SDK continues to handle the list, the tabs, pull to refresh, and tracking.`}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`Kotlin`,wrap:`true`,numberOfLines:`8`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.ui.compose.MoECardsComposeUiHelper`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MoECardsComposeUiHelper.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setCardContent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ card, onClick `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`->`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Column`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(modifier `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Modifier.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`clickable`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`onClick`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() }) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Text`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(card.headerText)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` card.messageText?.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`Text`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(it) }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"YOUR_WORKSPACE_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`card`}),` parameter exposes the header, message, CTA text, image URL, timestamp, pinned state, clicked state, and the configured actions.`]}),`\n`,_jsxs(_components.p,{children:[`Pass `,_jsx(_components.code,{children:`null`}),` to restore the default card layout.`]}),`\n`,_jsx(Heading,{level:`2`,id:`callbacks`,children:`Callbacks`}),`\n`,_jsx(Heading,{level:`3`,id:`click-listener`,children:`Click Listener`}),`\n`,_jsx(_components.p,{children:`Tapping a card executes the action configured on the MoEngage dashboard by default. To handle the navigation within your application instead, register a click listener.`}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`Kotlin`,wrap:`true`,numberOfLines:`7`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.ui.compose.MoECardsComposeUiHelper`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MoECardsComposeUiHelper.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setClickListener`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ clickData `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`->`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // clickData.card holds the card that was tapped.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // clickData.navigationAction holds the configured action.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"YOUR_WORKSPACE_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})})}),`\n`,_jsxs(_components.p,{children:[`Return `,_jsx(_components.code,{children:`true`}),` if your application handles the redirection for the card, in which case the SDK does not execute the configured action. Return `,_jsx(_components.code,{children:`false`}),` to let the SDK execute the configured action. The SDK tracks the click in both cases.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Invoke `,_jsx(_components.code,{children:`onClick()`}),` when the user taps the card, so that the SDK tracks the click and executes the configured action.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`sync-callback`,children:`Sync Callback`}),`\n`,_jsxs(_components.p,{children:[`To get a callback when cards are synced on application launch or foreground, implement the `,_jsx(_components.a,{href:`https://moengage.github.io/android-api-reference/cards-core/com.moengage.cards.core.listener/-sync-complete-listener/index.html`,children:_jsx(_components.em,{children:`SyncCompleteListener`})}),` interface and register it using `,_jsx(_components.a,{href:`https://moengage.github.io/android-api-reference/cards-core/com.moengage.cards.core/-mo-e-card-helper/set-sync-complete-listener.html`,children:_jsx(_components.em,{children:`MoECardHelper.setSyncCompleteListener()`})}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`images-and-gifs`,children:`Images and GIFs`}),`\n`,_jsx(_components.p,{children:`The module renders static card images without additional setup. On Android 9 and above, it also renders animated GIFs without additional setup.`}),`\n`,_jsx(_components.p,{children:`To render animated GIFs on earlier Android versions, or to use an image loading library that your application already includes, add either Coil or Glide. The SDK is compiled against Coil 3.5.0 and Glide 5.0.7. Use these versions or higher.`}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Coil`,wrap:`true`,numberOfLines:`5`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`dependencies`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` implementation`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"io.coil-kt.coil3:coil-compose:3.5.0\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` implementation`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"io.coil-kt.coil3:coil-network-okhttp:3.5.0\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` implementation`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"io.coil-kt.coil3:coil-gif:3.5.0\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Required for animated GIFs.`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Glide`,wrap:`true`,numberOfLines:`3`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`dependencies`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` implementation`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"com.github.bumptech.glide:glide:5.0.7\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`coil-network-okhttp`}),` is required alongside `,_jsx(_components.code,{children:`coil-compose`}),`, because Coil 3 does not load images over the network without it.`]}),`\n`,_jsx(_components.p,{children:`No further configuration is required. The SDK detects the available library at runtime and uses it.`}),`\n`,_jsx(Heading,{level:`2`,id:`card-count-apis`,children:`Card Count APIs`}),`\n`,_jsx(_components.p,{children:`Use these APIs to read the number of cards the user has not clicked and the number of new cards on the device.`}),`\n`,_jsx(Heading,{level:`2`,id:`unclicked-count`,children:`Unclicked Count`}),`\n`,_jsx(_components.p,{children:`The SDK provides an API to fetch the number of cards which hasn’t been clicked by the users. To get the count, you can use the below APIs.`}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Kotlin`,wrap:`true`,numberOfLines:`6`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.core.MoECardHelper`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Call this API on worker thread as it reads from a file.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MoECardHelper.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getUnClickedCardCount`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(context)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// This API returns the count asynchronously in the listener passed as a parameter.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MoECardHelper.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getUnClickedCardCountAsync`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(context, listener)`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`Java`,numberOfLines:`6`,language:`java`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`java`,children:_jsxs(_components.code,{language:`java`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.core.MoECardHelper;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Call this API on worker thread as it reads from a file.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`MoECardHelper`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`INSTANCE`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getUnClickedCardCount`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(context);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// This API returns the count asynchronously in the listener passed as a parameter.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`MoECardHelper`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`INSTANCE`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getUnClickedCardCountAsync`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(context, listener);`})]}),`\n`]})})})]}),`\n`,_jsxs(_components.p,{children:[`Refer to the documentation of `,_jsx(_components.a,{href:`https://moengage.github.io/android-api-reference/cards-core/com.moengage.cards.core/-mo-e-card-helper/get-un-clicked-card-count.html`,children:_jsx(_components.em,{children:`MoECardHelper.getUnClickedCardCount()`})}),` and `,_jsx(_components.a,{href:`https://moengage.github.io/android-api-reference/cards-core/com.moengage.cards.core/-mo-e-card-helper/get-un-clicked-card-count-async.html`,children:_jsx(_components.em,{children:`MoECardHelper.getUnClickedCardCountAsync()`})}),` for more information.`]}),`\n`,_jsx(Heading,{level:`2`,id:`new-card-count`,children:`New Card Count`}),`\n`,_jsx(_components.p,{children:`The SDK provides an API to get the new cards for the user on the device. To get the count, use the below API.`}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Kotlin`,wrap:`true`,numberOfLines:`6`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.core.MoECardHelper`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Call this API on worker thread as it reads from a file.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MoECardHelper.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getNewCardCount`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(context)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// This API returns the count asynchronously in the listener passed as a parameter.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MoECardHelper.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getNewCardCountAsync`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(context, listener)`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`Java`,numberOfLines:`6`,language:`java`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`java`,children:_jsxs(_components.code,{language:`java`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` com.moengage.cards.core.MoECardHelper;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Call this API on worker thread as it reads from a file.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`MoECardHelper`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`INSTANCE`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getNewCardCount`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(context);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// This API returns the count asynchronously in the listener passed as a parameter.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`MoECardHelper`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`INSTANCE`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getNewCardCountAsync`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(context, listener);`})]}),`\n`]})})})]}),`\n`,_jsxs(_components.p,{children:[`Refer to the documentation of `,_jsx(_components.a,{href:`https://moengage.github.io/android-api-reference/cards-core/com.moengage.cards.core/-mo-e-card-helper/get-new-card-count-async.html`,children:_jsx(_components.em,{children:`MoECardHelper.getNewCardCount()`})}),`and `,_jsx(_components.a,{href:`https://moengage.github.io/android-api-reference/cards-core/com.moengage.cards.core/-mo-e-card-helper/get-new-card-count-async.html`,children:_jsx(_components.em,{children:`MoECardHelper.getNewCardCountAsync()`})}),` for more information.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Cards in Jetpack Compose","description":"Embed the MoEngage Cards feed in a Jetpack Compose user interface using the cards-ui-compose module.","keywords":["Jetpack Compose Cards","cards-ui-compose","MoECardsScreen","MoECardsComposeUiHelper","Android Compose App Inbox","MoECardComposeActivity"],"href":"/developer-guide/android-sdk/cards/cards-ui-compose"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"SDK Installation","slug":"sdk-installation","depth":2,"children":[{"title":"Install Using BOM","slug":"install-using-bom","depth":3,"children":[]},{"title":"Enable Jetpack Compose","slug":"enable-jetpack-compose","depth":3,"children":[]}]},{"title":"Adding the UI Component","slug":"adding-the-ui-component","depth":2,"children":[{"title":"Using the Activity Provided by the SDK","slug":"using-the-activity-provided-by-the-sdk","depth":3,"children":[]},{"title":"Using the Composable","slug":"using-the-composable","depth":3,"children":[]},{"title":"Rendering a Single Category","slug":"rendering-a-single-category","depth":3,"children":[]}]},{"title":"UI Customizations","slug":"ui-customizations","depth":2,"children":[{"title":"Colors and Text Styles","slug":"colors-and-text-styles","depth":3,"children":[]},{"title":"Text Strings","slug":"text-strings","depth":3,"children":[]},{"title":"Custom Card Layout","slug":"custom-card-layout","depth":3,"children":[]}]},{"title":"Callbacks","slug":"callbacks","depth":2,"children":[{"title":"Click Listener","slug":"click-listener","depth":3,"children":[]},{"title":"Sync Callback","slug":"sync-callback","depth":3,"children":[]}]},{"title":"Images and GIFs","slug":"images-and-gifs","depth":2,"children":[]},{"title":"Card Count APIs","slug":"card-count-apis","depth":2,"children":[]},{"title":"Unclicked Count","slug":"unclicked-count","depth":2,"children":[]},{"title":"New Card Count","slug":"new-card-count","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/moengage/992523b3cb2256cd/script.js"],"subdomain":"moengage","siteName":"MoEngage","title":"Cards in Jetpack Compose - MoEngage","relatedPagesConfig":{"enabled":false,"limit":3,"mode":"manual"},"contextualStarterQuestions":[{"_id":"6ab3954de11f853a56300928","deploymentId":"68bea8f8fe02728a34cf2acf","questionText":"How do I add cards-ui-compose?","status":"active","generatedBy":"contextual","path":"developer-guide/android-sdk/cards/cards-ui-compose","createdAt":"2026-09-23T09:01:01.680Z","updatedAt":"2026-09-23T09:01:01.680Z","__v":0},{"_id":"6ab3954de11f853a5630092a","deploymentId":"68bea8f8fe02728a34cf2acf","questionText":"How do I integrate the card feed?","status":"active","generatedBy":"contextual","path":"developer-guide/android-sdk/cards/cards-ui-compose","createdAt":"2026-09-23T09:01:01.680Z","updatedAt":"2026-09-23T09:01:01.680Z","__v":0},{"_id":"6ab3954de11f853a56300929","deploymentId":"68bea8f8fe02728a34cf2acf","questionText":"What Compose setup is needed?","status":"active","generatedBy":"contextual","path":"developer-guide/android-sdk/cards/cards-ui-compose","createdAt":"2026-09-23T09:01:01.680Z","updatedAt":"2026-09-23T09:01:01.680Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/developer-guide/android-sdk/cards/cards-ui-compose","matchLevel":0},"ja":{"href":"/ja/developer-guide/android-sdk/cards/cards-ui-compose","matchLevel":1}}},"lastModified":"2026-09-23T08:59:18.500Z","originalFileLocation":"developer-guide/android-sdk/cards/cards-ui-compose.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Embed the MoEngage Cards feed in a Jetpack Compose user interface using the cards-ui-compose module.\">\u003cmeta data-mint-head name=\"application-name\" content=\"MoEngage\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/moengage/FFhO5ttvrbE72kxs/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/moengage/FFhO5ttvrbE72kxs/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/moengage/FFhO5ttvrbE72kxs/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/moengage/FFhO5ttvrbE72kxs/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/moengage/FFhO5ttvrbE72kxs/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/moengage/FFhO5ttvrbE72kxs/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/moengage/FFhO5ttvrbE72kxs/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/moengage/FFhO5ttvrbE72kxs/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/moengage/FFhO5ttvrbE72kxs/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Cards in Jetpack Compose - MoEngage\">\u003cmeta data-mint-head property=\"og:description\" content=\"Embed the MoEngage Cards feed in a Jetpack Compose user interface using the cards-ui-compose module.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"MoEngage\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://moengage.mintlify.site/docs/_mintlify/api/og/v2?division=Cards\u0026amp;title=Cards+in+Jetpack+Compose\u0026amp;description=Embed+the+MoEngage+Cards+feed+in+a+Jetpack+Compose+user+interface+using+the+cards-ui-compose+module.\u0026amp;theme=f5f8670d2a6207083c52605d\u0026amp;signature=85bf660b4177ecf3538fb67b75b04122a3ba3c02de5812faa2db914198ff589b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Cards in Jetpack Compose - MoEngage\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Embed the MoEngage Cards feed in a Jetpack Compose user interface using the cards-ui-compose module.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://moengage.mintlify.site/docs/_mintlify/api/og/v2?division=Cards\u0026amp;title=Cards+in+Jetpack+Compose\u0026amp;description=Embed+the+MoEngage+Cards+feed+in+a+Jetpack+Compose+user+interface+using+the+cards-ui-compose+module.\u0026amp;theme=f5f8670d2a6207083c52605d\u0026amp;signature=85bf660b4177ecf3538fb67b75b04122a3ba3c02de5812faa2db914198ff589b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/moengage/FFhO5ttvrbE72kxs/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"MoEngage\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2E69FF\">\u003cmeta data-mint-head name=\"google-site-verification\" content=\"ICNaPDX9oefbF09W1b5_U9PDnlkyfyKSRbIap6_dW6o\">\u003clink data-mint-head rel=\"canonical\" href=\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/developer-guide/android-sdk/cards/cards-ui-compose.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://moengage.com/docs/ja/developer-guide/android-sdk/cards/cards-ui-compose\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://moengage.com/#organization\",\"name\":\"MoEngage\",\"url\":\"https://moengage.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/moengage/VG5pJbeZsDUmdCZM/logo/light.svg?fit=max\u0026auto=format\u0026n=VG5pJbeZsDUmdCZM\u0026q=85\u0026s=28ca5909311cb6ffe01738e1503b5e64\"}},{\"@type\":\"WebSite\",\"@id\":\"https://moengage.com/docs#website\",\"name\":\"MoEngage\",\"url\":\"https://moengage.com/docs\",\"publisher\":{\"@id\":\"https://moengage.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose#webpage\",\"url\":\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose\",\"name\":\"Cards in Jetpack Compose\",\"description\":\"Embed the MoEngage Cards feed in a Jetpack Compose user interface using the cards-ui-compose module.\",\"dateModified\":\"2026-09-23T08:59:18.500Z\",\"isPartOf\":{\"@id\":\"https://moengage.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"SDKs\",\"item\":\"https://moengage.com/docs/developer-guide/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android SDK\",\"item\":\"https://moengage.com/docs/developer-guide/android-sdk/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cards\",\"item\":\"https://moengage.com/docs/developer-guide/android-sdk/cards/overview\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Cards in Jetpack Compose\",\"item\":\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose#article\",\"headline\":\"Cards in Jetpack Compose\",\"name\":\"Cards in Jetpack Compose\",\"description\":\"Embed the MoEngage Cards feed in a Jetpack Compose user interface using the cards-ui-compose module.\",\"url\":\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose\",\"mainEntityOfPage\":{\"@id\":\"https://moengage.com/docs/developer-guide/android-sdk/cards/cards-ui-compose#webpage\"},\"dateModified\":\"2026-09-23T08:59:18.500Z\",\"keywords\":\"Jetpack Compose Cards, cards-ui-compose, MoECardsScreen, MoECardsComposeUiHelper, Android Compose App Inbox, MoECardComposeActivity\",\"publisher\":{\"@id\":\"https://moengage.com/#organization\"},\"isPartOf\":{\"@id\":\"https://moengage.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"MoEngage\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"MoEngage\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/developer-guide/android-sdk/cards/cards-ui-compose.md","siteName":"MoEngage","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Home","pages":[{"title":"Home","href":""}]},{"tab":"User Guide","pages":[{"title":"User Guide","href":"/user-guide/introduction"}]},{"tab":"Developer Guide (SDKs)","groups":[{"group":"SDKs","pages":[{"title":"SDK Integration Guide","href":"/developer-guide/introduction"},{"title":"Connect Your IDE to MoEngage Docs","href":"/developer-guide/connect-your-ide-to-moengage-docs"},{"group":"iOS SDK","root":{"title":"MoEngage iOS SDK","href":"/developer-guide/ios-sdk/overview"},"pages":[{"group":"SDK Integration","root":{"title":"Integrating the iOS SDK","href":"/developer-guide/ios-sdk/sdk-integration/overview"},"pages":[{"group":"Basic","pages":[{"title":"SDK Integration","href":"/developer-guide/ios-sdk/sdk-integration/basic/sdk-integration"},{"title":"SDK Initialization","href":"/developer-guide/ios-sdk/sdk-integration/basic/sdk-initialization"},{"title":"Data Center","href":"/developer-guide/ios-sdk/sdk-integration/basic/data-center"},{"title":"Configuring Project for Architecture Compatibility","href":"/developer-guide/ios-sdk/sdk-integration/basic/Configuring-Project-for-Architecture-Compatibility"},{"title":"Integration through CocoaPods","href":"/developer-guide/ios-sdk/sdk-integration/basic/integration-through-cocoa-pods"}]},{"group":"Advanced","pages":[{"title":"Custom Proxy Domain - iOS","href":"/developer-guide/ios-sdk/sdk-integration/advanced/custom-proxy-domain-ios"},{"title":"JWT Authentication","href":"/developer-guide/ios-sdk/sdk-integration/advanced/jwt-authentication"},{"title":"Add-On Security","href":"/developer-guide/ios-sdk/sdk-integration/advanced/add-on-security"}]}]},{"group":"Data Tracking","root":{"title":"Data Tracking in iOS","href":"/developer-guide/ios-sdk/data-tracking/overview"},"pages":[{"group":"Basic","pages":[{"title":"Install/Update differentiation","href":"/developer-guide/ios-sdk/data-tracking/basic/install-update-differentiation"},{"title":"Tracking user attributes","href":"/developer-guide/ios-sdk/data-tracking/basic/tracking-user-attributes"},{"title":"Setting Unique Id for SDK versions below 9.23.0","href":"/developer-guide/ios-sdk/data-tracking/basic/setting-unique-id-for-sdk-versions-below-9-23-0"},{"title":"Tracking events","href":"/developer-guide/ios-sdk/data-tracking/basic/tracking-events"}]},{"group":"Advanced","pages":[{"title":"Tracking Locale","href":"/developer-guide/ios-sdk/data-tracking/advanced/tracking-locale"},{"title":"Session and Source Tracking","href":"/developer-guide/ios-sdk/data-tracking/advanced/session-and-source-tracking"},{"title":"Personalize Experience Events tracking","href":"/developer-guide/ios-sdk/data-tracking/advanced/personalize-experience-events-tracking"}]}]},{"group":"Push","root":{"title":"Push Notifications in iOS","href":"/developer-guide/ios-sdk/push/overview"},"pages":[{"group":"Basic","pages":[{"title":"iOS Push Integration Tutorial","href":"/developer-guide/ios-sdk/push/basic/ios-push-integration-tutorial"},{"title":"Push Notifications","href":"/developer-guide/ios-sdk/push/basic/push-notifications"},{"title":"APNS Authentication Key","href":"/developer-guide/ios-sdk/push/basic/apns-authentication-key"},{"title":"APNS Certificate/PEM file (legacy)","href":"/developer-guide/ios-sdk/push/basic/apns-certificate-pem-file-legacy"},{"title":"Actionable Notifications","href":"/developer-guide/ios-sdk/push/basic/actionable-notifications"}]},{"group":"Optional","pages":[{"title":"Transactional Live Activity","href":"/developer-guide/ios-sdk/push/optional/transactional-live-activity"},{"title":"Broadcast Live Activity","href":"/developer-guide/ios-sdk/push/optional/broadcast-live-activity"},{"title":"Push templates","href":"/developer-guide/ios-sdk/push/optional/push-templates"},{"title":"Push Handled by Application","href":"/developer-guide/ios-sdk/push/optional/push-handled-by-application"},{"title":"Real-Time Triggers","href":"/developer-guide/ios-sdk/push/optional/real-time-triggers"},{"title":"iOS Notification Center","href":"/developer-guide/ios-sdk/push/optional/i-os-notification-center"},{"title":"Location triggered","href":"/developer-guide/ios-sdk/push/optional/location-triggered"}]},{"group":"Advanced","pages":[{"title":"Custom Notification Handling","href":"/developer-guide/ios-sdk/push/advanced/custom-notification-handling"}]}]},{"group":"In-App Messages","root":{"title":"In-App Messages in iOS","href":"/developer-guide/ios-sdk/in-app-messages/overview"},"pages":[{"title":"In-App Nativ","href":"/developer-guide/ios-sdk/in-app-messages/in-app-nativ"},{"title":"Custom Action Handling","href":"/developer-guide/ios-sdk/in-app-messages/custom-action-handling"}]},{"title":"Personalize SDK","sidebarTitle":"Personalize","href":"/developer-guide/ios-sdk/personalize/personalize-sdk"},{"title":"Recommendations","href":"/developer-guide/ios-sdk/recommendations/recommendations"},{"group":"Cards","root":{"title":"Card Campaigns in iOS","href":"/developer-guide/ios-sdk/cards/overview"},"pages":[{"title":"Cards in iOS","href":"/developer-guide/ios-sdk/cards/cards-in-i-os"},{"title":"Self Handled Cards","href":"/developer-guide/ios-sdk/cards/self-handled-cards"}]},{"title":"Release Checklist","href":"/developer-guide/ios-sdk/checklist/release-checklist"},{"title":"Compliance","href":"/developer-guide/ios-sdk/compliance/compliance"},{"title":"Manual Integration","href":"/developer-guide/ios-sdk/manual-integration/manual-integration"},{"title":"iOS SDK Deprecated Versions","sidebarTitle":"Deprecated Versions","href":"/developer-guide/ios-sdk/deprecated-versions/deprecated-versions"},{"group":"Migration","root":{"title":"iOS SDK Migration","href":"/developer-guide/ios-sdk/migration/overview"},"pages":[{"title":"Migration to SDK version 9.0.0","href":"/developer-guide/ios-sdk/migration/migration-to-sdk-version-9-0-0"},{"title":"Migration to SDK version 8.2.0","href":"/developer-guide/ios-sdk/migration/migration-to-sdk-version-8-2-0"},{"title":"Migration to SDK version 7.0.0","href":"/developer-guide/ios-sdk/migration/migration-to-sdk-version-7-0-0"},{"title":"Migration to SDK version 6.0.0","href":"/developer-guide/ios-sdk/migration/migration-to-sdk-version-6-0-0"},{"title":"Migration Of MoEngage SDK From Cocoapods To SPM","href":"/developer-guide/ios-sdk/migration/migration-of-moengage-sdk-from-cocoapods-to-spm"}]},{"title":"Framework Impact","href":"/developer-guide/ios-sdk/framework-size-impact/framework-size-impact"},{"title":"iOS 15","sidebarTitle":"OS Updates","href":"/developer-guide/ios-sdk/os-updates/i-os-15"},{"title":"Apple TV","href":"/developer-guide/ios-sdk/apple-tv/apple-tv"},{"title":"Troubleshooting and FAQs - iOS SDK","sidebarTitle":"Troubleshooting and FAQs","href":"/developer-guide/ios-sdk/troubleshooting-and-faqs/troubleshooting-and-faqs-ios"},{"title":"iOS Sample App","sidebarTitle":"Sample App","href":"/developer-guide/ios-sdk/sample-app/i-os-sample-app"}]},{"group":"Android SDK","root":{"title":"MoEngage Android SDK","href":"/developer-guide/android-sdk/overview"},"pages":[{"group":"SDK Integration","root":{"title":"Integrating the Android SDK","href":"/developer-guide/android-sdk/sdk-integration/overview"},"pages":[{"group":"Basic Integration","pages":[{"title":"Install Using BOM","href":"/developer-guide/android-sdk/sdk-integration/basic-integration/Install-Using-BOM"},{"title":"Configuring Build Settings","href":"/developer-guide/android-sdk/sdk-integration/basic-integration/configuring-build-settings"},{"title":"SDK Initialization","href":"/developer-guide/android-sdk/sdk-integration/basic-integration/sdk-initialization"},{"title":"Exclude MoEngage Storage File from Auto-Backup","href":"/developer-guide/android-sdk/sdk-integration/basic-integration/exclude-mo-engage-storage-file-from-auto-backup"}]},{"group":"Advanced or Optional","pages":[{"title":"Custom Proxy Domain - Android","href":"/developer-guide/android-sdk/sdk-integration/advanced-or-optional/custom-proxy-domain-android"},{"title":"JWT Authentication","href":"/developer-guide/android-sdk/sdk-integration/advanced-or-optional/jwt-authentication"},{"title":"Installing SDK using Artifact Id","href":"/developer-guide/android-sdk/sdk-integration/advanced-or-optional/installing-sdk-using-artifact-id"},{"title":"Network Security Configuration","href":"/developer-guide/android-sdk/sdk-integration/advanced-or-optional/network-security-configuration"},{"title":"Add-On Security","href":"/developer-guide/android-sdk/sdk-integration/advanced-or-optional/add-on-security"},{"title":"SDK Build Specifications","href":"/developer-guide/android-sdk/sdk-integration/advanced-or-optional/sdk-configuration"}]}]},{"group":"Data Tracking","root":{"title":"Data Tracking in Android","href":"/developer-guide/android-sdk/data-tracking/overview"},"pages":[{"group":"Basic","pages":[{"title":"Enable Advertising Identifier Tracking","href":"/developer-guide/android-sdk/data-tracking/basic/enable-advertising-identifier-tracking"},{"title":"Track Install or Update","href":"/developer-guide/android-sdk/data-tracking/basic/track-install-or-update"},{"title":"Track User Attributes","href":"/developer-guide/android-sdk/data-tracking/basic/track-user-attributes"},{"title":"Setting Unique Id for SDK versions below 13.6.00","href":"/developer-guide/android-sdk/data-tracking/basic/setting-unique-id-for-sdk-versions-below-13-6-00"},{"title":"Track Events","href":"/developer-guide/android-sdk/data-tracking/basic/track-events"}]},{"group":"Advanced or Optional","pages":[{"title":"Tracking Locale","href":"/developer-guide/android-sdk/data-tracking/advanced-or-optional/tracking-locale"},{"title":"Configuring Opt-outs","href":"/developer-guide/android-sdk/data-tracking/advanced-or-optional/configuring-opt-outs"},{"title":"Device Identifier Tracking","href":"/developer-guide/android-sdk/data-tracking/advanced-or-optional/device-identifier-tracking"},{"title":"Personalize Experience Events Tracking","href":"/developer-guide/android-sdk/data-tracking/advanced-or-optional/personalize-experience-events-tracking"}]}]},{"group":"Push","root":{"title":"Push Notifications in Android","href":"/developer-guide/android-sdk/push/overview"},"pages":[{"group":"Basic","pages":[{"title":"Push Configuration","href":"/developer-guide/android-sdk/push/basic/push-configuration"},{"title":"FCM Authentication","href":"/developer-guide/android-sdk/push/basic/fcm-authentication"},{"title":"Notification Runtime Permissions","href":"/developer-guide/android-sdk/push/basic/notification-runtime-permissions"},{"title":"Push Token Registration and Display","href":"/developer-guide/android-sdk/push/basic/push-token-registration-and-display"},{"title":"Push Token Registration and Display (Legacy)","href":"/developer-guide/android-sdk/push/basic/push-token-registration-and-display-legacy"}]},{"group":"Advanced","pages":[{"title":"Callbacks and Customisation","href":"/developer-guide/android-sdk/push/advanced/callbacks-and-customisation"},{"title":"Push Display Handled by Application","href":"/developer-guide/android-sdk/push/advanced/push-display-handled-by-application"}]},{"group":"Optional","pages":[{"group":"Push AMP+","pages":[{"title":"Push AMP Plus Integration","href":"/developer-guide/android-sdk/push/optional/push-amp-plus/push-amp-plus-integration"},{"title":"Steps to Remove Mi SDK Dependency","href":"/developer-guide/android-sdk/push/optional/push-amp-plus/steps-to-remove-mi-sdk-dependency"},{"title":"Configuring HMS Push Kit","href":"/developer-guide/android-sdk/push/optional/push-amp-plus/configuring-hms-push-kit"},{"title":"Configuring Huawei Push on MoEngage","href":"/developer-guide/android-sdk/push/optional/push-amp-plus/configuring-huawei-push-on-mo-engage"}]},{"title":"Push Amplification","href":"/developer-guide/android-sdk/push/optional/push-amplification"},{"title":"Device Triggered","href":"/developer-guide/android-sdk/push/optional/device-triggered"},{"title":"Location Triggered","href":"/developer-guide/android-sdk/push/optional/location-triggered"},{"title":"Notification Center","href":"/developer-guide/android-sdk/push/optional/notification-center"},{"title":"Push Templates","href":"/developer-guide/android-sdk/push/optional/push-templates"},{"title":"Heads Up Notification","href":"/developer-guide/android-sdk/push/optional/heads-up-notification"}]}]},{"title":"In-App NATIV","sidebarTitle":"In-App Messages","href":"/developer-guide/android-sdk/in-app-messages/in-app-nativ"},{"title":"Personalize SDK","sidebarTitle":"Personalize","href":"/developer-guide/android-sdk/personalize/personalize-sdk"},{"title":"Recommendations","href":"/developer-guide/android-sdk/recommendations/recommendations"},{"group":"Cards","root":{"title":"Card Campaigns in Android","href":"/developer-guide/android-sdk/cards/overview"},"pages":[{"title":"Cards","description":"Set up MoEngage Cards to deliver persistent inbox and newsfeed messages to your Android app users.","href":"/developer-guide/android-sdk/cards/cards"},{"title":"Cards in Jetpack Compose","href":"/developer-guide/android-sdk/cards/cards-ui-compose"},{"title":"Self Handled Cards","description":"Build custom card views in your Android app using the MoEngage self-handled Cards SDK.","href":"/developer-guide/android-sdk/cards/self-handled-cards"}]},{"title":"Release Checklist","href":"/developer-guide/android-sdk/checklist/release-checklist"},{"group":"Compliance","root":{"title":"Android Data Disclosure and Consent","href":"/developer-guide/android-sdk/compliance/overview"},"pages":[{"title":"Prepare for Google Play's data disclosure requirements","href":"/developer-guide/android-sdk/compliance/prepare-for-google-plays-data-disclosure-requirements"},{"title":"Compliance","href":"/developer-guide/android-sdk/compliance/compliance"}]},{"title":"Android SDK Deprecated Versions","sidebarTitle":"Deprecated Versions","href":"/developer-guide/android-sdk/deprecated-versions/deprecated-versions"},{"group":"Migration","root":{"title":"Android SDK Migration","href":"/developer-guide/android-sdk/migration/overview"},"pages":[{"title":"Migrating to Firebase Installation ID","href":"/developer-guide/android-sdk/migration/migrating-to-firebase-installation-id"},{"title":"Updating to 12.x.xx from 11.x.xx","href":"/developer-guide/android-sdk/migration/updating-to-12xxx-from-11xxx"},{"title":"Updating to 11.x.xx from 10.x.xx","href":"/developer-guide/android-sdk/migration/updating-to-11xxx-from-10xxx"},{"title":"Migration to 10.x.xx","href":"/developer-guide/android-sdk/migration/migration-to-10xxx"},{"title":"Migration from 4.x to 5.x (One time activity)","href":"/developer-guide/android-sdk/migration/migration-from-4x-to-5x-one-time-activity"},{"title":"Moving from Manifest to Code based Integration","href":"/developer-guide/android-sdk/migration/moving-from-manifest-to-code-based-integration"},{"title":"Migration To Maven Central","href":"/developer-guide/android-sdk/migration/migration-to-maven-central"},{"title":"Migrating from addon-inbox 6.0.2","href":"/developer-guide/android-sdk/migration/migrating-from-addon-inbox-602"}]},{"title":"Android 12","sidebarTitle":"OS Updates","href":"/developer-guide/android-sdk/os-updates/android-12"},{"title":"Android TV","href":"/developer-guide/android-sdk/android-tv/android-tv"},{"group":"Performance","root":{"title":"Android SDK Performance and Size","href":"/developer-guide/android-sdk/performance/overview"},"pages":[{"title":"SDK Performance","href":"/developer-guide/android-sdk/performance/sdk-performance"},{"title":"SDK Size Impact","href":"/developer-guide/android-sdk/performance/sdk-size-impact"}]},{"group":"Troubleshooting and FAQs","root":{"title":"Android Troubleshooting and FAQs","href":"/developer-guide/android-sdk/troubleshooting-and-faqs/overview"},"pages":[{"title":"How To Use the MoEngage SDK Logger?","href":"/developer-guide/android-sdk/troubleshooting-and-faqs/how-to-use-the-moengage-sdk-logger"},{"title":"What Are the Scenarios Where the SDK Logger Is Not Usable?","href":"/developer-guide/android-sdk/troubleshooting-and-faqs/what-are-the-scenarios-where-the-sdk-logger-is-not-usable"},{"title":"Troubleshooting and FAQs","href":"/developer-guide/android-sdk/troubleshooting-and-faqs/troubleshooting-and-faqs"},{"title":"Troubleshooting Push Redirection","href":"/developer-guide/android-sdk/troubleshooting-and-faqs/troubleshooting-push-redirection"},{"title":"Troubleshooting Images","href":"/developer-guide/android-sdk/troubleshooting-and-faqs/troubleshooting-images"},{"title":"Troubleshooting In-App","href":"/developer-guide/android-sdk/troubleshooting-and-faqs/troubleshooting-in-app"},{"title":"Troubleshooting Exceptions","href":"/developer-guide/android-sdk/troubleshooting-and-faqs/troubleshooting-exceptions"},{"title":"How to Fix Installation ID Drop?","href":"/developer-guide/android-sdk/troubleshooting-and-faqs/how-to-fix-installation-id-drop"},{"title":"How to fix Token Drop? (Legacy)","href":"/developer-guide/android-sdk/troubleshooting-and-faqs/how-to-fix-token-drop"},{"title":"How to share Android MoEngage SDK logs","href":"/developer-guide/android-sdk/troubleshooting-and-faqs/how-to-share-android-moengage-sdk-logs"}]},{"title":"Android Sample App","sidebarTitle":"Sample App","href":"/developer-guide/android-sdk/sample-app/android-sample-app"}]},{"group":"Web SDK","root":{"title":"MoEngage Web SDK","href":"/developer-guide/web-sdk/overview"},"pages":[{"group":"Web SDK Overview","root":{"title":"Web SDK Overview","href":"/developer-guide/web-sdk/web-sdk-overview/web-sdk-overview"},"pages":[{"title":"Web-SDK Browser Compatibility Matrix","href":"/developer-guide/web-sdk/web-sdk-overview/web-sdk-browser-compatibility-matrix"}]},{"group":"Web SDK Integration","root":{"title":"Integrating the Web SDK","href":"/developer-guide/web-sdk/web-sdk-integration/overview"},"pages":[{"group":"Basic Integration","pages":[{"title":"Web SDK Integration","href":"/developer-guide/web-sdk/web-sdk-integration/basic-integration/web-sdk-integration"}]},{"group":"Advanced Integration","pages":[{"title":"Content Security Policy (CSP) Nonce Support","href":"/developer-guide/web-sdk/web-sdk-integration/advanced-integration/content-security-policy-csp-nonce-support"},{"title":"Debugging Mode","href":"/developer-guide/web-sdk/web-sdk-integration/advanced-integration/debugging-mode"},{"title":"Cookies used by Web SDK","href":"/developer-guide/web-sdk/web-sdk-integration/advanced-integration/cookies-used-by-web-sdk"},{"title":"Web SDK Lifecycle Callbacks","href":"/developer-guide/web-sdk/web-sdk-integration/advanced-integration/web-sdk-lifecycle-callbacks"},{"title":"Custom Proxy Domain - Web","href":"/developer-guide/web-sdk/web-sdk-integration/advanced-integration/custom-proxy-domain-web"},{"title":"Bot Traffic Blocking","href":"/developer-guide/web-sdk/web-sdk-integration/advanced-integration/bot-traffic-blocking"},{"title":"Web SDK Opt-out","href":"/developer-guide/web-sdk/web-sdk-integration/advanced-integration/web-sdk-opt-out"}]},{"group":"Optional","pages":[{"title":"Native Browser API Support","href":"/developer-guide/web-sdk/web-sdk-integration/optional-integration/native-browser-api-support"}]}]},{"group":"Data Tracking","root":{"title":"Data Tracking on the Web","href":"/developer-guide/web-sdk/data-tracking/overview"},"pages":[{"title":"Web SDK Data Tracking Introduction","href":"/developer-guide/web-sdk/data-tracking/web-sdk-data-tracking-introduction"},{"title":"Setting Unique Id for SDK versions below 2.52.2","href":"/developer-guide/web-sdk/data-tracking/setting-unique-id-for-sdk-versions-below-2-52-2"},{"title":"Web SDK User Attributes Tracking","href":"/developer-guide/web-sdk/data-tracking/web-sdk-user-attributes-tracking"},{"title":"Web SDK Events Tracking","href":"/developer-guide/web-sdk/data-tracking/web-sdk-events-tracking"},{"title":"Configure Data opt-out in Web SDK","href":"/developer-guide/web-sdk/data-tracking/configure-data-opt-out-in-web-sdk"}]},{"group":"Web Push","root":{"title":"Web Push Notifications","href":"/developer-guide/web-sdk/web-push/overview"},"pages":[{"title":"Web Push Overview","href":"/developer-guide/web-sdk/web-push/web-push-overview"},{"title":"Safari Web Push for iOS and iPadOS","href":"/developer-guide/web-sdk/web-push/safari-web-push-for-i-os-and-i-pad-os"},{"title":"Configure and Integrate Web Push","href":"/developer-guide/web-sdk/web-push/configure-and-integrate-web-push"},{"title":"Configure Self-Handled Opt-In","href":"/developer-guide/web-sdk/web-push/configure-self-handled-opt-in"},{"title":"Opted Out Users","href":"/developer-guide/web-sdk/web-push/opted-out-users"}]},{"group":"Onsite Messaging","root":{"title":"On-Site Messaging","href":"/developer-guide/web-sdk/onsite-messaging/overview"},"pages":[{"title":"Configure and Integrate On-site Messaging","href":"/developer-guide/web-sdk/onsite-messaging/configure-and-integrate-on-site-messaging"},{"title":"Self Handled On-Site Messaging","href":"/developer-guide/web-sdk/onsite-messaging/self-handled-on-site-messaging"}]},{"group":"Cards","root":{"title":"Card Campaigns on the Web","href":"/developer-guide/web-sdk/cards/overview"},"pages":[{"title":"Cards","href":"/developer-guide/web-sdk/cards/cards"},{"title":"Self Handled Cards","href":"/developer-guide/web-sdk/cards/self-handled-cards"}]},{"title":"MoEngage Assist Chrome Extension","sidebarTitle":"Integration Validation","href":"/developer-guide/web-sdk/integration-validation/moengage-assist-chrome-extension"},{"title":"Web SDK Deprecated Versions","sidebarTitle":"Deprecated Versions","href":"/developer-guide/web-sdk/deprecated-versions/deprecated-versions"},{"title":"Standardizing Web SDK APIs for Cross-Platform Consistency","sidebarTitle":"Migration","href":"/developer-guide/web-sdk/migration/standardizing-web-sdk-apis-for-cross-platform-consistency"},{"group":"Other Supported Web SDK Integration","root":{"title":"Other Web SDK Integrations","href":"/developer-guide/web-sdk/other-supported-web-sdk-integration/overview"},"pages":[{"title":"User Login in AMP (Older Process)","href":"/developer-guide/web-sdk/other-supported-web-sdk-integration/user-login-in-amp-older-process"},{"title":"WebView - WebSDK Support","href":"/developer-guide/web-sdk/other-supported-web-sdk-integration/web-view-web-sdk-support"},{"title":"SDK Support for Browser Extensions","href":"/developer-guide/web-sdk/other-supported-web-sdk-integration/sdk-support-for-browser-extensions"},{"title":"Google Tag Manager (GTM) Templates","href":"/developer-guide/web-sdk/other-supported-web-sdk-integration/google-tag-manager-gtm-templates"},{"title":"Smart TV integration","href":"/developer-guide/web-sdk/other-supported-web-sdk-integration/smart-tv-integration"},{"title":"Single Page App (SPA) Support","href":"/developer-guide/web-sdk/other-supported-web-sdk-integration/single-page-app-spa-support"},{"title":"Integrating with other Web Frameworks","href":"/developer-guide/web-sdk/other-supported-web-sdk-integration/integrating-with-other-web-frameworks"},{"title":"Configure and Integrate AMP Event Analytics","href":"/developer-guide/web-sdk/other-supported-web-sdk-integration/configure-and-integrate-amp-event-analytics"},{"title":"Configure and Integrate AMP Web Push","href":"/developer-guide/web-sdk/other-supported-web-sdk-integration/configure-and-integrate-amp-web-push"},{"title":"Integrate MoEngage with MCP UI Apps","href":"/developer-guide/web-sdk/other-supported-web-sdk-integration/integrate-moengage-with-mcp-ui-apps"}]}]},{"group":"Personalize SDK","root":{"title":"MoEngage Personalize SDK","href":"/developer-guide/personalize-sdk/overview"},"pages":[{"title":"Web Personalization - V2","href":"/developer-guide/personalize-sdk/sdk-integration/web-personalization-v2"},{"title":"Offerings events tracking","href":"/developer-guide/personalize-sdk/sdk-integration/offerings-events-tracking"},{"title":"Personalize API Experience events tracking","href":"/developer-guide/personalize-sdk/sdk-integration/personalize-api-experience-events-tracking"},{"title":"fetchExperiences - MoEngage Personalize SDK","href":"/developer-guide/personalize-sdk/sdk-integration/self-handled-personalize-api-experiences"},{"title":"Content Security Policy (CSP) and Impact on Personalize","href":"/developer-guide/personalize-sdk/sdk-integration/content-security-policy-csp-and-impact-on-personalize"},{"title":"Custom Attributes","href":"/developer-guide/personalize-sdk/sdk-integration/custom-attributes"}]},{"group":"Ecommerce Platforms","root":{"title":"Ecommerce Platform Integrations","href":"/developer-guide/ecommerce-platforms/overview"},"pages":[{"group":"Shopify","root":{"title":"Shopify Integration","href":"/developer-guide/ecommerce-platforms/shopify/overview"},"pages":[{"title":"Shopify 2.0","href":"/developer-guide/ecommerce-platforms/shopify/shopify-20"},{"title":"Events and User Data Tracking","href":"/developer-guide/ecommerce-platforms/shopify/events-and-user-data-tracking"},{"title":"User Data Sync","href":"/developer-guide/ecommerce-platforms/shopify/user-data-sync"},{"title":"Sync Your Product Catalog","href":"/developer-guide/ecommerce-platforms/shopify/sync-product-catalog"},{"title":"Validate Your Shopify Integration","href":"/developer-guide/ecommerce-platforms/shopify/validate-integration"},{"title":"User Profile Management with Shopify","href":"/developer-guide/ecommerce-platforms/shopify/user-profile-management-with-shopify"},{"title":"FAQs","href":"/developer-guide/ecommerce-platforms/shopify/faqs"}]},{"title":"WooCommerce","href":"/developer-guide/ecommerce-platforms/woo-commerce/woocommerce"},{"title":"Magento","href":"/developer-guide/ecommerce-platforms/magento/magento"}]},{"group":"React Native SDK","root":{"title":"MoEngage React Native SDK","href":"/developer-guide/react-native-sdk/overview"},"pages":[{"title":"Getting Started with React Native SDK","sidebarTitle":"Overview","href":"/developer-guide/react-native-sdk/overview/getting-started-with-react-native-sdk"},{"group":"SDK Integration","root":{"title":"Integrating the React Native SDK","href":"/developer-guide/react-native-sdk/sdk-integration/overview"},"pages":[{"group":"React Native","pages":[{"group":"SDK Installation","pages":[{"title":"Framework Dependency","href":"/developer-guide/react-native-sdk/sdk-integration/react-native/sdk-installation/framework-dependency"},{"title":"Android Build Configuration","href":"/developer-guide/react-native-sdk/sdk-integration/react-native/sdk-installation/android"},{"title":"iOS","href":"/developer-guide/react-native-sdk/sdk-integration/react-native/sdk-installation/ios"}]},{"group":"SDK Initialization","pages":[{"group":"File Based Initialization","pages":[{"title":"File Based Initialization","href":"/developer-guide/react-native-sdk/sdk-integration/react-native/sdk-initialization/file-based-initialization/file-based-initialization"},{"title":"Migration and Precedence","href":"/developer-guide/react-native-sdk/sdk-integration/react-native/sdk-initialization/file-based-initialization/migration-and-precedence"}]},{"group":"Manual Initialization","pages":[{"title":"Framework Initialization","href":"/developer-guide/react-native-sdk/sdk-integration/react-native/sdk-initialization/manual-initialization/framework-initialization"},{"title":"Android","href":"/developer-guide/react-native-sdk/sdk-integration/react-native/sdk-initialization/manual-initialization/android"},{"title":"iOS","href":"/developer-guide/react-native-sdk/sdk-integration/react-native/sdk-initialization/manual-initialization/ios"}]}]}]},{"group":"Expo","pages":[{"title":"Installation","href":"/developer-guide/react-native-sdk/sdk-integration/expo/installation"},{"title":"Configure the MoEngage Expo SDK","href":"/developer-guide/react-native-sdk/sdk-integration/expo/configure-the-moengage-expo-sdk"},{"title":"Initialization","href":"/developer-guide/react-native-sdk/sdk-integration/expo/initialization"}]},{"group":"Advanced","pages":[{"title":"JWT Authentication","href":"/developer-guide/react-native-sdk/sdk-integration/advanced/jwt-authentication"}]},{"title":"Limitations","href":"/developer-guide/react-native-sdk/sdk-integration/limitations"}]},{"group":"Data Tracking","root":{"title":"Data Tracking in React Native","href":"/developer-guide/react-native-sdk/data-tracking/overview"},"pages":[{"title":"Tracking User Attributes and User Identity","href":"/developer-guide/react-native-sdk/data-tracking/tracking-user-attributes-and-user-identity"},{"title":"Enable Advertising Identifier Tracking","href":"/developer-guide/react-native-sdk/data-tracking/enable-advertising-identifier-tracking"},{"title":"Install/Update","href":"/developer-guide/react-native-sdk/data-tracking/install-update"},{"title":"Setting Unique Id for SDK versions below 11.2.0","href":"/developer-guide/react-native-sdk/data-tracking/setting-unique-id-for-sdk-versions-below-1120"},{"title":"Tracking Events","href":"/developer-guide/react-native-sdk/data-tracking/tracking-events"},{"title":"Delete User From MoEngage Server","href":"/developer-guide/react-native-sdk/data-tracking/delete-user-from-moengage-server"}]},{"group":"Push","root":{"title":"Push Notifications in React Native","href":"/developer-guide/react-native-sdk/push/overview"},"pages":[{"group":"Basic","pages":[{"title":"Android Push Configuration","href":"/developer-guide/react-native-sdk/push/basic/android-push-configuration"},{"title":"Android Notification Runtime Permissions","href":"/developer-guide/react-native-sdk/push/basic/android-notification-runtime-permissions"},{"title":"iOS Push Configuration","href":"/developer-guide/react-native-sdk/push/basic/ios-push-configuration"},{"title":"Push Callback","href":"/developer-guide/react-native-sdk/push/basic/push-callback"},{"group":"Set Up iOS Notification Extensions for Rich Push and Impression Tracking","pages":[{"title":"Set Up iOS Notification Extensions for Rich Push and Impression Tracking","href":"/developer-guide/react-native-sdk/push/basic/integrating-moengage-service-and-content-extensions/set-up-ios-notification-extensions-for-rich-push-and-impression-tracking"},{"title":"Migrate To The Extension Integrator Tool","href":"/developer-guide/react-native-sdk/push/basic/integrating-moengage-service-and-content-extensions/migrating-to-the-extension-integrator-tool"}]}]},{"group":"Optional","pages":[{"title":"Location Triggered","href":"/developer-guide/react-native-sdk/push/optional/location-triggered"},{"title":"Notification Center","href":"/developer-guide/react-native-sdk/push/optional/notification-triggered"}]}]},{"title":"InApp NATIV","sidebarTitle":"In App Messages","href":"/developer-guide/react-native-sdk/in-app-messages/inapp-nativ"},{"group":"Personalize","root":{"title":"Personalize in React Native","href":"/developer-guide/react-native-sdk/personalize/overview"},"pages":[{"title":"Personalize SDK","href":"/developer-guide/react-native-sdk/personalize/personalize-sdk"},{"title":"Personalize Data Payload","href":"/developer-guide/react-native-sdk/personalize/personalize-data-payload"}]},{"title":"Recommendations","href":"/developer-guide/react-native-sdk/recommendations/recommendations"},{"group":"Cards","root":{"title":"Card Campaigns in React Native","href":"/developer-guide/react-native-sdk/cards/overview"},"pages":[{"group":"Installation","pages":[{"title":"Framework Dependency","href":"/developer-guide/react-native-sdk/cards/installation/framework-dependency"},{"title":"Android","href":"/developer-guide/react-native-sdk/cards/installation/android"},{"title":"iOS","href":"/developer-guide/react-native-sdk/cards/installation/ios"}]},{"title":"Framework Initialization","href":"/developer-guide/react-native-sdk/cards/initialization/framework-initialization"},{"title":"Self Handled Cards","href":"/developer-guide/react-native-sdk/cards/self-handled-cards"},{"title":"Cards Data Payload","href":"/developer-guide/react-native-sdk/cards/cards-data-payload"}]},{"title":"Compliance","href":"/developer-guide/react-native-sdk/compliance/compliance"},{"title":"TV Support","href":"/developer-guide/react-native-sdk/tv/tv-support"},{"title":"React Native Sample App","sidebarTitle":"Sample App","href":"/developer-guide/react-native-sdk/sample-app/react-native-sample-app"},{"title":"Migrate the MoEngage React Native SDK From CocoaPods to Swift Package Manager","sidebarTitle":"Migrate From CocoaPods to SPM","href":"/developer-guide/react-native-sdk/migration/migration-of-moengage-sdk-from-cocoapods-to-spm"},{"title":"Troubleshooting and FAQs - React Native","sidebarTitle":"Troubleshooting and FAQs","href":"/developer-guide/react-native-sdk/troubleshooting-and-faqs/troubleshooting-and-faqs-react"},{"title":"React Native SDK Deprecated Versions","sidebarTitle":"Deprecated Versions","href":"/developer-guide/react-native-sdk/deprecated-versions/deprecated-versions"}]},{"group":"Flutter SDK","root":{"title":"MoEngage Flutter SDK","href":"/developer-guide/flutter-sdk/overview"},"pages":[{"title":"Getting Started with Flutter SDK","sidebarTitle":"Overview","href":"/developer-guide/flutter-sdk/overview/getting-started-with-flutter-sdk"},{"group":"SDK Integration","root":{"title":"Integrating the Flutter SDK","href":"/developer-guide/flutter-sdk/sdk-integration/overview"},"pages":[{"group":"SDK Installation","pages":[{"title":"Framework Dependency","href":"/developer-guide/flutter-sdk/sdk-integration/sdk-installation/framework-dependency"},{"title":"Android","href":"/developer-guide/flutter-sdk/sdk-integration/sdk-installation/android"},{"title":"iOS","href":"/developer-guide/flutter-sdk/sdk-integration/sdk-installation/ios"}]},{"group":"SDK Initialization","pages":[{"group":"File Based Initialization","pages":[{"title":"File Based Initialization","href":"/developer-guide/flutter-sdk/sdk-integration/sdk-initialization/file-based-initialization/file-based-initialization"},{"title":"Migration and Precedence","href":"/developer-guide/flutter-sdk/sdk-integration/sdk-initialization/file-based-initialization/migration-and-precedence"}]},{"group":"Manual Initialization","pages":[{"title":"Framework Initialization","href":"/developer-guide/flutter-sdk/sdk-integration/sdk-initialization/manual-initialization/framework-initialization"},{"title":"Android SDK Initialization","href":"/developer-guide/flutter-sdk/sdk-integration/sdk-initialization/manual-initialization/android-sdk-initialization"},{"title":"iOS SDK Initialization","href":"/developer-guide/flutter-sdk/sdk-integration/sdk-initialization/manual-initialization/ios-sdk-initialization"},{"title":"Web SDK Initialization","href":"/developer-guide/flutter-sdk/sdk-integration/sdk-initialization/web-sdk-initialization"}]}]},{"group":"Advanced","pages":[{"title":"JWT Authentication","href":"/developer-guide/flutter-sdk/sdk-integration/advanced/jwt-authentication"}]},{"title":"Limitations","href":"/developer-guide/flutter-sdk/sdk-integration/limitations"}]},{"group":"Data Tracking","root":{"title":"Data Tracking in Flutter","href":"/developer-guide/flutter-sdk/data-tracking/overview"},"pages":[{"title":"Tracking User Attributes and User Identity","href":"/developer-guide/flutter-sdk/data-tracking/tracking-user-attributes-and-user-identity"},{"title":"Delete User From MoEngage Server","href":"/developer-guide/flutter-sdk/data-tracking/delete-user-from-moengage-server"},{"title":"Enable Advertising Identifier Tracking","href":"/developer-guide/flutter-sdk/data-tracking/enable-advertising-identifier-tracking"},{"title":"Install/Update Differentiation","href":"/developer-guide/flutter-sdk/data-tracking/install-update-differentiation"},{"title":"Setting Unique Id for SDK versions below 9.2.0","href":"/developer-guide/flutter-sdk/data-tracking/setting-unique-id-for-sdk-versions-below-920"},{"title":"Tracking Events","href":"/developer-guide/flutter-sdk/data-tracking/tracking-events"}]},{"group":"Push","root":{"title":"Push Notifications in Flutter","href":"/developer-guide/flutter-sdk/push/overview"},"pages":[{"group":"Basic","pages":[{"title":"Android Push Configuration","href":"/developer-guide/flutter-sdk/push/basic/android-push-configuration"},{"title":"Android Notification Runtime Permissions","href":"/developer-guide/flutter-sdk/push/basic/android-notification-runtime-permissions"},{"title":"iOS Push Configuration","href":"/developer-guide/flutter-sdk/push/basic/ios-push-configuration"},{"title":"Push Callback","href":"/developer-guide/flutter-sdk/push/basic/push-callback"},{"group":"Set Up iOS Notification Extensions for Rich Push and Impression Tracking","pages":[{"title":"Set Up iOS Notification Extensions for Rich Push and Impression Tracking","href":"/developer-guide/flutter-sdk/push/basic/integrating-moengage-service-and-content-extension-in-ios/set-up-ios-notification-extensions-for-rich-push-and-impression-tracking"},{"title":"Migrate To The Extension Integrator Tool","href":"/developer-guide/flutter-sdk/push/basic/integrating-moengage-service-and-content-extension-in-ios/migrating-to-the-extension-integrator-tool"}]}]},{"group":"Optional","pages":[{"title":"Location Triggered","href":"/developer-guide/flutter-sdk/push/optional/location-triggered"},{"title":"Notification Center","href":"/developer-guide/flutter-sdk/push/optional/notification-center"}]}]},{"title":"InApp NATIV","sidebarTitle":"In-App Messages","href":"/developer-guide/flutter-sdk/in-app-messages/inapp-nativ"},{"group":"Personalize","root":{"title":"Personalize in Flutter","href":"/developer-guide/flutter-sdk/personalize/overview"},"pages":[{"title":"Personalize SDK","href":"/developer-guide/flutter-sdk/personalize/personalize-sdk"},{"title":"Personalize Data Payload","href":"/developer-guide/flutter-sdk/personalize/personalize-data-payload"}]},{"title":"Self Handled Cards","sidebarTitle":"Cards","href":"/developer-guide/flutter-sdk/cards/self-handled-cards"},{"title":"Compliance","href":"/developer-guide/flutter-sdk/compliance/compliance"},{"title":"Migrate the MoEngage Flutter SDK From CocoaPods to Swift Package Manager","sidebarTitle":"Migrate From CocoaPods to SPM","href":"/developer-guide/flutter-sdk/migration/migration-of-moengage-sdk-from-cocoapods-to-spm"},{"title":"Troubleshooting and FAQs - Flutter","sidebarTitle":"Troubleshooting and FAQs","href":"/developer-guide/flutter-sdk/troubleshooting-and-faqs/troubleshooting-and-faqs-flutter"},{"title":"Flutter Sample App","sidebarTitle":"Sample App","href":"/developer-guide/flutter-sdk/sample-app/flutter-sample-app"},{"title":"Flutter SDK Deprecated Versions","sidebarTitle":"Deprecated Versions","href":"/developer-guide/flutter-sdk/deprecated-versions/deprecated-versions"}]},{"group":"Cordova SDK","root":{"title":"MoEngage Cordova SDK","href":"/developer-guide/cordova-sdk/overview"},"pages":[{"group":"SDK Integration","root":{"title":"Integrating the Cordova SDK","href":"/developer-guide/cordova-sdk/sdk-integration/overview"},"pages":[{"group":"SDK Installation","pages":[{"title":"Framework Dependency","href":"/developer-guide/cordova-sdk/sdk-integration/sdk-installation/framework-dependency"},{"title":"Android SDK Installation","href":"/developer-guide/cordova-sdk/sdk-integration/sdk-installation/android-sdk-installation"},{"title":"iOS Installation","href":"/developer-guide/cordova-sdk/sdk-integration/sdk-installation/ios-installation"}]},{"group":"SDK Initialization","pages":[{"title":"Framework Initialization","href":"/developer-guide/cordova-sdk/sdk-integration/sdk-initialization/framework-initialization"},{"title":"Android SDK Initialization","href":"/developer-guide/cordova-sdk/sdk-integration/sdk-initialization/android-sdk-initialization"},{"title":"iOS SDK Initialization","href":"/developer-guide/cordova-sdk/sdk-integration/sdk-initialization/ios-sdk-initialization"}]},{"title":"Limitations","href":"/developer-guide/cordova-sdk/sdk-integration/limitations"}]},{"group":"Data Tracking","root":{"title":"Data Tracking in Cordova","href":"/developer-guide/cordova-sdk/data-tracking/overview"},"pages":[{"title":"Delete User From MoEngage Server","href":"/developer-guide/cordova-sdk/data-tracking/delete-user-from-moengage-server"},{"title":"Enable Advertising Identifier Tracking","href":"/developer-guide/cordova-sdk/data-tracking/enable-advertising-identifier-tracking"},{"title":"Install/Update differentiation","href":"/developer-guide/cordova-sdk/data-tracking/install-update-differentiation"},{"title":"Tracking User Attributes and User Identity","href":"/developer-guide/cordova-sdk/data-tracking/tracking-user-attributes"},{"title":"Tracking Events","href":"/developer-guide/cordova-sdk/data-tracking/tracking-events"}]},{"group":"Push","root":{"title":"Push Notifications in Cordova","href":"/developer-guide/cordova-sdk/push/overview"},"pages":[{"group":"Basic","pages":[{"title":"Android Push Configuration","href":"/developer-guide/cordova-sdk/push/basic/android-push-configuration"},{"title":"Android Notification Runtime Permissions","href":"/developer-guide/cordova-sdk/push/basic/android-notification-runtime-permissions"},{"title":"iOS Push Configuration ","href":"/developer-guide/cordova-sdk/push/basic/ios-push-configuration-7xx"},{"title":"Push Callback","href":"/developer-guide/cordova-sdk/push/basic/push-callback"}]},{"group":"Optional","pages":[{"title":"Location Triggered","href":"/developer-guide/cordova-sdk/push/optional/location-triggered"}]}]},{"title":"InApp NATIV","sidebarTitle":"In App Messages","href":"/developer-guide/cordova-sdk/in-app-messages/inapp-nativ"},{"title":"Compliance","href":"/developer-guide/cordova-sdk/compliance/compliance"},{"title":"Cordova SDK Deprecated Versions","sidebarTitle":"Deprecated Versions","href":"/developer-guide/cordova-sdk/deprecated-versions/deprecated-versions"},{"title":"Migrating to 4.x.x","sidebarTitle":"Migration","href":"/developer-guide/cordova-sdk/migration/migrating-to-4xx"},{"title":"Troubleshooting and FAQs - Cordova","sidebarTitle":"Troubleshooting and FAQs","href":"/developer-guide/cordova-sdk/troubleshooting-and-faqs/troubleshooting-and-faqs-cordova"}]},{"group":"Unity SDK","root":{"title":"MoEngage Unity SDK","href":"/developer-guide/unity-sdk/overview"},"pages":[{"group":"SDK Integration","root":{"title":"Integrating the Unity SDK","href":"/developer-guide/unity-sdk/sdk-integration/overview"},"pages":[{"title":"SDK Installation","href":"/developer-guide/unity-sdk/sdk-integration/sdk-installation/sdk-installation"},{"group":"SDK Initialization","pages":[{"title":"SDK Initialization","href":"/developer-guide/unity-sdk/sdk-integration/sdk-initialization/sdk-initialization"},{"group":"Manual Initialization","pages":[{"title":"Android","href":"/developer-guide/unity-sdk/sdk-integration/sdk-initialization/manual-initialization/android"}]},{"group":"File Based Initialization","pages":[{"title":"Android","href":"/developer-guide/unity-sdk/sdk-integration/sdk-initialization/file-based-initialization/android"},{"title":"iOS","href":"/developer-guide/unity-sdk/sdk-integration/sdk-initialization/file-based-initialization/ios"}]}]},{"title":"Limitations","href":"/developer-guide/unity-sdk/sdk-integration/limitations"}]},{"group":"Data Tracking","root":{"title":"Data Tracking in Unity","href":"/developer-guide/unity-sdk/data-tracking/overview"},"pages":[{"title":"Delete User From MoEngage Server","href":"/developer-guide/unity-sdk/data-tracking/delete-user-from-moengage-server"},{"title":"Enable Advertising Identifier Tracking","href":"/developer-guide/unity-sdk/data-tracking/enable-advertising-identifier-tracking"},{"title":"Install/Update Differentiation","href":"/developer-guide/unity-sdk/data-tracking/install-update-differentiation"},{"title":"Tracking User Attributes","href":"/developer-guide/unity-sdk/data-tracking/tracking-user-attributes"},{"title":"Tracking Events","href":"/developer-guide/unity-sdk/data-tracking/tracking-events"}]},{"group":"Push","root":{"title":"Push Notifications in Unity","href":"/developer-guide/unity-sdk/push/overview"},"pages":[{"group":"Basic","pages":[{"title":"Android Push Configuration","href":"/developer-guide/unity-sdk/push/basic/android-push-configuration"},{"title":"Android Notification Runtime Permissions","href":"/developer-guide/unity-sdk/push/basic/android-notification-runtime-permissions"},{"title":"iOS Push Configuration","href":"/developer-guide/unity-sdk/push/basic/ios-push-configuration"},{"title":"Push Callback","href":"/developer-guide/unity-sdk/push/basic/push-callback"}]},{"group":"Optional","pages":[{"title":"Configuring Push Templates","href":"/developer-guide/unity-sdk/push/optional/configuring-push-templates"},{"title":"Location Triggered","href":"/developer-guide/unity-sdk/push/optional/location-triggered"}]}]},{"title":"InApp NATIV","sidebarTitle":"In App Messages","href":"/developer-guide/unity-sdk/in-app-messages/inapp-nativ"},{"title":"Compliance","href":"/developer-guide/unity-sdk/compliance/compliance"},{"title":"Troubleshooting and FAQs - Unity","sidebarTitle":"Troubleshooting and FAQs","href":"/developer-guide/unity-sdk/troubleshooting-and-faqs/troubleshooting-and-faqs-unity"},{"title":"Unity SDK Deprecated Versions","sidebarTitle":"Deprecated Versions","href":"/developer-guide/unity-sdk/deprecated-versions/deprecated-versions"}]},{"group":"Capacitor SDK","root":{"title":"MoEngage Capacitor SDK","href":"/developer-guide/capacitor-sdk/overview"},"pages":[{"group":"SDK Integration","root":{"title":"Integrating the Capacitor SDK","href":"/developer-guide/capacitor-sdk/sdk-integration/overview"},"pages":[{"group":"Basic","pages":[{"group":"SDK Installation","pages":[{"title":"Framework Dependency","href":"/developer-guide/capacitor-sdk/sdk-integration/basic/sdk-installation/framework-dependency"},{"title":"Android SDK Installation","href":"/developer-guide/capacitor-sdk/sdk-integration/basic/sdk-installation/android-sdk-installation"},{"title":"iOS SDK Installation","href":"/developer-guide/capacitor-sdk/sdk-integration/basic/sdk-installation/ios-sdk-installation"}]},{"group":"SDK Initialization","pages":[{"group":"File Based Initialization","pages":[{"title":"File Based Initialization","href":"/developer-guide/capacitor-sdk/sdk-integration/basic/sdk-initialization/file-based-initlialization/file-based-initialization"},{"title":"Migration And Precedence","href":"/developer-guide/capacitor-sdk/sdk-integration/basic/sdk-initialization/file-based-initlialization/migration-and-precedence"}]},{"title":"Framework Initialization","href":"/developer-guide/capacitor-sdk/sdk-integration/basic/sdk-initialization/framework-initialization"},{"title":"Android SDK Initialization","href":"/developer-guide/capacitor-sdk/sdk-integration/basic/sdk-initialization/android-sdk-initialization"},{"title":"iOS SDK Initialization","href":"/developer-guide/capacitor-sdk/sdk-integration/basic/sdk-initialization/ios-sdk-initialization"}]}]},{"group":"Advanced","pages":[{"title":"JWT Authentication","href":"/developer-guide/capacitor-sdk/sdk-integration/advanced/jwt-authentication"}]},{"title":"Limitations","href":"/developer-guide/capacitor-sdk/sdk-integration/limitations"}]},{"group":"Data Tracking","root":{"title":"Data Tracking in Capacitor","href":"/developer-guide/capacitor-sdk/data-tracking/overview"},"pages":[{"title":"Delete User From MoEngage Server","href":"/developer-guide/capacitor-sdk/data-tracking/delete-user-from-moengage-server"},{"title":"Enable Advertising Identifier Tracking","href":"/developer-guide/capacitor-sdk/data-tracking/enable-advertising-identifier-tracking"},{"title":"Install/Update Differentiation","href":"/developer-guide/capacitor-sdk/data-tracking/install-update-differentiation"},{"title":"Tracking User Attributes and User Identity","href":"/developer-guide/capacitor-sdk/data-tracking/tracking-user-attributes"},{"title":"Tracking Events","href":"/developer-guide/capacitor-sdk/data-tracking/tracking-events"},{"title":"Setting Unique ID for SDK versions below 6.0.0","href":"/developer-guide/capacitor-sdk/data-tracking/setting-unique-id-for-sdk-versions-below-6.0.0"}]},{"group":"Push","root":{"title":"Push Notifications in Capacitor","href":"/developer-guide/capacitor-sdk/push/overview"},"pages":[{"group":"Basic","pages":[{"title":"Android Notification Runtime Permissions","href":"/developer-guide/capacitor-sdk/push/basic/android-notification-runtime-permissions"},{"title":"Android Push Configuration","href":"/developer-guide/capacitor-sdk/push/basic/android-push-configuration"},{"title":"iOS Push Configuration","href":"/developer-guide/capacitor-sdk/push/basic/ios-push-configuration"},{"title":"Push Callback","href":"/developer-guide/capacitor-sdk/push/basic/push-callback"}]},{"group":"Optional","pages":[{"title":"Location Triggered","href":"/developer-guide/capacitor-sdk/push/optional/location-triggered"}]}]},{"title":"InApp NATIV","sidebarTitle":"In-App Messages","href":"/developer-guide/capacitor-sdk/in-app-messages/inapp-nativ"},{"title":"Compliance","href":"/developer-guide/capacitor-sdk/compliance/compliance"},{"title":"Migrate the MoEngage Capacitor SDK From CocoaPods to Swift Package Manager","sidebarTitle":"Migrate From CocoaPods to SPM","href":"/developer-guide/capacitor-sdk/migration/migration-of-moengage-sdk-from-cocoapods-to-spm"},{"title":"Troubleshooting and FAQs - Capacitor","sidebarTitle":"Troubleshooting and FAQs","href":"/developer-guide/capacitor-sdk/troubleshooting-and-faqs/troubleshooting-and-faqs-capacitor"},{"title":"Capacitor Sample App","sidebarTitle":"Sample App","href":"/developer-guide/capacitor-sdk/sample-app/capacitor-sample-app"},{"title":"Capacitor SDK Deprecated Versions","sidebarTitle":"Deprecated Versions","href":"/developer-guide/capacitor-sdk/deprecated-versions/deprecated-versions"}]},{"title":"SDK Installation","sidebarTitle":"Ionic SDK","href":"/developer-guide/ionic-sdk/sdk-integration/sdk-installation"},{"title":"TV and OTT Integrations","href":"/developer-guide/tv-and-ott-integrations/getting-started/tv-and-ott-integrations"},{"group":"SDK Lifecycle \u0026 Policies","root":{"title":"SDK Lifecycle and Policies","href":"/developer-guide/sdk-lifecycle-and-policies/overview"},"pages":[{"title":"SDK Deprecation Policy","href":"/developer-guide/sdk-lifecycle-and-policies/sdk-deprecation-policy"},{"title":"Deprecation for Older Platform Versions","href":"/developer-guide/sdk-lifecycle-and-policies/deprecation-for-older-platform-versions"}]},{"group":"Components for SDK","root":{"title":"Components for SDK","href":"/developer-guide/components-for-sdk/overview"},"pages":[{"title":"Real-time Uninstall Tracking","href":"/developer-guide/components-for-sdk/tracking/real-time-uninstall-tracking"},{"group":"Javascript Bridge","root":{"title":"JavaScript Bridge","href":"/developer-guide/components-for-sdk/javascript-bridge/overview"},"pages":[{"title":"JavaScript Bridge for HTML In-Apps","href":"/developer-guide/components-for-sdk/javascript-bridge/javascript-bridge-for-html-in-apps"},{"title":"JavaScript Bridge for On-Site Messaging and Landing Pages","href":"/developer-guide/components-for-sdk/javascript-bridge/javascript-bridge-for-on-site-messaging-and-landing-pages"}]},{"title":"Android Push Configuration For Hybrid Applications","sidebarTitle":"Push Notification","href":"/developer-guide/components-for-sdk/push-notification/android-push-configuration-for-hybrid-applications"}]},{"title":"Getting FCM Server Key","sidebarTitle":"Partner Integrations","href":"/developer-guide/partner-integrations/firebase/getting-fcm-server-key"}]}]},{"tab":"API Guide","pages":[{"title":"API Guide","href":"/api/introduction"}]},{"tab":"AI \u0026 Intelligence","pages":[{"title":"AI \u0026 Intelligence","href":"/user-guide/ai-and-intelligence/overview"}]},{"tab":"Partner Integrations","pages":[{"title":"Partner Integrations","href":"/partner-guide/introduction"}]},{"tab":"Use Cases","pages":[{"title":"Use Cases","href":"/use-cases/introduction"}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/subscribe-to-release-notes"}]}]},{"language":"ja","pages":[{"title":"ja","href":"/ja/developer-guide/android-sdk/cards/cards-ui-compose"}]}]},"basePath":"","title":"Cards in Jetpack Compose - MoEngage","buildId":"dpl_6PxPD4Fj1JDU9BJxEHvfdUmxKThw","deploymentId":"dpl_6PxPD4Fj1JDU9BJxEHvfdUmxKThw","dynamics":[],"chunks":[]}