SDK

Общие принципы работы

Для доступа к функциям API Sender используется класс ChatFacade. Пример создания экземпляра класса:

    chat = new ChatFacade(
        URL,                                                 // адрес сервера. Использовать ChatFacade.URL_PROD
        pref.getString(App.PROP_SID, ChatFacade.SID_UNDEF),  // сохранённый sid
        Tool.getImei(this),                                // IMEI, аппаратный идентификатор устройства
        Tool.getDeviceName(),                      // Имя модели устройства
        Tool.getDevType(),                         // Тип устройства (всегда “phone”)
        Tool.getVersion(),                         // Версия клиентского приложения (из AndroidManifest.xml)
        Tool.getServerVersion(),                   // Поддерживаемая версия протокола сервера (сейчас 7)
        new ChatFacade.SenderListener() {

           @Override
           public void onReg(String sid) {
               // регистрация устройства выполнена. Сохранить sid в SharedPreferences, очистить базу, начать новую синхронизацию
           }

           @Override
           public void onNeedUpdate() {
               // версия протокола на сервере несовместима с раелизованной на клиенте: предложить клиенту обновить приложение
           }

           @Override
           public void onRegError(Exception e) {
               // ошибка регистрации, выйти из приложения
           }

           @Override
           public void onData(JSONObject jo) {
               // новое сообщение с сервера, обработать в новом потоке
           }
        }
            

Для выполнения конкретных операций используются статические методы класса ChatFacade.

Отправка GCM-токена

Для передачи клиенту сообщений при отсутствии постоянного соединения Sender-сервер использует Google Cloud Messaging. Чтобы активировать эту возможность следует получить GCM-токен и передать его на сервер вызовом:

    chat.sendToken(token);
            

Выполнять эту операцию рекомендуется при каждом входе в приложение, обновляя токен.

Разрыв соединения с Sender-сервером

    chat.stop();
            

Рекомендуется выполнять при длительном бездействии пользователя и отсутствии сообщений с сервера, при уходе приложения в фон и т.п. Если при выключенном соединении на сервере внимания клиента будет ожидать сообщение, сервер пришлет на устройство GCM-сообщение вида:

    {
        "status":"wake_up"
    }
            

При получении этого сообщения нужно создать новый экземпляр ChatFacade, что вызовет открытие соединения с сервером и сообщения будут получены.

Отправка и получение события “пользователь печатает”

    chat.sendTyping(chatId);
            

где chatId - идентификатор чата в котором печатает данный пользователь.

Отсылать рекомендуется при увеличении длины вводимой строки в чате на 2-3 символа.

Событие будет доставлено в виде json-структуры:

    {
        "chatId": "user+be414da4-d876-4d21-9b5c-986863205f3b",
        "formId": "typing",
        "robotId": "routerobot",
        "companyId": "sender",
        "model": {
            "from": "be414da4-d876-4d21-9b5c-986863205f3b"
        }
    }
            

model.from - id пользователя который печатает.

chatId - id чата, в котором происходит событие.

При получении события на 1-2 секунды следует активировать индикатор (надпись), показывающий что пользователь печатает. Если получено текстовое сообщение - индикатор следует скрыть.

Отправка и получение текстовых сообщений

    chat.sendMessage(text, chatId, new ChatFacade.SendMsgListener() {
        @Override
        public void onSuccess(String msgId, long time) {
        // сообщение отправлено. В базе сообщений следует сохранить id сообщения на сервере (msgId) и серверное время (time)
        }

        @Override
        public void onError(Exception e) {
        // сообщение не отправлено. Обновляем статус сообщения, чтобы клиент видел что оно не отправлено и мог повторить отправку
        }
    });
            

Событие будет доставлено в виде json-структуры:

    {
        "from": "be414da4-d876-4d21-9b5c-986863205f3b",
        "chatId": "user+be414da4-d876-4d21-9b5c-986863205f3b",
        "formId": "text",
        "robotId": "routerobot",
        "companyId": "sender",
        "packetId": "90364",
        "model": {
            "text": "gggggfgjggfgh"
        },
        "created": 1429694199022
    }
            

model.text - текст сообщения

fromId - id отправителя

chatId - id чата, в котором происходит событие

created - серверное время сообщения (unix timestamph, для сортировки)

Если сообщение в чат послано самим пользователем с другого устройства, то в поле fromId будет константа “me”.