Build an Encrypted chatting app with Java
Published: 2023-04-19 12:32:18

In this article, we will learn how can we Integrate [In-app Chat](https://www.zegocloud.com/product/in-app-chat) in android app with few lines of code.Let's suppose you have a startup and you don't have a team to work on your technical background ,  so you have to  manage everything by your own , so this can be very stressful and exhausting. So guys the solution of this problem is ZegoCloud its an audio and [video API ](https://www.zegocloud.com/product/video-call)provider which offers you so many exciting features and SDk that you can integrate inside your application and the best part is , managing your backend is quite easy if you are using [ZEGOCLOUD](https://www.zegocloud.com).


In modern applications , chatting is a very important feature that users want , so they can communicate with each other . When you create this type of feature so you have to manage everything , here ZEGOCLOUD comes to make it possible and easy .


The best part is, whatever I am showing in this tutorial can be integrated without paying anything , just visit their website and create an account and you are ready to go >>

**How to integrate In-app chatting functionality in android app.**


1. Once you will create account so you will see Dashboard , where you have to click on project >>> Create .


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mh4hkx1cqaryh34qpmg5.png)

Then you must specify use case we want to use , in this we will cover In-app chat.

Then you must add a name .

Then we have to two options to choose , [Uikits](https://docs.zegocloud.com/article/15652?isFrom=%7B&quot%3Bfunctional&quot%3B%3Atrue,&quot%3B%3Atrue,&quot%3Badvertising&quot%3Banalysis&quot%3B%3Atrue%7D)  and SDK .The advantage of UI kits is , it have everything you need to implement.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k2azhxx6ndtys4cikidp.png)


**What is the In-app Chat Kit**
In-app Chat Kit is a UI component library based on the In-app Chat SDK. It provides general UI components, such as the chat list, one-on-one chat, and group chat. You can use the In-app Chat Kit to quickly build custom IM applications based on actual business requirements.


You have to select any one option for proceeding, Once project is created .
we will choose "for android" option.


Now click on "Save & Start to integrate": 

After the project creation we need two values AppSign and AppId for connecting our app with zego porject.

**Building In-app chat**

Now open your IDE in which you wanna work , I will be using Android studio.

So create  a project in android studio.


Add this dependency inside build.gradle level

```
android {
   ...
   buildFeatures {
        dataBinding true
    }
}

dependencies {
    ...
    implementation 'com.github.ZEGOCLOUD:zego_inapp_chat_uikit_android:+'    // add this line in your module-level build.gradle file's dependencies, usually named [app].
}
```

Open build.gradle (module level) add these line of code.

```

android {
    buildToolsVersion "30.0.3"
    compileSdkVersion 31
    defaultConfig {
        applicationId "im.zego.zimexample"
        targetSdkVersion 31
        minSdk 24

        versionCode 1
        versionName "1.0"

        ndk {
            abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
        }
    }

```
Add these lines in build.gradle as well
```
buildscript {
    repositories {
        maven { url 'https://www.jitpack.io' } //Add this line.
        ....
    }
}

allprojects {
    repositories {
        maven { url 'https://www.jitpack.io' }//Add this line.
        ...
    }
}
```

Check your project root directory's gradle.properties file, and add the following configuration to the file if it's missing:

```
// Indicates AndroidX is enabled for the current project.
android.useAndroidX=true
// Migrates the dependency to AndroidX, converting the support library from third-party libraries used in the project to an AndroidX library.
android.enableJetifier=true
```




Then we must add permissions that we need in order to make the app working , 
open manifest tag , inside Android manifest.xml .

```
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_LOGS" />
```

Integrate In-app Chat Kit into the project.

Now we will call init method to intialize In-app chat kit.


```

import android.app.Application;

import com.zegocloud.zimkit.services.ZIMKit;

public class MyApplication extends Application {
    public static MyApplication sInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        sInstance = this;
        Long appId = ;    // The AppID you get from ZEGOCLOUD Admin Console.
        String appSign = ;    // The App Sign you get from ZEGOCLOUD Admin Console.
        ZIMKit.initWith(this,appId,appSign);
        // Online notification for the initialization (use the following code if this is needed).
        ZIMKit.initNotifications();
    }
}
```

After intialization , call the connectUser method with your user info to log in to In-app Chat Kit.

```

import android.content.Intent;
import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import im.zego.zim.enums.ZIMErrorCode;
import com.zegocloud.zimkit.services.ZIMKit;

public class MyZIMKitActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void buttonClick() {
        // userId and userName: 1 to 32 characters, can only contain digits, letters, and the following special characters: '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '-', '`', ';', '’', ',', '.', '<', '>', '/', '\'
        String userId = ; // Your ID as a user.
        String userName = ; // You name as a user.
        String userAvatar = ; // The image you set as the user avatar must be network image. e.g., https://storage.zego.im/IMKit/avatar/avatar-0.png
        connectUser(userId, userName,userAvatar); 
    }

    public void connectUser(String userId, String userName,String userAvatar) {
        // Logs in.
        ZIMKit.connectUser(userId,userName,userAvatar, errorInfo -> {
            if (errorInfo.code == ZIMErrorCode.SUCCESS) {
                // Operation after successful login. You will be redirected to other modules only after successful login. In this sample code, you will be redirected to the conversation module.
                toConversationActivity();
            } else {

            }
        });
    }

    // Integrate the conversation list into your Activity as a Fragment 
    private void toConversationActivity() {
      // Redirect to the conversation list (Activity) you created. 
      Intent intent = new Intent(this,ConversationActivity.class);
      startActivity(intent);
    }
}
```


Now we will display conversation component.

```
 public class ConversationActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_conversation);
    }

}
```

The layout of the ConversationActivity is **activity_conversation.xml**:

```
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/frag_conversation_list"
        android:name="com.zegocloud.zimkit.components.conversation.ui.ZIMKitConversationFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
```

By this point your app will look like this-

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vimpnarwu2nj5dx2g9ck.jpeg)

Now we will focus on one-to-one chat -
Get the userId that is generated using your own business logic. (the userId here refers to the peer user you want to chat with.)
Fill in the userId parameter and run the following code:

```
  private void startSingleChat(String userId){
         ZIMKitRouter.toMessageActivity(this, userId,ZIMKitConversationType.ZIMKitConversationTypePeer);
    }
```



**Conclusion**
So guys you can see that Building a chat app is so easy with [ZegoCloud ](https://www.zegocloud.com/)  In-app chat [SDK ](https://www.zegocloud.com/product/in-app-chat)Thanks to ZEGOCLOUD for sponsoring this article, don't forget to visit their website to get more information about their products and services.