allychat / android-sdk

3 stars 1 forks source link

Добавление зависимости:

build.gradle в корневой папке проекта:

buildscript {
    ...
    dependencies {
        ...
        classpath "io.realm:realm-gradle-plugin:0.90.0"
    }
}

build.gradle модуля приложения:

repositories {
    ...
    jcenter()
}

android {
    ...
    packagingOptions {
        // realm-related
        exclude "lib/arm64-v8a/librealm-jni.so"
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    }
}

dependencies {
    ...
    compile ('com.magneta.sdk:chat:1.3.xx') { transitive = true }
}

На номер актуальной версии можно посмотреть здесь Конфигурация proguard-rules.pro для сдк ссылка

1. Нaчало работы с sdk

Инициализация и олучение instance чата:

new AllyChat.Builder().setContext(getApplicationContext())
                .setAlias(alias)
                .setHost(hostName)
                .setAppId(appId)
                .setGcmPushToken(token)
                .setIsLoggingEnabled(true)
                .setOnSuccessInitialize(allyChat -> {})
                .setOnFailureInitialize(errorState -> {})
                .build();

.setAlias() можно не вызывать или передавать в них пустую строку - в этом случае будет использоваться анонимный пользователь. То же c .setGcmPushToken(), в этом случае не происходит подписки на пуш-уведомления из чата.

2. Методы API

Вызовы API доступны через публичные статические методы класса AllyChatApi:

getRooms(ChatCallback<List<Room>> callback)
createRoom(String userAlias, ChatCallback<Room> callback)
getUnreadCount(String roomId, ChatCallback<Integer> callback)

messagesByOffset(Room room, int limit, int offset, ChatCallback<List<Message>> callback)
messagesBeforeMessage(Message message, Room room, int limit, ChatCallback<List<Message>> callback)
messagesAfterMessage(Message message, Room room, int limit, ChatCallback<List<Message>> callback)

readMessage(String messageLocalId, ChatCallback<Void> callback)
sendMessage(Message message, ChatCallback<Message> callback,
                                   @Nullable CountingTypedFile.ProgressListener fileUploadListener)
resendMessage(Message message, ChatCallback<Message> callback)
buildAndSend(Room room, String messageText, String filePath, CountingTypedFile.ProgressListener progressListener, @Nullable ChatCallback<Message> callback)
buildMessage(Room room, String messageText, @Nullable String filePath)

registerGcm(Context context, String token)
unRegisterGcm(Context context)

При вызове методов messagesBeforeMessage и messagesAfterMessage, а так же все отправленные и полученные через sdk сообщения кешируются. При повторном запросе того же участка переписки возвращаются сообщения из кеша.

Большинство api работают по одинаковой схеме: требуется передать в метод callback, параметризованный нужным типом. Например, для получения списка комнат:

AllyChatApi.getRooms(new SimpleChatCallback<List<Room>>() {
            @Override
            public void success(List<Room> result) {
                super.success(result);
                roomsListView.setRoomsList(result);
            }
            @Override
            public void failure(ErrorState errorState) {
                super.failure(errorState);
                // this override can be omitted
            }
});

В случае возникновения ошибочной ситуации, будет вызван метод failure переданного callback.

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

Перед отправкой запросов через AllyChatApi и для получения новых входящих сообщений, необходимо подписаться на соответствующие обратные вызовы при помощи соответствующих статических методов класса AllyChatSdk:

class ChatActivity extends AppCompatActivity implements NetworkStateListener, OnMessage {
    ...
    @Override
    public void onResume() {
        super.onResume();
        AllyChatApi.registerListeners(this);
    }

    @Override
    public void onPause() {
        super.onPause();
        AllyChatApi.unRegisterListeners(this);
    }

    @Override
    public void onStop() {
        super.onStop();
        // call this methods then you need to finish working with chat. To use chat again, build new AllyChat instance
        AllyChat.getInstance().close();
    }

    ...
}

Пример отправки сообщения с текстом text в комнату room:

AllyChatApi.sendMessage(AllyChatUtils.messageFromText(text, room), AllyChatUtils.chatCallback(sentMessage -> {}, error -> {}),  null);

если нужно исползовать суппорт комнату, можно воспользоваться AllyChatUtils.supportRoom()

Пример отправки сообщения с изображением:

AllyChatApi.buildAndSend(room, messageText, absoluteFilePath, progressListener, callback);

4 Уведомления

Уведомление о новом сообщении приходит в в общий MessageStatusCallback на который клиент подписывается посредством AllyChatApi.registerListeners(this);

@Override
public void onMessage(@NonNull Message message) {
    roomView.addMessageToList(message);
}

Уведомление о завершении операций, для которых нет callback, приходят в onMessageStatusChanged:

@Override
public void onMessageStatusChanged(@NonNull Message message) {
    roomView.updateMessageInList(message);
}