2017-12-17 9 views
1

オフラインメッセージが機能しないopenfire、smack、アンドロイドでチャットアプリケーションを試しています。両方のユーザーがオンラインの場合、メッセージを正しく送受信できます。しかし、ユーザAがオフラインで、ユーザBがメッセージを送信した場合、ユーザAはオンラインになった時点でBの送信メッセージを取得しません。以下のコードを使用してオフラインメッセージを取得します。スラックでオフラインメッセージが表示されない

新しいスレッド(){ ます。public void実行(){

  XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() 

        .setSocketFactory(SocketFactory.getDefault()) 

        .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) 

        .setServiceName("123.456.0.854")//service name 

        .setHost("123.456.0.854") // host name 

        .setPort(5222) //port 

        .setUsernameAndPassword("phone", "admin") 
        .setConnectTimeout(40000) 

        .setCompressionEnabled(false).build(); 

      connection = new XMPPTCPConnection(config); 

      try { 
       connection.connect(); 
       connection.login("phone", "admin"); 
       Presence presence = new Presence(Presence.Type.available); 
       presence.setStatus("Available"); 
       try { 
        connection.sendStanza(presence); 
       } catch (SmackException.NotConnectedException e) { 
        e.printStackTrace(); 
       } 
      } catch (SmackException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (XMPPException e) { 
       e.printStackTrace(); 
      } 



      OfflineMessageManager offlineMessageManager = new OfflineMessageManager(connection); 

      try { 
       System.out.println("Count is " +offlineMessageManager.getMessageCount()); 
      } catch (SmackException.NoResponseException e) { 
       e.printStackTrace(); 
      } catch (XMPPException.XMPPErrorException e) { 
       e.printStackTrace(); 
      } catch (SmackException.NotConnectedException e) { 
       e.printStackTrace(); 
      } 

     } 
    }.start(); 

答えて

0

は、多くの闘争の後、私は問題を解決してきました。あなたのopenfireの管理ページで、「クライアントの設定」に行き、アイドル時間を360秒(デフォルト)から1秒(おそらく)に減らしてください。インターネットから切断されたときだけ、オフラインであることが検出され、残りのメッセージはオフラインとして保存されます。

onNetworkConnectionChanged @Overrideます。public void(ブール値を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(スタンザ、ユーザータイプ);"着信メッセージを処理してアダプターを更新するために使用されます。再接続するとプレゼンスを「使用可能」として送信してください。まだ問題がある場合はお知らせください。

関連する問題