使用XMPP协议的iOS聊天应用程序(ejabberd)聊天室问题 [英] IOS Chat application using XMPP Protocol (ejabberd) Room chat issue

查看:110
本文介绍了使用XMPP协议的iOS聊天应用程序(ejabberd)聊天室问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


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

I am developing an IOS Chat application using XMPP Protocol(ejabberd). My chat room is created at my server, it return roomID to me.

我在聊天室/群组中遇到问题。当我发送一条消息时,它会重复3到4次以上。如何解决此问题。我的代码在这里

I am facing an issue in room/group chat. When i am sending a single message it is repeating more than once like 3 to 4 times.How to fix this. My code is here

 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;

推荐答案

以下代码段对我有用。
我在发送消息时已作为孩子发送了设备的uuid,并在收到消息时检查了相同的uuid:

Following code snippet worked for me.. Try it for your code... I have sent uuid of my device as child while sending message and checked the same uuid at the time of incoming message :

-(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];
    }
}

这篇关于使用XMPP协议的iOS聊天应用程序(ejabberd)聊天室问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆