Let's integrate our UIKIT in few minutes


Download UIKit SDK

UI Kit for Android#

Mirrorfly UIKit Sdk is a set of prebuilt UI components that allows you to easily integrate an in-app chat with all the essential messaging features. Our development kit includes light and dark themes, text fonts, colors and more. You can customize these components to create an interactive messaging unique interface.


The requirements for chat SDK for Android are:

  • Android Marshmallow 6.0 (API Level 23) or above
  • Java 8 or higher
  • Gradle 4.1.0 or higher

Things to be Noted Before Making a Start#

SDK License Key#

Before integrating CONTUS MirrorFly Chat SDK, you need to have a SDK license key for your MirrorFly application. This SDK needs to be authenticated by the MirrorFly server using the license key for further processing.

Follow the below steps to get your license key:

Step 1: Let’s Create an Account - Sign up into MirrorFly Console page (https://console.mirrorfly.com/register) for free MirrorFly account

Step 2: Create an account with your basic details including your name, organization details, work email, and contact number

Step 3: Once you’re in! You get access to your MirrorFly account ‘Overview page’ where you can find a license key as well as downloadable Android SDK for further integration process

Step 4: You can copy the license key from the ‘Application info’ section


Step 5: To download the AAR files from the Android SDKs, click on ‘Download’ which will take you to the top of the guided documentation page, here, click on the ‘Download button’ and extract the AAR files from the ZIP folder

Step 6: Once finished with the download, now it's time to start with the integration process that begins with creating a new project to develop a chat app.


As soon as the AAR files have been imported from the zip file using Kotlin, you can start over with the integration process.

Step 1: Create a new project or Open an existing project in Android Studio

Step 2: Add the following libraries in app/libs folder in the project

  • appbase.aar
  • flycommons.aar
  • flynetwork.aar
  • flydatabase.aar
  • videocompression.aar
  • xmpp.aar
  • mfuikitsdk.aar
  • flycall.aar
  • flywebrtc.aar
  • cameraview.aar
  • zoomimageview.aar
  • mediapicker.aar


Step 3: Add the below code in the app/build.gradle file.

plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-android'
id 'kotlin-kapt'
id 'kotlin-android-extensions'
id 'androidx.navigation.safeargs'
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
kotlinOptions {
jvmTarget = '1.8'
packagingOptions {
exclude 'META-INF/AL2.0'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
exclude 'META-INF/LGPL2.1'
buildFeatures {
viewBinding = true
dataBinding {
enabled = true

Step 4: Add the below code in the settings.gradle file.

pluginManagement {
repositories {
dependencyResolutionManagement {
repositories {

Step 5: Add the following dependencies in the app/build.gradle file.

dependencies {
... // your app dependencies
implementation files('libs/appbase.aar')
implementation files('libs/flycommons.aar')
implementation files('libs/flynetwork.aar')
implementation files('libs/flydatabase.aar')
implementation files('libs/videocompression.aar')
implementation files('libs/xmpp.aar')
implementation files('libs/mfuikitsdk.aar')
implementation files('libs/flycall.aar')
implementation files('libs/flywebrtc.aar')
implementation files('libs/cameraview.aar')
implementation files('libs/zoomimageview.aar')
implementation files('libs/mediapicker.aar')


Step 6: Add the below dependencies required by the SDK in the app/build.gradle file.

dependencies {
configurations {
all {
exclude group: 'org.json', module: 'json'
exclude group: 'xpp3', module: 'xpp3'
//For lifecycle listener
implementation 'android.arch.lifecycle:extensions:1.1.1'
annotationProcessor 'android.arch.lifecycle:compiler:1.1.1'
//KTX Depenedency
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0'
//For GreenDao
implementation 'de.greenrobot:greendao:2.1.0'
//For gson parsing
implementation 'com.google.code.gson:gson:2.8.6'
//room database
implementation 'androidx.room:room-runtime:2.4.2'
kapt 'androidx.room:room-compiler:2.4.2'
implementation "androidx.room:room-ktx:2.4.2"
implementation 'androidx.emoji:emoji:1.1.0'
implementation 'androidx.emoji:emoji-appcompat:1.1.0'
implementation 'io.github.rockerhieu:emojicon:1.4.2'
//Socket - versions.gradle
implementation 'com.github.nkzawa:socket.io-client:0.6.0'
//for webrtc
implementation 'org.webrtc:google-webrtc:1.0.32006'
//for smack implementation
implementation 'org.igniterealtime.smack:smack-android:4.4.4'
implementation 'org.igniterealtime.smack:smack-tcp:4.4.4'
implementation 'org.igniterealtime.smack:smack-im:4.4.4'
implementation 'org.igniterealtime.smack:smack-extensions:4.4.4'
implementation 'org.igniterealtime.smack:smack-sasl-provided:4.4.4'
//for mobile number formatting
implementation 'io.michaelrocks:libphonenumber-android:8.12.43'
//Dagger Dependencies
api 'com.google.dagger:dagger:2.40.5'
annotationProcessor 'com.google.dagger:dagger-compiler:2.27'
api 'com.google.dagger:dagger-android:2.40.5'
api 'com.google.dagger:dagger-android-support:2.40.5'
kapt 'com.google.dagger:dagger-android-processor:2.27'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.8'
implementation 'com.squareup.retrofit2:retrofit:2.6.1'
implementation 'com.squareup.retrofit2:converter-gson:2.6.1'
implementation 'com.squareup.okhttp3:okhttp:4.2.0'
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
//stetho interceptor
implementation 'com.facebook.stetho:stetho-okhttp3:1.3.1'
//okhttp interceptor
implementation 'com.squareup.okhttp3:logging-interceptor:3.14.3'
// Glide
implementation 'com.github.bumptech.glide:glide:4.11.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
implementation 'com.github.bumptech.glide:annotations:4.11.0'
// security:security-crypto
implementation 'androidx.security:security-crypto:1.1.0-alpha03'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
implementation "androidx.paging:paging-runtime-ktx:3.1.0-alpha01"
implementation 'com.jakewharton.rxbinding3:rxbinding:3.1.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-core:3.1.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-appcompat:3.1.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-material:3.1.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-recyclerview:3.1.0'

Step 7: Add the below dependencies required by the SDK in the app module/build.gradle file.

buildscript {
dependencies {
def nav_version = "2.3.5"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"

Step 8: Add the below line in the gradle.properties file, to avoid imported library conflicts.


Step 9: Open the AndroidManifest.xml and add below permissions.

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


To integrate and run Mirrorfly UIKit in your app, you need to initialize it first. You can initialize the MirrorFlyUIKit instance by passing the MirrorFlyUIKitAdapter instance as an argument to a parameter in the MirrorFlyUIKit.init() method. The MirrorFlyUIKit.init() must be called once in the onCreate() method of your app’s Application instance.

Then provide your APP_NAME BASE_URL LICENCE_KEY isCallEnabled = false and If you have subscription set isTrialLicenceKey true else set isTrialLicenceKey false

package com.example.mfuikittest
import android.app.Application
import com.mirrorflyuikitsdk.MirrorFlyUIKit
import com.mirrorflyuikitsdk.adapter.MirrorFlyUIKitAdapter
class BaseApplication : Application() {
override fun onCreate() {
MirrorFlyUIKit.initFlySDK(applicationContext,object : MirrorFlyUIKitAdapter {
override fun setAppName(): String? {
return "YOUR_APP_NAME"
override fun setBaseUrl(): String {
return "YOUR_BASE_URL"
override fun setLicence(): String {
override fun isCallEnabled(): Boolean {
return false
override fun isTrialLicenceKey(): Boolean? {
return true
MirrorFlyUIKit.defaultThemeMode = MirrorFlyUIKit.ThemeMode.Light
YOUR_APP_NAMEStringset your application name
YOUR_BASE_URLStringset your base url
YOUR_LICENCE_KEYStringset your licence key

Add BaseApplication#

Add the created BaseApplication to AndroidManifest.xml.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:name=".BaseApplication" // Add this line.
<activity android:name=".MainActivity">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />


The below method to register a user.


Unless you log out the session, make a note that should never call the registration method more than once in an application.

Note : Use the Mirrorfly UI KIt SDK registration function after your application login process.

MirrorFlyUIKit.initUser("USER_IDENTIFIER", object : InitResultHandler {
override fun onInitResponse(isSuccess: Boolean, e: String) {
if (isSuccess) {
Log.d("TAG", "onInitResponse called with: isSuccess = $isSuccess)
} else {
Log.e("TAG", "onInitResponse called with: Failure, e = $e")
USER_IDENTIFIERStringUnique Id to Register the User

Display Recent Chat list#

FlyRecentChatActivity is the starting point for launching UIKit in your application. By implementing the code below, you will see a complete list of recent chats that you're made with single and group conversation.

Note : Use FlyRecentChatActivity only when you have done the registration.

package com.custom.mfuikittest
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.mirrorflyuikitsdk.activities.FlyRecentChatActivity
class MainActivity : FlyRecentChatActivity() { // Add this line.
override fun onCreate(savedInstanceState: Bundle?) {
// If you’re going to inherit `FlyRecentChatActivity`, don’t implement `setContentView()`

Sending a message#

You can now run the application on an emulator or a plugged-in device. To send a message, you must first start a conversation by clicking on the icon in the top-right corner. Then, you can select the user you wish to chat. Once navigated to user chat screen, type your first message and press send.

Recent & Single Chat#