Я пытаюсь создать клиент для чата Android, используя сервер ejabberd XMPP (19.02), библиотеку Smack (4.2.4) и Android SDK 25, используя Android Studio.
Я следовал примеру приложения, найденного здесь: https://www.blikoontech.com/tutorials/android-smack-xmpp-introductionbuilding-a-simple-client
Все работает хорошо, и я могу отправлять сообщения между двумя различными устройствами Android, работающими с этим примером приложения.
В ejabberd есть опции для отправки сообщений клиентам прямо с сервера с помощьюинструмент CLI под названием ejabberdctl или ejabberd REST API.Когда я отправлял сообщения таким образом, клиент Android не получает эти сообщения.Я пытался с другими клиентами, такими как беседы и Gajim, и они все могли получить его.Я почти уверен, что сообщения, отправленные с использованием этих методов, пришли, потому что они были получены как автономные сообщения (через веб-администратора ejabberd) при отправке автономным клиентам.
Вот часть кода Android (java) (roosterconnection.java из этого примера приложения), предназначенная для приема входящих сообщений.Пожалуйста, предложите мне, если я что-то упустил.Большое спасибо.
ChatManager.getInstanceFor(mConnection).addIncomingListener(new IncomingChatMessageListener() {
@Override
public void newIncomingMessage(EntityBareJid messageFrom, Message message, Chat chat) {
///ADDED
Log.d(TAG,"message.getBody() :"+message.getBody());
Log.d(TAG,"message.getFrom() :"+message.getFrom());
String from = message.getFrom().toString();
String contactJid="";
if ( from.contains("/"))
{
contactJid = from.split("/")[0];
Log.d(TAG,"The real jid is :" +contactJid);
Log.d(TAG,"The message is from :" +from);
}else
{
contactJid=from;
}
//Bundle up the intent and send the broadcast.
Intent intent = new Intent(RoosterConnectionService.NEW_MESSAGE);
intent.setPackage(mApplicationContext.getPackageName());
intent.putExtra(RoosterConnectionService.BUNDLE_FROM_JID,contactJid);
intent.putExtra(RoosterConnectionService.BUNDLE_MESSAGE_BODY,message.getBody());
mApplicationContext.sendBroadcast(intent);
Log.d(TAG,"Received message from :"+contactJid+" broadcast sent.");
///ADDED
}
});