Brand Concierge API reference (Android)
Managed Integration
The SDK manages the chat lifecycle. Provide a trigger UI element — the SDK shows it when the extension is ready and opens the chat as a full-screen dialog when the trigger is invoked.
Jetpack Compose
Syntax
Copied to your clipboard@Composablefun ConciergeChat(modifier: Modifier = Modifier,viewModel: ConciergeChatViewModel,surfaces: List<String>? = null,handleLink: LinkHandler? = null,content: @Composable (showChat: () -> Unit) -> Unit)
Parameters
- viewModel required - A
ConciergeChatViewModelinstance. Obtain viaviewModel<ConciergeChatViewModel>(). - surfaces - Surface identifiers sent to the Brand Concierge server.
- modifier - Optional
Modifierto apply to the composable. - handleLink - Optional
LinkHandlercallback. Returntrueto claim the URL; returnfalsefor default behavior. - content required - Composable lambda receiving a
showChatfunction. CallshowChat()to open the chat.
Example
Copied to your clipboard@Composablefun MyScreen() {val viewModel = viewModel<ConciergeChatViewModel>()ConciergeChat(viewModel = viewModel,surfaces = listOf("web://example.com/your-surface.html")) { showChat ->MyTriggerButton(onClick = { showChat() })}}
XML/Views
Syntax
Copied to your clipboardfun bind(lifecycleOwner: LifecycleOwner,viewModelStoreOwner: ViewModelStoreOwner,surfaces: List<String>? = null,theme: ConciergeThemeData? = null,handleLink: ((String) -> Boolean)? = null,triggerView: View)
Parameters
- lifecycleOwner required - The
LifecycleOwner(typically yourActivityorFragment). - viewModelStoreOwner required - The
ViewModelStoreOwner(typically yourActivityorFragment). - surfaces - Surface identifiers sent to the Brand Concierge server.
- theme - Optional
ConciergeThemeDatato apply to the chat UI. - handleLink - Optional callback. Return
trueto claim the URL; returnfalsefor default behavior. - triggerView required - The
Viewthat launches the chat when clicked.
Example
Copied to your clipboardval chatView = findViewById<ConciergeChatView>(R.id.concierge_chat)val triggerButton = Button(this).apply { text = "Chat" }chatView.bind(lifecycleOwner = this,viewModelStoreOwner = this,surfaces = listOf("web://example.com/your-surface.html"),triggerView = triggerButton)
Custom Integration
Embed the chat interface directly into your screen and manage its lifecycle yourself. Use this for dedicated chat screens or custom layouts where you control when chat appears and handle dismissal.
Jetpack Compose
Syntax
Copied to your clipboard@Composablefun ConciergeChat(viewModel: ConciergeChatViewModel,onClose: () -> Unit,modifier: Modifier = Modifier,handleLink: LinkHandler? = null)
Parameters
- viewModel required - A
ConciergeChatViewModelinstance. Obtain viaviewModel<ConciergeChatViewModel>(). - onClose required - Callback invoked when the user dismisses the chat (back press, close button, or gesture).
- modifier - Optional
Modifierto apply to the composable. - handleLink - Optional
LinkHandlercallback. Returntrueto claim the URL; returnfalsefor default behavior.
Example
Copied to your clipboard@Composablefun YourChatScreen() {val viewModel = viewModel<ConciergeChatViewModel>()val conciergeState by ConciergeStateRepository.instance.state.collectAsStateWithLifecycle()val surfaces = listOf("web://example.com/your-surface.html")ConciergeStateRepository.instance.setSessionSurfaces(surfaces)val ready = conciergeState.configurationReady &&conciergeState.experienceCloudId != null &&conciergeState.surfaces.isNotEmpty()if (ready) {ConciergeChat(viewModel = viewModel,onClose = { /* navigate back */ })}}
XML/Views
Syntax
Copied to your clipboardfun bind(lifecycleOwner: LifecycleOwner,viewModelStoreOwner: ViewModelStoreOwner,surfaces: List<String>? = null,theme: ConciergeThemeData? = null,handleLink: ((String) -> Boolean)? = null,onClose: () -> Unit)
Parameters
- lifecycleOwner required - The
LifecycleOwner(typically yourActivityorFragment). - viewModelStoreOwner required - The
ViewModelStoreOwner(typically yourActivityorFragment). - surfaces - Surface identifiers sent to the Brand Concierge server.
- theme - Optional
ConciergeThemeDatato apply to the chat UI. - handleLink - Optional callback. Return
trueto claim the URL; returnfalsefor default behavior. - onClose required - Callback invoked when the user dismisses the chat.
Example
Copied to your clipboardval chatView = findViewById<ConciergeChatView>(R.id.concierge_chat)chatView.bind(lifecycleOwner = this,viewModelStoreOwner = this,surfaces = listOf("web://example.com/your-surface.html"),onClose = { finish() })
ConciergeThemeLoader.load
Loads a ConciergeThemeData from a JSON file in the app's assets directory. Returns null if the file cannot be found or parsed.
Syntax
Copied to your clipboard@JvmStatic fun load(context: Context, filename: String): ConciergeThemeData?
Parameters
- context required - An Android
Contextused to access theassetsdirectory. - filename required - The filename of the JSON theme file (including the
.jsonextension).
Example
Copied to your clipboardval theme = ConciergeThemeLoader.load(context, "my-theme.json")?: ConciergeThemeLoader.default()
ConciergeThemeLoader.default
Returns the built-in default ConciergeThemeData.
Syntax
Copied to your clipboard@JvmStatic fun default(): ConciergeThemeData
Example
Copied to your clipboardval theme = ConciergeThemeLoader.default()
