How to integrate Poool Access into an Android application?
The Poool Access Android SDK lets you integrate dynamic paywalls to control access to an application's content. It offers the same features as the iOS SDK, notably with several display modes (modal, integrated, custom view).
The paywall templates and the user journey are fully editable from the Poool dashboard, in your dedicated application.
Find our integration documentation on github as well 👉 React Native
Installing the Android SDK
Installing the Poool Access library is done simply via Gradle.
With classic Gradle
Add the following dependency in your build.gradle file:
implementation("tech.poool:access-android:1.2.0")With the Versions Catalog
If you use a version catalog (libs.versions.toml), add:
[libraries]
access-android = { group = "tech.poool", name = "access-android", version.ref = "accessAndroid" }
Then in your Gradle files:
implementation(libs.access.android)Usage with Jetpack Compose
The SDK is designed primarily for Jetpack Compose. It offers several composables that make integrating paywalls into a modern application easier.
Snippet / RestrictedContent mode
This mode relies on two main components:
Snippet: content visible as long as the wall is active.RestrictedContent: full content displayed once the wall is passed.
Example:
@Composable
fun App() {
AccessProvider(
appId = "<your_app_id>",
config = mapOf(
"debug" to true,
"cookiesEnabled" to true
)
) {
Snippet {
Text("Contenu visible avant déblocage du mur")
}
RestrictedContent {
Text("Contenu complet affiché après déblocage")
}
Paywall(pageType = "premium")
}
}
Custom mode
If you want more precise control over the display, you can manually manage the wall's release state:
@Composable
fun App() {
var isReleased by remember { mutableStateOf(false) }
AccessProvider(
appId = "<your_app_id>",
config = mapOf(
"debug" to true,
"cookiesEnabled" to true
)
) {
if (!isReleased) {
Text("Contenu visible avant déblocage")
} else {
Text("Contenu complet affiché après déblocage")
}
Paywall(
pageType = "premium",
mode = PaywallMode.CUSTOM,
onRelease = { isReleased = true }
)
}
}
The main composables
AccessProvider: root component that wraps all your paywall-restricted content. It accepts configuration, styles, texts, and variables parameters.SnippetandRestrictedContent: to display the content before and after unlocking, respectively.Paywall: to configure the wall (page type, display mode, callbacks, etc.).
The display mode of the Paywall component
The Paywall composable lets you specify the wall's display mode via the mode property. This option controls how the content is restricted and how the user experience is managed. Three modes are currently available:
PaywallMode.SNIPPET(default): used in combination with theSnippetandRestrictedContentcomposables. The full content is hidden, and a "teaser" portion remains visible.
PaywallMode.BOTTOM_SHEET: displays the access wall in a modal bottom sheet. This mode is ideal for a more intrusive and focused experience, without hiding the underlying content.
PaywallMode.CUSTOM: gives full control to the application. The content is displayed or hidden depending on the state you manage manually, often via a variable likeisReleased.
Example of using BOTTOM_SHEET mode:
@Composable
fun App() {
Paywall(pageType = "premium", mode = PaywallMode.BOTTOM_SHEET)
}
Example of using CUSTOM mode with callback:
@Composable
fun App() {
Paywall(pageType = "premium", mode = PaywallMode.CUSTOM, onRelease = { isReleased = true })
}
Each mode lets you adapt the access wall's behavior to the user experience you want to offer, from simple content teasing to more pronounced conversion strategies.
Usage with the view system (legacy)
Even though the SDK targets Compose, it remains compatible with XML views. The integration is done using the Access class, which dynamically injects a paywall into a ViewGroup.
Kotlin example:
class MainActivity : AppCompatActivity() {
private var access: Access? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
access = Access("<your_app_id>", this)
access?.config(
mapOf(
"debug" to true,
"cookiesEnabled" to true
)
)
val content = findViewById<LinearLayout>(R.id.content)
access?.createPaywall(
pageType = "premium",
percent = 80,
viewGroup = content
)
}
}
Layout XML :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
<LinearLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="wrap_content">
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Contenu partiellement masqué par le paywall" />
</LinearLayout>
</RelativeLayout>
The percent = 80 parameter here defines the percentage of content initially visible before the wall is displayed. It is of course possible to fine-tune this configuration via other options available in the documentation.
Thank you for reading. If you encounter a problem accessing the content or have any questions, feel free to contact our support team.
Updated on: 16/07/2026
Thank you!


