2016-03-22 3 views
4

過去にメッセージを交換したユーザーのみのオンライン/オフラインステータスが必要なアプリケーションを構築しています。すべてのユーザーがサーバーで利用できるわけではありません。前もって感謝します。XMPPサーバーを介して特定のユーザーのオンライン/オフライン状態を確認する方法

+0

こんにちは、同じことを実装したいと思います。あなたはそれについて何か解決策を得るディディですか?はいの場合はお知らせください。ありがとう。 – nikBhosale

+0

@nikBhosale私は特定のユーザーのオンライン/オフラインステータスを取得していません。私がやっていることは、すべてのユーザーをオンライン/オフラインの状態で配列に格納し、その配列をJabber Idに基づいて状態を表示したいユーザーにフィルタリングすることです。 –

+0

さて、配列を継続的なリスニングと編集モードに保つ必要があるので、それほど効率的ではないと思います。代わりに、おそらく私の答えをXMPPIQを使って見ることができます。また、あなたが正しい方法だと思うなら、アップしてください。ありがとう。 – nikBhosale

答えて

0

プレゼンスはブロードキャストされているので、「発生した」ときに受信します。リモートサーバー(S2S、サーバーツーサーバー)のコンテキストに存在プローブが存在します。しかし、投票はありません。

0

クライアントにプッシュされた(Nycoによる)プレゼンスを持つには、他のユーザーの存在を登録する必要があります。それは、ここで説明しています: - あなたは、あなたが

let query = XMLElement(name: "query", xmlns: "jabber:iq:last") 
     let streamUUID = self.xmppStream.generateUUID() 
     let iq = XMPPIQ(type: "get", to: XMPPJID(string: jid) , elementID: streamUUID , child: query) 
     self.xmppStream.send(iq) 
     return streamUUID! 

を以下のよう「タイプのGET」でXMPPIQを作成する必要がありXMPPIQ を使用して、特定のユーザーのオフライン/オンライン状態を取得することができますhttp://xmpp.org/rfcs/rfc6121.html#sub

1

名前付きXMPPStreamDelegateプロトコルで方法を委任があります'didReceive iq:'の場合、次のようにハンドルのIQ結果を提供する必要があります。

func xmppStream(_ sender: XMPPStream!, didReceive iq: XMPPIQ!) -> Bool { 
     if iq.isResultIQ() { 
      iq.lastActivitySeconds() == 0{ 
       print("user is online") 
      }else{ 
       print("user is offline") 
      } 
     } 
     return false 
    } 
関連する問題