---
title: Native Android
slug: technical-docs/native-android
icon: 🤖
docTags: 
createdAt: 2024-02-28T07:33:23.305Z
---

# Introduction

The Android integration of the IntelliProve plug-in involves incorporating the IntelliProve SDK files into your project dependencies.

All this is nicely laid out in our step-by-step guide below.

The integration guide covers three sections:

1. Adding the SDK
2. Setting up the project
3. Usage

## GitHub

Our GitHub repository provides a fully functional example of our platform's integration, demonstrating the seamless setup and utilisation of our native SDKs for Android platforms.

[https://github.com/IntelliProve/intelliprove-web-plugin-android](https://github.com/IntelliProve/intelliprove-web-plugin-android)

# Adding the SDK

`Last update 16/09/2025 09:35`

::File{src="https://api.archbee.com/api/presign/_0R_DnpmBBLLXmaoWvG2u/hNlKIHWTdeKoVgHsPmCgf-20250914-201443.aar" label="IntelliProveWebView.aar"}

- All the following actions are taken in root folder of the project
- Add folder `app/libs`
- Copy the `IntelliProveWebView.aar` into this folder
- In `app/build.gradle`, add a dependency for the `IntelliProveWebView.aar`and androidx's AppCompatibility ConstraintLayout.

```java
dependencies {
    ...
    implementation("androidx.constraintlayout:constraintlayout:2.1.4")
    implementation files('libs/IntelliProveWebView.aar')
}
```

# Setting up the project

- In `build.gradle`, ensure the correct Kotlin version is used:

```java
buildscript {
    ext.kotlin_version = '1.8.0'
    ...
}
```

- In `app/build.gradle`, define the `minSdkVersion`:

```java
android {
    ...
    defaultConfig {
        ...
        minSdkVersion 24
        ...
    }
    ...
}
```

- In `app/src/main/AndroidManifest.xml`, add the needed permissions for Camera and Internet usage, and an activity tag, so the `IntelliWebViewActivity` can be shown in the application:

```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    ...

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />

    ...

    <application ...>
        ...
        <activity
            android:name="com.intelliprove.webview.IntelliWebViewActivity"
            android:theme="@style/Theme.AppCompat.NoActionBar"
            />
        ...
    </application>
</manifest>
```

# Usage

- Let the Activity inherit from the `IntelliWebViewDelegate` class, which provides the `didReceivePostMessage` delegate. (For more information on the postmessages, including the JSON format, refer to [Message events](docId\:KZ6XSnd6V4G8EfCgd02ib).)
- Use the `openWebView` to open the web view with a URL for the Face Scan Plug-in.
  - Make sure to request the  URL for the Face Scan plug-in using the [Get Face Scan URL](docId\:BiuPVixvHltbukKLR2ATI) API endpoint.

:::hint{type="info"}
**Please note:**

- The WebView is automatically dismissed by the SDK when receiving the `dismiss` post message.
- The SDK creates a new Activity, which means the entire screen is filled with the IntelliProve plug-in. For use cases where this is not desired, contact our support team for a more custom integration.
:::

```kotlin
package com.intelliprove

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import com.intelliprove.webview.IntelliWebViewActivity
import com.intelliprove.webview.IntelliWebViewDelegate

class MainActivity : AppCompatActivity(), IntelliWebViewDelegate {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val openWebViewButton = findViewById<Button>(R.id.openWebViewButton)
        openWebViewButton.setOnClickListener {
            openWebView()
        }
    }

    private fun openWebView() {
        IntelliWebViewActivity.start(
            this,
            "https://plugin-streaming.intelliprove.com/?action_token=xxx",
            this
        )
    }

    override fun didReceivePostMessage(postMessage: String) {
        Log.d("MainActivity", postMessage)
        // postMessage is received as JSON string, so needs to be parsed
    }
}
```

# Next steps

- To match the plug-in with your brand's colours and fonts, please visit our our [UI Customization](docId\:vzz-ODpLrSTmbHTHZKLLd) documentation.

