Я работаю в компании, которая использует Google Chatback (анонимный чат с сотрудником службы поддержки в случае моей компании) в качестве основного поставщика услуг чата. Эта служба использует XMPP (ранее известный как Jabber) протокол для отправки и получения сообщений.
Наша компания имеет десять учетных записей сотрудников службы поддержки, и они доступны через службу чата, которую мы использовали на нашем веб-сайте. Сотрудники используют Mac OSX и Windows, а также разные клиенты в разных ОС. Чат также доступен через собственные приложения как для Android, так и для iOS.
Нам нужна служба для регистрации сеансов чата, и мы изучаем собственные решения, но они не поддерживаются в мобильных платформ, и это в основном решающий фактор.
Я решил ввести еще одно звено в цепочке сообщений, которое регистрирует все сообщения. Идея состоит в том, что сервер отправляет через этот прокси-сервер, который регистрирует сообщения в соответствии с указав, какой это сеанс чата, а затем сохраняет эти журналы соответствующим образом. В настоящее время они хранят все журналы в папке Dropbox, что может привести к ошибкам.
Теоретически это позволит нашим сторонникам использовать любую ОС / клиент, которые они выберут, и журналы окажутся в том же месте .
Проведя несколько тестов с использованием Smack API, я пришел к выводу, что мой клиент XMPP (Trillian как на Android, так и на Windows) отвечает на ресурс, от которого он в последний раз получил сообщение. Фактически это означает, что реализованный мною очень простой регистратор чата просто игнорируется.
Тест проводился с использованием приведенного ниже кода в сочетании с другим клиентом, который работает параллельно. Только один из клиентов получает сообщение.
ConnectionConfiguration config = new ConnectionConfiguration("talk.google.com", 5222, "googlemail.com");
config.setSecurityMode(ConnectionConfiguration.SecurityMode.required);
config.setSASLAuthenticationEnabled(true);
XMPPConnection connection = new XMPPConnection(config);
connection.connect();
Presence presence = new Presence(Presence.Type.unavailable);
connection.login("android_client_username", "android_client_pass");
Message message = new Message("my_test_email@gmail.com");
message.setBody("Hello World!");
connection.sendPacket(message);
connection.sendPacket(presence);
connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
if (packet instanceof Message) {
Message message = (Message) packet;
System.out.println(message.getBody());
}
}
}, new MessageTypeFilter(Message.Type.chat));
Спасибо за ваше время.