【问题标题】:Unable to send and receive message in Group Chat using Xmpp in iphone无法在 iphone 中使用 Xmpp 在群聊中发送和接收消息
【发布时间】:2014-09-19 12:27:36
【问题描述】:

使用 xmpp 我可以创建群组并向朋友发送邀请,但是当我在群组上发送消息时,成员将永远不会收到该消息。

会员必须接受邀请吗?如果是,请告诉我怎么做?

请参考下面的代码,如果我犯了任何错误或仍然遗漏任何东西,请指导我,以便我可以在群组中发送和接收消息并与朋友聊天。

下面我附上了一些代码 sn-p 用于在 xmpp 中创建组并发送消息。

[self setUpRoom:[NSString stringWithFormat:@"%@@conference.myserver",@"GroupName"]];


-(void)setUpRoom:(NSString *)ChatRoomJID {

    // Configure xmppRoom
    XMPPRoomMemoryStorage *roomMemoryStorage = [[XMPPRoomMemoryStorage alloc] init];

    XMPPJID *roomJID = [XMPPJID jidWithString:ChatRoomJID];

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

    [xmppRoom activate:xmppStream];
    [xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];


    [xmppRoom joinRoomUsingNickname:_ro(@"LoginNumber")
                            history:nil
                           password:nil];

    [self performSelector:@selector(ConfigureNewRoom:) withObject:nil afterDelay:4];

}

现在为了确认房间,我使用了这个 sn-p

- (void)ConfigureNewRoom:(id)sender
{
    [xmppRoom configureRoomUsingOptions:nil];
    [xmppRoom fetchConfigurationForm];
    [xmppRoom fetchBanList];
    [xmppRoom fetchMembersList];
    [xmppRoom fetchModeratorsList];

}

XMPP Room 委托方法

- (void)xmppRoomDidCreate:(XMPPRoom *)sender
{
    DDLogInfo(@"%@: %@", THIS_FILE, THIS_METHOD);

   // I am inviting friends after room is created

    for (int i = 0; i<[self.friendListArray count]; i++)
    {
        NSString * tempStr=[NSString stringWithFormat:@"%@@myserver",[[self.friendListArray objectAtIndex:i] valueForKey:@"UserNumber"]];
        [sender inviteUser:[XMPPJID jidWithString:tempStr] withMessage:@"Greetings!"];
    }

}

- (void)xmppRoomDidJoin:(XMPPRoom *)sender
  {
        DDLogInfo(@"%@: %@", THIS_FILE, THIS_METHOD);

        NSLog(@"........Room Did join.......");
  }

- (void)xmppRoom:(XMPPRoom *)sender didFetchConfigurationForm:(NSXMLElement *)configForm
   {
        DDLogInfo(@"%@: %@", THIS_FILE, THIS_METHOD);

        NSXMLElement *newConfig = [configForm copy];
        NSArray *fields = [newConfig elementsForName:@"field"];

        for (NSXMLElement *field in fields)
        {
            NSString *var = [field attributeStringValueForName:@"var"];

            // Make Room Persistent
            if ([var isEqualToString:@"muc#roomconfig_persistentroom"])
            {

                [field removeChildAtIndex:0];
                [field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
            }

            if ([var isEqualToString:@"roomconfig_enablelogging"])
            {

                [field removeChildAtIndex:0];
                [field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
            }

            if ([var isEqualToString:@"muc#roomconfig_maxusers"])
            {

                [field removeChildAtIndex:0];
                [field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"100"]];
            }


        }
        [sender configureRoomUsingOptions:newConfig];
  }

在按钮点击时分组发送消息以进行测试

-(void)sendGroupMessage
{
    [xmppRoom sendMessageWithBody:@"Hi All"];

    NSXMLElement *x = [NSXMLElement elementWithName:@"groupchat" xmlns:XMPPMUCNamespace];

    XMPPMessage *message = [XMPPMessage message];
    [message addAttributeWithName:@"to" stringValue:[NSString stringWithFormat:@"%@/%@",[xmppRoom.roomJID full],_ro(@"LoginNumber")]];
    [message addChild:x];
    NSLog(@"x in Invite === %@",x);
    [xmppStream sendElement:message];
}

【问题讨论】:

  • 也添加类型。 [消息addAttributeWithName:@"type" stringValue:@"groupchat"];
  • 它是用于更容易编写/读取 NSUserDefaults 的宏 #define _ro(key) [[NSUserDefaults standardUserDefaults] objectForKey:key]
  • xmppRoom在哪里定义?

标签: ios objective-c iphone xmpp


【解决方案1】:

代替:

 [xmppStream sendElement:message]

尝试:

 [xmppRoom sendMessage:message]

【讨论】:

  • 不错的答案。非常感谢您的回答,+1。​​
【解决方案2】:

对于 MUC 聊天,成员必须接受邀请。 你可以在这里找到答案:

https://stackoverflow.com/a/26031897/4050160

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    相关资源
    最近更新 更多