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
@Composable
fun 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
@Composable
fun MyScreen() {
val viewModel = viewModel<ConciergeChatViewModel>()
ConciergeChat(
viewModel = viewModel,
surfaces = listOf("web://example.com/your-surface.html")
) { showChat ->
MyTriggerButton(onClick = { showChat() })
}
}
XML/Views
Syntax
fun 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
val 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
@Composable
fun 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
@Composable
fun 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
fun 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
val 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
@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
val theme = ConciergeThemeLoader.load(context, "my-theme.json")
?: ConciergeThemeLoader.default()
ConciergeThemeLoader.default
Returns the built-in default ConciergeThemeData.
Syntax
@JvmStatic fun default(): ConciergeThemeData
Example
val theme = ConciergeThemeLoader.default()