Jetpack Compose
Overview
Jetpack Compose is a modern UI toolkit for building native Android user interfaces using a declarative programming model. It's part of the larger Jetpack suite of libraries provided by Google to help developers build high-quality Android apps more quickly and effectively. This documentation outlines the steps required to integrate Smartech Nudges SDK into your Android project built with Jetpack Compose.
Integrate Jetpack Compose
Follow these steps to integrate Smartech Nudges SDK with Jetpack Compose for enhanced user experience:
Step 1: Basic Setup
Begin by integrating your Android project with Netcore CE. For more information on basic integration step, refer here.
Step 2: Product Experience Setup
Integrate Smartech Nudges SDK into your Android project to enable the product experience.
For more information on product experience setup, refer here.
Step 3: Jetpack Compose Meta-data
If your application comprises a combination of native screens and Jetpack Compose screens, add the following meta-data tag to the activities that are using Jetpack Compose UI:
<activity android:name=".activity.compose.ComposeActivity">
<meta-data
android:name="SMT_COMPOSE_ACTIVITY"
android:value="true" />
</activity>
- For applications utilising only Jetpack Compose UI, the above
SMT_COMPOSE_ACTIVITY
meta-data tag is not required. Instead add the application level meta-data tag in AndroidManifest.xml as shown below.
<application
android:name=".ComposeApp"
... />
<meta-data
android:name="SMT_COMPOSE_APP"
android:value="true" />
</application>
Step 4: Assign Screen Names
Before loading each Jetpack Compose screen, it is essential to assign a unique screen name using the following method.
SmtCompose.screenName = “login_screen"
For Example: If library androidx.navigation:navigation-compose
is used in project, addOnDestinationChangedListener
can be registered as below.
val navController = rememberNavController()
navController.addOnDestinationChangedListener { _, destination, _ ->
SmtCompose.screenName = destination.route.toString()
}
Step 5: Apply smtTag Modifier
Apply smtTag
modifier to all the UI elements that require identification, allowing for the placement of nudges as necessary. The smtTag
requires the name of the screen used in step four and a unique tag within the screen to identify it later.
fun Modifier.smtTag(screenName: String, tag: String): Modifier
//For Example
Column {
Text(
text = "Hello",
modifier = Modifier
.clickable { say(“Hello”) }
.padding(10.dp)
.smtTag(screenName = "login_screen", tag = "label_hello")
)
Text(
text = "World",
modifier = Modifier
.clickable { say(“World”) }
.padding(10.dp)
.smtTag(screenName = "login_screen", tag = "label_world")
)
}
Step 6: Manage Visibility Flag
When an element's visibility is governed by a boolean state flag, represented by a condition if (visible) { Element() }
, it is imperative to ensure that the same visibility state flag is consistently updated whenever the state changes. This can be achieved through the utilisation of the following method.
SmtCompose.updateVisibility(String screenName, String tag, boolean isVisible)
//For Example
@Composable
fun VisibilityScreen() {
var visible by remember { mutableStateOf(true) }
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Button(
onClick = {
visible = !visible
SmtCompose.updateVisibility("login_screen", "red_box", visible)
}, modifier = Modifier
.offset(0.dp, 100.dp)
.smtTag("login_screen", "show_hide_button")
.padding(10.dp)
) {
Text(text = if (visible) "Hide" else "Show")
}
if (visible) {
Box(
modifier = Modifier
.offset(0.dp, 200.dp)
.background(Color.Red)
.size(100.dp)
.smtTag("login_screen", "red_box")
)
}
}
}
Note
- Show nudges on Jetpack compose UI: In case if the app needs to make an API call to fetch the data before rendering the screen, then raise a nudge trigger event once the API call returns and the screen is completely rendered with the expected UI element.
- Lazy List: In case of a lazy list, make sure the expected lazy list item is scrolled and visible within the screen bounds before raising the nudge trigger event.
Updated 2 months ago