2016-11-09 6 views
1

私たちは、クライアント側(https://github.com/robbiehanson/XMPPFramework)のXMPPFrameworkとサーバー側のEjabberdを使用してIOSでチャットアプリケーションを作成しています。IOS XMPPフレームワークと参加ルーム

グループチャットでグループを作成した後、そのグループに参加し、他のユーザーをグループに招待します。新しい招待されたユーザーがグループに参加するたびに、新しいユーザーがグループに参加したことをすべての参加者に通知します。

しかし、アプリケーションを再起動すると(killとrelaunch)、そのグループのユーザ名が保存され、再度参加する(下の例があります)が、その場合ejabberdは新しいユーザが参加したすべてのクライアントグループに参加していましたが、すでにそのグループに入っていましたが、違いはアプリケーションを再起動したことだけです。 どうすればこれらの2つのものを区別できますか?

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は、あなたが現在客室にいることを意味します。オフラインのときは、グループのメンバーであるかもしれませんが、グループには存在しません。ログイン時に再度プレゼンスを送信すると、あなたは効果的に再び存在します。

根本的な原因は、メンバーとメンバーシップを混在させることだと思います。

ejabberdのMUC/Subプロトコルをご覧ください。室内のプレゼンスを部屋のメンバーシップやメッセージの購読から分割するのがデザインでした。 != Not group member anymoreまたは

参加=

ままBecome group member from now on

を単に意味:https://docs.ejabberd.im/developer/xmpp-clients-bots/proposed-extensions/muc-sub/

関連する問題