如何实时获取离线消息asmack(Android)

时间:2019-05-14 03:01:08

标签: android asmack

嗨,我是openfire的新手。

我在openfire服务器中启用了离线消息选项。

用户A在线,用户B在线,在这种情况下,我能够收到消息。

现在,用户B关闭其WiFi(注意:用户A等到用户B会话在服务器中被完全杀死),现在用户A向用户B发送了一条消息。现在,用户B再次联机,服务器正在向该用户发送该消息B在 10分钟

我的代码

private class MyLoginTask extends AsyncTask<String, String, String> {
  @Override
  protected String doInBackground(String... params) {
   realm = Realm.getDefaultInstance();
    dataUsers = realm.where(EntityUsers.class).findFirst();
    if (dataUsers != null) {
        userName2 = dataUsers.getUsername();
        password = dataUsers.getPass();
        } 
     new Thread() {
        @Override
          public void run() {
            InetAddress addr = null;
          try {
                addr = InetAddress.getByName(domainAddress);
              } catch (UnknownHostException e) {
                e.printStackTrace();
              }
            HostnameVerifier verifier = new HostnameVerifier() {
              @Override
            public boolean verify(String hostname, SSLSession session) {
                     return false;
                }
             };
             DomainBareJid serviceName = null;
              try {
                    serviceName = JidCreate.domainBareFrom(domainAddress);
                } catch (XmppStringprepException e) {
                    e.printStackTrace();
                }
                XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
                        .setUsernameAndPassword(userName2, password)//userName2,"spinku12345"
                        .setPort(5222)
                        .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                        .setXmppDomain(serviceName)
                        .setHostnameVerifier(verifier)
                        .setHostAddress(addr)
                        .setDebuggerEnabled(true)
                        .setSendPresence(true)
                        .build();
                mConnection = new XMPPTCPConnection(config);
                try {
                    mConnection.connect();

                    if(mConnection.isConnected()) {
                        Log.w("app", "conn done");
                    }
                    mConnection.login();

                    if (mConnection.isAuthenticated() && mConnection.isConnected()) {

                        Log.e(TAG, "run: auth done and connected successfully");
                        ChatManager chatManager = ChatManager.getInstanceFor(mConnection);
                        chatManager.addListener(new IncomingChatMessageListener() {
                            @Override
                            public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {
                                Log.e(TAG, "New message from " + from + ": " + message.getBody());
                                final MessagesData data = new MessagesData("(" + getTime() + ")" + userName1, message.getBody().toString(), 0);//received
                                mMessagesData.add(data);
                                vibrator.vibrate(500);
                                mRingtone.play();
                                //now update recyler view
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        //this ui thread important otherwise error occur
                                        mAdapter = new Adapter(mMessagesData);
                                        mRecyclerView.setAdapter(mAdapter);\
                                    }
                                });
                            }
                        });
                    }
                } catch (SmackException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (XMPPException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }.start();

        return "";
    }

如何设置服务器以实时发送脱机消息。

0 个答案:

没有答案