Coder Social home page Coder Social logo

sdk-android's Introduction

Android mobile SDK and demo app

LiveTex Mobile SDK предоставляет набор инструментов для организации консультирования пользователей мобильных приложений.
Механизм взаимодействия с сервером основывается на новом Visitor API.

Демо

Пример использования библиотеки можно посмотреть вживую в полноценном демо приложении, поставив его на устройство через официальный Google Play.

Исходники этого демо приложения лежат в папке demo.

Подключение SDK

Release

В build.gradle (который в корне проекта) добавить репозиторий jitpack

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

В build.gradle (который в модуле приложения) добавить зависимость SDK актуальной версии (см. Releases)

dependencies {
        implementation 'com.github.LiveTex:sdk-android:x.y'
}

Настройка

Для начала нужно инициализировать обьект LiveTex. Делается это обычно в Application классе (например App.java).

new LiveTex.Builder(Const.TOUCHPOINT).build();

Укажите Touchpoint (берется в личном кабинете).

Далее можно обращаться к синглтону через LiveTex.getInstance().

Пуши

В демо приложении есть пример того, как подключить пуши и передать токен в LiveTex. Для подключения пушей нужно сначала подключить Firebase Messaging Service по их стандартной инструкции. С помощью функции FirebaseInstanceId.getInstance().getInstanceId() нужно зарегистрировать устройство в Firebase и получить в ответ device token, который в свою очередь нужно передать в билдер LiveTex. Это несинхронная операция которая требует какое-то время, поэтому функция реактивная.

Важно - функция initLiveTex() должна быть вызвана до использования класса LiveTex. Поэтому инициализировать его в случае с Firebase стоит заранее (в SplashActivity например).

public Completable init() {
	return Completable.create(emitter -> {
		FirebaseInstanceId.getInstance().getInstanceId()
				.addOnCompleteListener(task -> {
					if (!task.isSuccessful()) {
						Log.w(TAG, "getInstanceId failed", task.getException());
						initLiveTex();
						emitter.onComplete();
						return;
					}

					String token = task.getResult().getToken();
					Log.i(TAG, "firebase token = " + token);

					initLiveTex();
					emitter.onComplete();
				});
	});
}

private void initLiveTex() {
	new LiveTex.Builder(Const.TOUCHPOINT)
			.setDeviceToken(FirebaseInstanceId.getInstance().getToken())
			.build();
}

Использование

Основные классы

LiveTex - класс для настройки и получения доступа к компонентам.

NetworkManager - класс для работы с сетевым операциями, в том числе авторизация и подключение к вебосокету чата.

LiveTexMessagesHandler - класс для работы с логикой общения по вебсокету. Обработка входящих и исходящих событий.

Авторизация и подключение

Для авторизации и подключения используется один метод NetworkManager.connect(). В него передается параметры visitorToken и authTokenType.

visitorToken - токен (id) пользователя (который получили раньше или null если первая авторизация). Если у вас в системе уже есть сущность пользователя с неким айди, можете использовать его с соответствующим authTokenType;

authTokenType - тип авторизации, обычный (LiveTex система токенов) или кастомный (ваша система токенов).

В ответ система выдаст токен (сгенерирует если вы подали null или тот же самый с которым вы зашли). Если вы пользуетесь своей системой токенов, можете игнорировать ответ.

Для того, чтобы отключиться (и отключить автоматическое восстановление вебсокета) используйте метод forceDisconnect().

События в чате

Вся логика чата построена на обмене событиями (которые проходят по вебсокету) в классе LiveTexMessagesHandler

Входящие события

Со стороны экрана чата нужно подписаться на входящие события (пример есть в ChatViewModel.subscribe())

dialogStateUpdate() - обновление состояния диалога (здесь есть информация об операторе)

historyUpdate() - обновление истории диалога. Представляет собой отрезок сообщений, то есть могут прийти как и следующие сообщения, так и прошлые (при запросе предыдущей истории соответственно).

attributesRequest() - событие запроса аттрибутов. Для корректной логики на него обязательно нужно ответить sendAttributes().

departmentRequest() - событие запроса департамента (комнаты чата). Для корректной логики на него обязательно нужно ответить sendDepartmentSelectionEvent().

employeeTyping() - событие набора текста оператором.

Исходящие события

sendTextMessage(text) - отправка обычного текстового сообщения.

sendFileMessage(FileUploadedResponse) - отправка файла (картинка, документ и прочее). Перед отправкой файл нужно загрузить через ApiManager (смотрите пример в ChatViewModel.sendFileMessage()))

sendRatingEvent(isPositiveFeedback) - оценка качества диалога.

sendDepartmentSelectionEvent(departmentId) - выбор департамента (команты чата), ответ на departmentRequest().

sendAttributes(...) - отправка свойств пользователя, ответ на attributesRequest(). Набор обязательных и опциональных полей зависит от проекта.

sendTypingEvent(text) - отправка уведомления о том, что пользователь печатает текст.

getHistory(messageId) - получение предыстории сообщений, которые идут до указанного. Ответ придет в historyUpdate(), но здесь в подписке вы получите количество предыдущих сообщений. 0 означает что все сообщения загружены.

sdk-android's People

Contributors

max-s-max avatar maxxx avatar nastasias avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.