【问题标题】:IOS Chat application using XMPP Protocol (ejabberd) Room chat issueIOS 聊天应用程序使用 XMPP 协议 (ejabberd) 房间聊天问题
【发布时间】:2015-06-14 19:37:31
【问题描述】:

我正在使用 XMPP 协议 (ejabberd) 开发 IOS 聊天应用程序。我的聊天室是在我的服务器上创建的,它会将 roomID 返回给我。

我在房间/群聊中遇到问题。当我发送一条消息时,它会重复不止一次,比如 3 到 4 次。如何解决这个问题。我的代码在这里

 XMPPJID *roomJID = [XMPPJID jidWithString:[roomDict objectForKey:KEY_group_id]];

XMPPRoom *xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:xmppRoomCoreDataStorage jid:roomJID dispatchQueue:dispatch_get_main_queue()];

[xmppRoom activate:[ChatHandler sharedInstance].xmppStream];
[xmppRoom addDelegate:self
        delegateQueue:dispatch_get_main_queue()];
[self insertRoomObjectWithDictionary:roomDict];
[xmppRoom joinRoomUsingNickname:[[ChatHandler sharedInstance] xmppStream].myJID.user
                        history:nil
                       password:@""];
[xmppRoom fetchConfigurationForm];
return xmppRoom;

【问题讨论】:

  • 如果它在您的 iOS 聊天视图或服务器上重复。当您创建房间时,您向该组添加了多少用户。
  • @GaganJoshi 我已经解决了这个问题。在核心数据库中插入消息之前,我正在比较本地时间戳,如果它们相同,则返回其他明智的插入。
  • @alok srivastava:请通过代码添加您的解决方案作为问题的答案。
  • @aloksrivastava 嗨,我需要在 iOS 中开发单聊天和多聊天功能(使用 Swift),你能分享几个链接来帮助我在这样的应用程序中需要处理的主要事情是什么?跨度>
  • @aloksrivastava 嘿,我需要在亚马逊上配置 Ejabberd 有什么想法吗?

标签: chat ejabberd xmppframework


【解决方案1】:

以下代码 sn-p 对我有用.. 试试你的代码... 我在发送消息时已将设备的 uuid 作为孩子发送,并在收到消息时检查了相同的 uuid:

-(void)sendMessageWithBody:(NSString *)messageBody
{
    if ([messageBody length] == 0) return;

    NSXMLElement *body = [NSXMLElement elementWithName:@"body" stringValue:messageBody];

    XMPPMessage *message = [XMPPMessage message];
    [message addChild:body];

    NSString *uuidString=[UIDevice currentDevice].identifierForVendor.UUIDString;

    NSXMLElement *myMsgLogic=[NSXMLElement elementWithName:@"myMsgLogic" stringValue:uuidString];
    [message addChild:myMsgLogic];

    [self sendMessage:message];
}

-(void)xmppRoom:(XMPPRoom *)sender didReceiveMessage:(XMPPMessage *)message fromOccupant:(XMPPJID *)occupantJID;
{
    [self handleIncomingMessage:message room:xmppRoom];
}

-(void)handleIncomingMessage:(XMPPMessage *)message room:(XMPPRoom *)room
{
    NSString *uuidString=[UIDevice currentDevice].identifierForVendor.UUIDString;

    NSString *messageLogic= [[message elementsForName:@"myMsgLogic"].firstObject stringValue];

    if ([uuidString isEqualToString:messageLogic]) {
        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"handleIncomingMessage" message:[message body] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alert show];
    }
}

【讨论】:

    【解决方案2】:

    我有相同的聊天应用程序使用 xmpp ejabbered。我也面临同样的问题。在我的 xmpp 服务器上,他们将离线消息存储设置为 100。如果在离线模式下,消息限制超过 100,那么从第 101 条消息开始,我将收到该消息的反弹。因此,作为解决方案,我们将离线消息限制更改为 500。

    {mod_offline_odbc, [
     {user_max_messages, 500}
    ]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 2015-11-05
      • 2011-11-06
      • 2016-03-19
      相关资源
      最近更新 更多