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 для сдк ссылка
Инициализация и олучение instance чата:
new AllyChat.Builder().setContext(getApplicationContext())
.setAlias(alias)
.setHost(hostName)
.setAppId(appId)
.setGcmPushToken(token)
.setIsLoggingEnabled(true)
.setOnSuccessInitialize(allyChat -> {})
.setOnFailureInitialize(errorState -> {})
.build();
.setAlias()
можно не вызывать или передавать в них пустую строку - в этом случае будет использоваться анонимный пользователь.
То же c .setGcmPushToken()
, в этом случае не происходит подписки на пуш-уведомления из чата.
Вызовы 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.
Перед отправкой запросов через 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);
Уведомление о новом сообщении приходит в в общий 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);
}