Запросы квитанции доставки, не работающие для XMPP Android (aSmack)

Я использую OpenFire с aSmack.

Кажется, я не могу заставить службы **************** работать.

Я делаю следующее, когда создаю соединение:

//create connection
connection.login(username, password);
**********************.getInstanceFor(connection).******************();
**********************.getInstanceFor(connection).**************************(new ***********************()
{
 @Override
 public void *****************(String arg0, String arg1, String arg2)
 {
 Log.v("app", arg0 + ", " + arg1 + ", " + arg2);
 }
});

Я отправляю сообщение другому пользователю, используя:

//send chat
Message msg = new Message(id, Message.Type.chat);
msg.setBody(chat);
**********************.*************************(msg);
connection.sendPacket(msg);

Вышеупомянутое не работает, хотя сообщение отправляется с **************. Слушатель не запускается в конце отправителя, хотя получатель получает сообщение. (Я подтвердил это с помощью отладки, что приложение Delivery************** действительно привязано к отправляемому сообщению).

Я также попробовал вручную отправить обратно квитанцию, используя следующее в моем PacketListener (MessageTypeFilter (Message.Type.chat)):

Packet received = new Message();
received.addExtension(new ***************(packet.getPacketID()));
received.setTo(packet.getFrom());
getConnection().sendPacket(received);

Тем не менее клиент на принимающей стороне получает сообщение в порядке, но слушатель не запускается в системе отправителя. Что-нибудь мне не хватает?

2 ответа

Добавьте эти строки до того, как вы настроите свое соединение, и автоматические квитанции будут работать с ***********************. Похоже, что расширения *************** по умолчанию не зарегистрированы.

ProviderManager.getInstance().addExtensionProvider(***************.ELEMENT, ***************.NAMESPACE, new ***************.Provider());
ProviderManager.getInstance().addExtensionProvider(***************Request.ELEMENT, new ***************Request().getNamespace(), new ***************Request.Provider());


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

ProviderManager pm = ProviderManager.getInstance();
 pm.addExtensionProvider("x", "jabber:x:event",new MessageEventProvider()); 
MessageEventManager messageEventManager = new MessageEventManager(connection);
 messageEventManager.addMessageEventNotificationListener(m_messageEventNotificationListener);
 messageEventManager.addMessageEventRequestListener(m_DefaultMessageEventRequestListener);
/*
 * Notifies when message events happend
 * 
 */
 MessageEventNotificationListener m_messageEventNotificationListener = new MessageEventNotificationListener() {
 @Override
 public void deliveredNotification(String fromJID, String messageID) {
 final String _messageID =messageID;
 System.out.println("deliveredNotification");
 UiUtility.printMe("Message("+messageID+") Was Delivered to "+fromJID);
//WRITE YOUR CUSTOM METHOD WHEN MSG DELIVERED NOTFICATIONN RECIEVED.
 }
 @Override
 public void displayedNotification(String string, String string1) {
 }
 @Override
 public void composingNotification(String string, String string1) {
 }
 @Override
 public void offlineNotification(String string, String string1) {
 }
 @Override
 public void cancelledNotification(String string, String string1) {
 }
 };
 /*
 * Send a request when message events occured
 */
 DefaultMessageEventRequestListener m_DefaultMessageEventRequestListener = new DefaultMessageEventRequestListener() {
 @Override
 public void deliveredNotificationRequested(String from, String packetID, MessageEventManager messageEventManager) {
 super.deliveredNotificationRequested(from, packetID, messageEventManager); //To change body of generated methods, choose Tools | Templates.
 }
 @Override
 public void displayedNotificationRequested(String from, String packetID, MessageEventManager messageEventManager) {
 super.displayedNotificationRequested(from, packetID, messageEventManager); //To change body of generated methods, choose Tools | Templates.
 }
 @Override
 public void offlineNotificationRequested(String from, String packetID, MessageEventManager messageEventManager) {
 super.offlineNotificationRequested(from, packetID, messageEventManager); //To change body of generated methods, choose Tools | Templates.
 }
 @Override
 public void composingNotificationRequested(String from, String packetID, MessageEventManager messageEventManager) {
 super.composingNotificationRequested(from, packetID, messageEventManager); //To change body of generated methods, choose Tools | Templates.
 }
 };

licensed under cc by-sa 3.0 with attribution.