Smack XMPP не возвращается после входа в систему более двух минут

Я использую smack-android:4.2.0 для создания простого приложения чата для групп. Я создал чат MUC, все, включая подписку, работает нормально. Если я выйду из системы, а затем снова войду в систему в течение 2 минут, то пользователь автоматически присоединится к группам, но если пользователь войдет в систему через 2 минуты, он не сможет присоединиться ни к одной группе.

Вот как я создаю группу

public void creatGroupTaskXMPP(String groupImageServerPath , String groupname , String userids) {
    try
    {
        if(connection.isAuthenticated())
        {
            MyPreferences myPreferences = new MyPreferences(context);
            MultiUserChat chatRoom = MyXMPP.multiUserChatManager.getMultiUserChat(MyXMPP.createEntityBareJID(myPreferences.getUSER_ID() + "_" + CommonMethods.getCurrentGMTTime(0) + "@conference."
                + context.getString(R.string.server)));

            MyXMPP.multiUserChatManager.setAutoJoinOnReconnect(true);

            MultiUserChat.MucCreateConfigFormHandle myRoom = chatRoom.createOrJoin(Resourcepart.from(AppConstants.csUserID));

            if (myRoom != null) {

                chatRoom.addMessageListener(multiChatMsgListener);
                chatRoom.addParticipantStatusListener(mChatParticipantStatusListener);
                chatRoom.addParticipantListener(MCPresenceListener);
                chatRoom.addPresenceInterceptor(MCPresenceListener);

                Form form = chatRoom.getConfigurationForm().createAnswerForm();
                form.setAnswer("muc#roomconfig_roomname", groupname);
                form.setAnswer("muc#roomconfig_persistentroom", true);
                form.setAnswer("muc#roomconfig_allow_subscription", true);
                form.setAnswer("muc#roomconfig_mam", true);

                List<Affiliate> affiliates = chatRoom.getOwners();

                chatRoom.sendConfigurationForm(form);

                addSubscription(chatRoom);

                ArrayList<EntityBareJid> JabberIdList = new ArrayList<EntityBareJid>();

                String str[] = userids.split(",");
                for (int i = 0; i < str.length; i++)
                {
                    if(userids != null && userids.length() > 0)
                        JabberIdList.add(createEntityBareJID(userids + "@" + context.getString(R.string.server)));
                }

                JSONObject jsonObject = createJsonForInvite(str , groupImageServerPath );

                for (int i = 0; i < str.length; i++)
                chatRoom.invite(createEntityBareJID(str[i] + "@" + context.getString(R.string.server)), jsonObject.toString());
                String room_Id[] = chatRoom.getRoom().toString().split("@");
                CreatGroup.updateDB(jsonObject , room_Id[0]);
            }
        }
        else
        {
            if(login())
            {
                creatGroupTaskXMPP(groupImageServerPath , groupname, userids);
            }
        }

    }
    catch (Exception ed)
    {
        ed.printStackTrace();
        Logger.errorLog("Group Crate Exception Message = " + ed.getMessage());
    }

}

и это мой метод подписки

public void addSubscription(MultiUserChat chatRoom)
{
    String csSubId = AppConstants.csUserID + "_" + System.currentTimeMillis()/1000;


    try
    {
        IQ iq = new IQ("subscribe", "urn:xmpp:mucsub:0") {
            @Override
            protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml)
            {
                String csXMLString = xml.toString();

                //xml.xmlnsAttribute();

                xml.attribute("nick", AppConstants.csUserID);
                xml.attribute("password", "");
                xml.rightAngleBracket();

                xml.halfOpenElement("event");
                xml.attribute("node", "urn:xmpp:mucsub:nodes:messages");
                xml.closeEmptyElement();

                xml.halfOpenElement("event");
                xml.attribute("node", "urn:xmpp:mucsub:nodes:affiliations");
                xml.closeEmptyElement();

                xml.halfOpenElement("event");
                xml.attribute("node", "urn:xmpp:mucsub:nodes:subject");
                xml.closeEmptyElement();

                xml.halfOpenElement("event");
                xml.attribute("node", "urn:xmpp:mucsub:nodes:config");
                xml.closeEmptyElement();

                xml.halfOpenElement("event");
                xml.attribute("node", "urn:xmpp:mucsub:nodes:presence");
                xml.closeEmptyElement();

                xml.halfOpenElement("event");
                xml.attribute("node", "urn:xmpp:mucsub:nodes:system");
                xml.closeEmptyElement();

                //xml.closeElement("subscribe");
                csXMLString = xml.toString();

                return xml;
            }
        };


        iq.setFrom(AppConstants.csEJabberedId);
        iq.setTo(chatRoom.getRoom());
        iq.setStanzaId(StanzaIdUtil.newStanzaId());
        iq.setType(IQ.Type.set);

        String csStanzaXML = iq.toString();

        connection.createStanzaCollectorAndSend(iq).nextResultOrThrow();
        //sendStanza(iq);
    }
    catch (Exception ed)
    {
        ed.printStackTrace();
        Logger.errorLog("Group Crate Exception Message = " + ed.getMessage());
    }
    //IQElement iqElement = new IQElement(AppConstants.appContact.csEJabberedId, chatRoom.getRoom(), "set", csSubId);


    // iqElement.addCustomElement(subscribeElement);

    //String responseString = iqElement.toXML().toString();

    //chatRoom.sendMessage(responseString);
}

Я проверил некоторые ответы на SO, но все они для более старых версий или не актуальны.

Через Интернет некоторые темы, кажется, отвечают на это, как будто невозможно вернуться в старые комнаты, но в IOS это возможно. Я надеюсь, что для Android тоже будет такая же функция.

Благодарю.

0 ответов

Другие вопросы по тегам