XMPPFramework for iPhoneを使用して、ユーザーがオンライン/オフラインであるかどうかをどのように判断しますか?
JIDなどを持っています。プレゼンスなどをリクエストする方法はありますか?
ありがとうございました。
XMPPFramework for iPhoneを使用して、ユーザーがオンライン/オフラインであるかどうかをどのように判断しますか?
JIDなどを持っています。プレゼンスなどをリクエストする方法はありますか?
ありがとうございました。
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」フォルダにあります。
まず、ユーザーステータスを取得するには、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 }
}