An open API service indexing awesome lists of open source software.

https://github.com/chat21/chat21-android-sdk

Android Chat SDK built on Firebase
https://github.com/chat21/chat21-android-sdk

android chat chat-application firebase messaging sdk

Last synced: 2 months ago
JSON representation

Android Chat SDK built on Firebase

Awesome Lists containing this project

README

        

Chat21 is the core of the open source live chat platform [Tiledesk.com](http://www.tiledesk.com).

# Chat21 SDK Documentation

## Features

With Chat21 Android SDK you can:

- Send a direct message to a user (one to one message)
- Emoji support
- Attach pictures support
- Create group chat
- View the messages history
- View the group list
- The read receipts feature allows your users to see when a message has been sent, delivered and read
- Conversations list view with the last messages sent (like Whatsapp)
- With the Presense Manager you can view when a user is online or offline and the inactivity period
- View the user profile with fullname and email
- Login with email and password (Use firebase email and password authentication method )
- Signup with fullname, email, password and profile picture
- Contacts list view with fulltext search for fullname field

## Sample

### Screenshots
| |

|

### Google Play Demo
[![get_it](http://evolvex.it/mobyx/images/nav/gplay-blk.png)](https://play.google.com/store/apps/details?id=chat21.android.demo)

### Demo

Demo app source code is available [here](https://github.com/chat21/chat21-android-demo)

Yo can build your own chat following our [official tutorial](http://www.chat21.org/docs/android/get-started/)

## Pre requisites

Before you begin, you need a few things to set up in your environment:

* a Firebase project correctly configured
* Chat21 Firebase cloud functions installed. See detailed [instructions](https://github.com/chat21/chat21-cloud-functions)
* google-services.json for you app. See official [documentation](https://developers.google.com/android/guides/google-services-plugin)

## Firebase libs

### /project/build.gradle

First, include the google-services plugin and the Google’s Maven repository to your root-level build.gradle file:

```
buildscript {
// ...
dependencies {
// ...
classpath 'com.google.gms:google-services:3.1.1'
}
}

allprojects {
// ...
repositories {
// ...
google()
}
}

```


build.gradle

open


### /project/app/build.gradle
Then, in your module Gradle file (usually the app/build.gradle), add the apply plugin line at the bottom of the file to enable the Gradle plugin:

```
apply plugin: 'com.android.application'
// ...
dependencies {
// ...
implementation "com.google.android.gms:play-services:11.8.0"
}
// ...
apply plugin: 'com.google.gms.google-services'

```


build.gradle

open


## Install Chat21 libraries
Set:
* minimun SDK at least at ***API 19***
* targetSdkVersion at ***API 22***

Add the following to your app/build.gradle file:

```
defaultConfig {
// ...
multiDexEnabled true
}
dependencies {
// ...
compile 'com.android.support:multidex:1.0.1'
compile "com.google.android.gms:play-services:11.8.0"
compile 'com.android.support:design:26.1.0'

compile 'org.chat21.android:chat21:1.0.10'
compile 'com.vanniktech:emoji-ios:0.5.1'
}
// ...
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '26.1.0'
}
}
}
}
```


build.gradle

open


### Google Play Services plugin

Finally, as described in the [documentation](https://firebase.google.com/docs/android/setup#manually_add_firebase), paste this statement as the last line of the file:

`apply plugin: 'com.google.gms.google-services'`

At the end, you'll download a `google-services.json` file. For more informations refer to the relative [documentation](https://support.google.com/firebase/answer/7015592)

### Application

Create a custom Application class

```
public class AppContext extends Application {

@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this); // add this
}
}
```


AppContext.java

open


and add it to the Manifest.xml

```

```


AndroidManifest.xml

open


### Style

Replace the default parent theme in your styles.xml

```

```

to

```
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

```

you will obtain something like :

```
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>

```


styles.xml

open


### Chat21 SDK initialization

#### ChatManager

The Chat21 SDK provide a ***Chat.Configuration*** object which allows to set some custom behaviour
and settings for your chat.

To create a new instance of Chat21 SDK you have to create your own configuration (using the
Chat21 SDK Chat.Configuration.Builder) and use it as paramater for the method `Chat.initialize(configuration);`

```
// optional
//enable persistence must be made before any other usage of FirebaseDatabase instance.
FirebaseDatabase.getInstance().setPersistenceEnabled(true);

// mandatory
// it creates the chat configurations
ChatManager.Configuration mChatConfiguration =
new ChatManager.Configuration.Builder()
.firebaseUrl()
.storageBucket()
.build();

ChatManager.start(, mChatConfiguration, );

```

Replace:

- `` with your appId;
- `` with your Firebae Database URL of your Firebase App;
- `` with your Firebae Storage Bucket URL of your Firebase App;
- `` with your Context;
- `` with your current logged user, assuming it is an instance of IChatUser


AppContext.java

open


#### ChatUI

ChatUI allows you to quickly connect common UI elements to Chat21 SDK APIs.

ChatUI lets you start your chat with both an activity and a inside a fragment.

Initialize the ChatUI component with the following instruction

```
ChatUI.getInstance().setContext(this);
```

##### Launch with an activity

It starts a new activity that contains the list of conversations.

```
ChatUI.getInstance().showConversationsListActivity();

```


Example.java

open


##### Launch with a fragment

You have to create a fragment with a container inside.

The chat will start inside this container where the list of conversations is shown.

```


```

Now you can show your chat with the following method:

```
ChatUI.getInstance().openConversationsListFragment(getChildFragmentManager(), R.id.container);

```


ChatFragment.java

open


### Common Issues

- Conflicts within `com.android.support`

Error:
```
* What went wrong:
Execution failed for task ':app:processDebugResources'.
> Failed to execute aapt
```
Solution:
Copy this block at the bottom of your file **/project/app/build.gradle**
```
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '26.1.0'
}
}
}
}
```

- MultiDex

Error:
```
Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
```
Solution:
Make sure you have added `multiDexEnabled true ` inside of **/project/app/build.gradle**

Copy this block inside of your custom Application class
```
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
```

- Theme

Error:
```
RuntimeException: Unable to start activity ComponentInfo{my.sample.package.myapplication/chat21.android.ui.conversations.activities.ConversationListActivity}: java.lang.IllegalStateException:
This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
```

Solution:
See the Style section

- Application name exceptions:

Error:

```
/android/MyApp/app/src/main/AndroidManifest.xml:30:9 Error:
Attribute application@label value=(@string/application_name) from AndroidManifest.xml:30:9
is also present at {Library Name} value=(@string/app_name)
Suggestion: add 'tools:replace="android:label"' to element at AndroidManifest.xml:26:5 to override
```

Solution:
Add the ` tools:replace="android:label"` to override the Chat21 SDK app name and default icon:

```

. . .


```


AndroidManifest.xml

open


## Deploy JCenter

Follow this [guide](https://github.com/chat21/chat21-android-sdk/wiki/JCenter-Deploy) to deploy your own library to JCenter