Pergunta

Estou usando robbiehanson/XMPPFramework para meu projeto atual.Como obter o status de digitação da mensagem usando XMPPFramework?Existe o protocolo XEP-184, mas eles estão obsoletos no momento.Precisa de ajuda aqui para obter o status de composição no iOS.Atenciosamente, Bhat

Foi útil?

Solução

O protocolo mais comumente usado para notificações de “contato está digitando” é XEP-0085:Notificações de estado de bate-papo.Conforme descrito com mais detalhes, a primeira mensagem para um contato deve conter um elemento de estado "ativo" (próximo ao <body/> elemento):

<active xmlns='http://jabber.org/protocol/chatstates'/>

Se o contato responder com um estado de chat, o cliente poderá prosseguir e utilizar outros estados, como "compondo":

<composing xmlns='http://jabber.org/protocol/chatstates'/>

ou "pausado" (o usuário digitou o texto, mas não está digitando ativamente):

<paused xmlns='http://jabber.org/protocol/chatstates'/>

ou "inativo" e finalmente "desaparecido" quando o usuário encerra a conversa fechando a janela de chat ou similar.

Outras dicas

Primeiro você importa:

#import "XMPPMessage+XEP_0085.h"

e então você adiciona os seguintes métodos de acordo com sua finalidade.

composição.....

- (void)sendComposingChatToUser:(XMPPJID*)jid {
    NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
    [message addAttributeWithName:@"type" stringValue:@"chat"];
    [message addAttributeWithName:@"to" stringValue:[jid full]];
    XMPPMessage *xmppMessage = [XMPPMessage messageFromElement:message];
    [xmppMessage addComposingChatState];
    [xmppStream sendElement:message];
}

Ativo.....

- (void)sendActiveChatToUser:(XMPPJID*)jid {
    NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
    [message addAttributeWithName:@"type" stringValue:@"chat"];
    [message addAttributeWithName:@"to" stringValue:[jid full]];
    XMPPMessage *xmppMessage = [XMPPMessage messageFromElement:message];
    [xmppMessage addActiveChatState];
    [xmppStream sendElement:message];
}

Inativo...

- (void)sendInactiveChatToUser:(XMPPJID*)jid {
    NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
    [message addAttributeWithName:@"type" stringValue:@"chat"];
    [message addAttributeWithName:@"to" stringValue:[jid full]];
    XMPPMessage *xmppMessage = [XMPPMessage messageFromElement:message];
     [xmppMessage addInactiveChatState];
    [xmppStream sendElement:message];
}

Perdido...

- (void)sendExitChatToUser:(XMPPJID*)jid {
    NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
    [message addAttributeWithName:@"type" stringValue:@"chat"];
    [message addAttributeWithName:@"to" stringValue:[jid full]];
    XMPPMessage *xmppMessage = [XMPPMessage messageFromElement:message];
    [xmppMessage addGoneChatState];
   [xmppStream sendElement:xmppMessage];
}

Pausado...

- (void)sendPausedChatToUser:(XMPPJID*)jid {
    NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
    [message addAttributeWithName:@"type" stringValue:@"chat"];
    [message addAttributeWithName:@"to" stringValue:[jid full]];
    XMPPMessage *xmppMessage = [XMPPMessage messageFromElement:message];
    [xmppMessage addPausedChatState];
    [xmppStream sendElement:message];
}

então você deve escrever o seguinte código em appdelgate.(didReceiveMessage).

Ex:

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{
    if ([message isChatMessageWithBody]){
}
else{
if([message elementForName:@"composing"] != nil){



        } else if ([message elementForName:@"paused"] != nil) {



        } else if ([message elementForName:@"gone"] || [message elementForName:@"inactive"] ) {


        }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top