3

XMPPFramework for iPhoneを使用して、ユーザーがオンライン/オフラインであるかどうかをどのように判断しますか?

JIDなどを持っています。プレゼンスなどをリクエストする方法はありますか?

ありがとうございました。

4

2 に答える 2

7

XMPPFrameworkサンプルプロジェクトのソースコードをチェックアウトしましたか?

私が正しく覚えていれば、これは関連するコードスニペットであるはずです。

// Subscribe to the buddy's presence
// 
// <presence to="bareJID" type="subscribe"/>

NSXMLElement *presence = [NSXMLElement elementWithName:@"presence"];
[presence addAttributeWithName:@"to" stringValue:[jid bare]];
[presence addAttributeWithName:@"type" stringValue:@"subscribe"];

[xmppStream sendElement:presence];

そして、ストリームデリゲートが取得するコールバックは

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence;

すでにxmmpframeworkソースがあると思いますが、そうでない場合は、ここでリポジトリのクローンを作成できます

hg clone https://xmppframework.googlecode.com/hg/ xmppframework

サンプルプロジェクトは「Xcode」フォルダにあります。

于 2011-02-10T23:09:36.440 に答える
0

まず、ユーザーステータスを取得するには、ROSTERリストの両側サブスクリプションが必要です。

ここに画像の説明を入力してください

ここでは、プレゼンスリクエストをサブスクライブして受け入れる方法を説明します。

    let senderName = strReceiverEjabberedName + "@" + eJabVirtualHost
    let roomJID = XMPPJID(string: senderName)
    
    // Send subscribe request
    let detxTag:XMLElement = XMLElement(name: "presence")
    detxTag.addAttribute(withName: "to", stringValue: roomJID?.bare ?? "")
    detxTag.addAttribute(withName: "type", stringValue: "subscribe")
    xmppController.xmppStream.send(detxTag)
    
    // Send subscribed request
    let detxTaged:XMLElement = XMLElement(name: "presence")
    detxTaged.addAttribute(withName: "to", stringValue: roomJID?.bare ?? "")
    detxTaged.addAttribute(withName: "type", stringValue: "subscribed")
    xmppController.xmppStream.send(detxTaged)
    
    // Subscribe & Accept Presence Request
    xmppController.xmppRoster?.subscribePresence(toUser: roomJID!)
    xmppController.xmppRoster?.acceptPresenceSubscriptionRequest(from: roomJID!, andAddToRoster: true)

あなたの友人があなたにprecenseリクエストを送信した場合、あなたはRosterDelegateでリクエストを受け取りました。

extension XMPPServiceController: XMPPRosterDelegate {
    func xmppRoster(_ sender: XMPPRoster, didReceivePresenceSubscriptionRequest presence: XMPPPresence) {
        sender.acceptPresenceSubscriptionRequest(from: presence.from!, andAddToRoster: true)
    }
}

上記の手順を実行すると、以下のXMPPデリゲートメソッドで友達のオンライン/オフラインステータスを受け取ります。

func xmppStream(sender: XMPPStream?, didReceivePresence presence: XMPPPresence?) {
    let presenceType = presence?.type
    if presenceType == "available" { //ONLINE }
    else if presenceType == "unavailable" { //OFFLINE }
}
于 2021-06-01T05:22:03.810 に答える