2015-09-08 4 views
2

Я отсутствует Сообщения опция включена в OpenFire server.But я не могу получить сообщения в автономном режимеMissing Offline Сообщения asmack (Android)

Пользователь А находится в сети, пользователь B онлайн, в этом случае я способный получать сообщения.

Теперь пользователь B выключил WiFi (Примечание: Пользователь A выжидала пользователя B Session полностью убит на сервере)

Теперь пользователь A отправить сообщение пользователю B

в этом случае I» m, чтобы видеть сообщение в автономной таблице openfire.

Теперь пользователь B снова в сети сервер отправляет сообщение пользователю B, поскольку сервер узнает, что пользователь B находится в сети (сообщение исчезло из таблицы автономных сообщений).

Но пользователь B не получит это сообщение.

connection.login(userName, userPwd, UiUtility.getMyPhoneNO()); 
PacketFilter filter = new PacketTypeFilter(org.jivesoftware.smack.packet.Message.class); 
packetListener =new PacketListener() { 
public void processPacket(Packet packet) { 
Message message = (Message) packet; 


if (message.getBody() != null) { 
    String fromName = StringUtils.parseBareAddress(message 
    .getFrom()); 
    Log.i("XMPPClient", "Got text [" + message.getBody() 
    + "] from [" + fromName + "]"); 
    } 
    } 
    }; 
    connection.addPacketListener(packetListener, filter); 

Снова после успешного входа в систему им удалось нормально общаться. Но меня интересует, почему эти автономные сообщения отсутствуют? .My PacketListener не в состоянии поймать эти сообщения в автономном режиме. Пожалуйста, помогите мне

+0

Hi @Phanindra. Вы нашли какое-либо решение. я тоже застрял в такой же ситуации. –

ответ

0

Asmack desreceated. Используйте Smack. Клиентская библиотека с открытым исходным кодом XMPP, написанная на Java для JVM и Android. Добавьте следующие строки в файл вашего градиента:

compile 'org.igniterealtime.smack:smack-android:4.1.3' 
compile 'org.igniterealtime.smack:smack-tcp:4.1.3' 
compile 'org.igniterealtime.smack:smack-extensions:4.1.3' 
0

Проблема легко решить. Перед подключением к серверу XMPP просто зарегистрируйте поставщиков, используя класс ProviderManager, предоставленный библиотекой ASmack.

Если это не поможет решить проблему ur, зайдите на локальный сервер ur и выполните поиск автономных сообщений и выберите опцию ALLWAYS STORE, чтобы установить ограничение хранения на 1000 кб. По умолчанию это 100 kb. Надеюсь, что это сработает.

0

После борьбы за партию, я решил проблему. На странице администрирования openfire перейдите к «настройкам клиента» и уменьшите время простоя с 360 секунд (по умолчанию) до 1 секунды (может быть). Только тогда, когда вы отключитесь от Интернета, он сможет обнаружить, что вы находитесь в автономном режиме и сохраняете остальную часть сообщений как OFFLINE.

@Override общественного недействительными onNetworkConnectionChanged (булево IsConnected) {

if(isConnected){ 
     new Thread() { 

      public void run() { 
       try { 
        XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder(); 
        builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 
        builder.setUsernameAndPassword("phone", "admin"); 
        builder.setSendPresence(true); 
        builder.setServiceName(<Service name>); 
        builder.setHost(<Host name>); 
        builder.setResource("Test"); 
        builder.setDebuggerEnabled(true); 
        Presence presence = new Presence(Presence.Type.available); 
        presence.setStatus("Available"); 
        connection = new XMPPTCPConnection(builder.build()); 
        connection.connect(); 
        connection.login(); 
        Presence presence123 = new Presence(Presence.Type.available); 
        presence123.setStatus("Available"); 
        try { 
         connection.sendStanza(presence123); 
        } catch (SmackException.NotConnectedException e) { 
         e.printStackTrace(); 
        } 
        StanzaFilter filter = new AndFilter(new StanzaTypeFilter(Message.class)); 
        PacketListener myListener = new PacketListener() 
        { 
         public void processPacket(Stanza stanza) 
         { 
          retrieveMessage(stanza,userType); 
         } 
        }; 
        connection.addPacketListener(myListener, filter); 
        try { 
         connection.sendStanza(presence); 
        } catch (SmackException.NotConnectedException e) { 
         e.printStackTrace(); 
        } 

       } catch (SmackException | XMPPException | IOException e) { 
        e.printStackTrace(); 
       } 


       //return connection.isConnected(); 
      } 

     }.start(); 

выше работает отлично и способен извлекать сообщения в автономном режиме. Метод «retrieveMessage (stanza, userType)»; используется для обработки входящего сообщения и обновления адаптера. Обязательно отправьте Присутствие как «Доступно» при повторном подключении. Пожалуйста, дайте мне знать, если все еще есть проблемы.