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.hasChatState
或 message.message.hasComposingChatState
或 hasPausedChatState
检查消息是否处于聊天状态
【讨论】:
【参考方案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服务器