2016-11-09 6 views
1

Мы создаем приложение чата в IOS с использованием XMPPFramework на стороне клиента (https://github.com/robbiehanson/XMPPFramework) и Ejabberd на стороне сервера.IOS XMPPFramework и Joining Rooms

В групповом чате мы создаем группу и после этого присоединяемся к этой группе и приглашаем других пользователей присоединиться к нашей группе. И каждый раз, когда новый приглашенный пользователь присоединяется к группе, мы сообщаем всем участникам, что новый пользователь присоединился к группе.

Однако, когда мы перезапускаем приложение (убиваем и перезапускаем), мы сохраняем имя пользователя этой группы и снова присоединяемся к нему (вы можете найти пример ниже), но в этом случае ejabberd отправит всех клиентов, к которым присоединился новый пользователь но я уже был в этой группе, только разница в том, что я перезапустил приложение. Как я могу разграничить эти две вещи?

NSString *nickName = [[NSUserDefaults standardUserDefaults]objectForKey:userNickName]; 

XMPPRoomMemoryStorage *roomStorage = [[XMPPRoomMemoryStorage alloc] init]; 

XMPPJID *roomJID = [XMPPJID jidWithString:uniqId]; 
XMPPRoom *xmppRoom = [[XMPPRoom alloc]initWithRoomStorage:roomStorage 
                 jid:roomJID 
              dispatchQueue:dispatch_get_main_queue()]; 
[xmppRoom activate:xmppStream]; 
[xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()]; 
[xmppRoom joinRoomUsingNickname:nickName history:nil]; 

ответ

1

Фактически присоединился к XMPP MUC означает, что вы сейчас находитесь в комнате. Когда вы в автономном режиме, вы можете быть членом группы, но вы не присутствуете в группе. Когда вы отправляете присутствие снова при входе в систему, вы снова присутствуете снова.

Я предполагаю, что основной причиной является то, что вы смешиваете соединение с членством.

Предлагаю вам ознакомиться с протоколом MUC/Sub в ejabberd. Это был дизайн, чтобы разделить присутствие в комнате от членства в комнате и подписки на сообщения. Протокол описан здесь: https://docs.ejabberd.im/developer/xmpp-clients-bots/proposed-extensions/muc-sub/

1

В XMPP MUC:

Оставить = Not group member anymore или

Регистрация = Become group member from now on

Но просто означает:!

Оставить == Presence unavailable или

Регистрация == Presence available.


И присутствие не так полезно в групповом чате.

В отличие от этого, я думаю, что вы ищете что-то вроде MUCLight:

Смежные вопросы