# Native Android

## 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/2024 17:00`_

[IntelliProveWebView.aar](https://docs.intelliprove.com/downloads/technical-docs-v1/native-android/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

-   Open the Activity from where the IntelliWebView will be triggered. In our example this is `MainActivity.kt`.
-   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](https://docs.intelliprove.com/technical-docs-v1/message-events).)
-   Use the `openWebView` to open the web view with a generated web plug-in URL.

**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 Customisation documentation.
