原始地址:XMPPFrameWork IOS 開發(四)
訊息
//收到訊息 - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{ // NSLog(@"message = %@", message); //訊息的內容 NSString *msg = [[message elementForName:@"body"] stringValue]; //訊息寄件者 NSString *from = [[message attributeForName:@"from"] stringValue]; /****在此處****/ //通知聊天頁面有新訊息,需要處理 }
發送訊息
//發送訊息的xml格式<message from='寄件者帳號' to='接收者帳號' type='chat'><body>HELLO WORLD </body></message>
//程式碼群組裝
NSString *message = @"HELLO WORLD";NSXMLElement *body = [NSXMLElement elementWithName:@"body"];[body setStringValue:message];//產生XML訊息文檔NSXMLElement *mes = [NSXMLElement elementWithName:@"message"];//訊息類型[mes addAttributeWithName:@"type" stringValue:@"chat"];//發送給誰[mes addAttributeWithName:@"to" stringValue:@"接受者帳號"];//由誰發送[mes addAttributeWithName:@"from" stringValue:@"寄件者帳號"];//組合[mes addChild:body];//發送訊息[[self xmppStream] sendElement:mes];
好友上下線通知
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence{ //取得好友狀態 NSString *presenceType = [presence type]; //online/offline //目前使用者 NSString *userId = [[sender myJID] user]; //線上使用者 NSString *presenceFromUser = [[presence from] user];/* //如果不是自己,如果涉及多段登入,此處最好加上else,如果是自己離線的話,調用上線協議 XMPPPresence *presence = [XMPPPresence presence]; [[self xmppStream] sendElement:presence]; */ if (![presenceFromUser isEqualToString:userId]){ //使用者線上 if ([presenceType isEqualToString:@"available"]){//列表和資料庫都要相應改變 }else if ([presenceType isEqualToString:@"unavailable"])//使用者不線上{//列表和資料庫都要相應改變 } }}