XMPP 我需要在特定聊天对话中通过 XMPP Chat 发送打字状态

Posted

技术标签:

【中文标题】XMPP 我需要在特定聊天对话中通过 XMPP Chat 发送打字状态【英文标题】:XMPP I need to send Typing state via XMPP Chat on specific chat Dialogue 【发布时间】:2018-08-20 07:31:23 【问题描述】:

我的要求是两个用户有 2 个或超过 2 个不同的对话,但用户是相同的。因此,当一个人当时可以打字时,另一个人在与之相关的所有聊天对话中都处于打字状态。下面是我在 Sent 方法上的代码

-(void)xmpp_SendTypingNotification:(BOOL)isTyping toFriendID:(NSString*)recieverId
    XMPPMessage * xMessage = [[XMPPMessage alloc] initWithType:@"chat" to:[XMPPJID jidWithString:strAddDomain(recieverId)]];
    isTyping?[xMessage addComposingChatState]:[xMessage addInactiveChatState];
    [self.xmppStream sendElement:xMessage];

或者接收码是

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message

    if ([message isErrorMessage]) 
        return;
    

    if ([message hasChatState])
        if (!_arrTypingUsersIDs) 
            _arrTypingUsersIDs=[NSMutableArray new];
        

        NSString *otherUserID=[NSString stringWithFormat:@"%@",[message.fromStr componentsSeparatedByString:@"@"][0]];

        NSInteger typingStatus=[message hasComposingChatState]?1:0;
        [self xmpp_setTypingStatus:typingStatus ofUser:otherUserID];

    

【问题讨论】:

什么是对话框?是 xmpp 房间(xep-0045)吗? 我正在使用 XMPPFramework 进行聊天。 我知道,但在您的情况下,我不知道什么是对话框。它是你自己的实体还​​是来自 XMPPFramework 的东西 【参考方案1】:

您必须使用XEP-0085 来发送和接收聊天状态(例如正在输入或暂停输入)。

在 XMPPFramework 中,如果您想发送 正在输入聊天状态,只需发送一条消息并使用 message.addaddComposingChatState() 将撰写状态添加到消息中。

当您在第二个客户端收到消息时,您可以使用 message.hasChatStatemessage.message.hasComposingChatStatehasPausedChatState 检查消息是否处于聊天状态

【讨论】:

【参考方案2】:

之所以会这样工作,是因为您每次都会将此状态发送给其他用户:

[XMPPJID jidWithString:strAddDomain(recieverId)]] 

而不是在特定对话的上下文中。

如果您有一对一的聊天,那么您的解决方案就是合适的。

如果你有群聊(使用XEP-0045),那么你需要将打字状态发送到群室JID:

XMPPMessage *xMessage = [[XMPPMessage alloc] init];
isTyping ? [xMessage addComposingChatState] : [xMessage addInactiveChatState];
[someXMPPRoom sendMessage:xMessage];

因此,只有此特定聊天室中的用户才能收到您的状态

这是XEP-0045 implementation at XMPPFramework的链接

【讨论】:

我的查询是,即你和我正在执行 2 个任务,我想为第一个任务聊天,因此它会将输入状态发送到两个任务的聊天框。也许你和我也参与了两个以上的任务。那么如何在特定的任务聊天框中发送打字状态。 您有 2 个解决方案:1)为每个任务使用不同的群聊 2)在输入状态消息中包含一些自定义参数,以识别它连接到哪个任务 好的,现在我从你所说的一种自定义对象类方法开始。

以上是关于XMPP 我需要在特定聊天对话中通过 XMPP Chat 发送打字状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在目标c中通过ios中的XMPPFramework连接XMPP服务器

如何使用 XMPP 实现聊天列表

IOS XMPP如何使用特定用户名和聊天进入下一个控制器

从 Java 中的 Google Talk 中检索离线消息和聊天历史记录

如何使用 XMPP ios8 获取最后一个对话用户?

如何在 iOS 中使用 XMPP 删除或退出特定群聊