XMPP是一种基于XML的协议,本章利用XMPP即时通讯协议,完成用户之间发私信的需求;
首先,导入XMPP框架,
导入静态库:
libresolv.dylib
libxml2.dylib
security.framework
SystemConfiguration.framework
CFNetwork.framework
CoreLocation.framework
CoreData.framework
为了方便调用,我们把XMPP的一些主要方法写在AppDelegate中,
- -(void)setupStream{
- //初始化XMPPStream
- xmppStream = [[XMPPStream alloc] init];
- [xmppStream addDelegate:self delegateQueue:dispatch_get_current_queue()];
- }
- -(void)goOnline{
- //发送在线状态
- XMPPPresence *presence = [XMPPPresence presence];
- [[self xmppStream] sendElement:presence];
- }
- -(void)goOffline{
- //发送下线状态
- XMPPPresence *presence = [XMPPPresence presenceWithType:@"unavailable"];
- [[self xmppStream] sendElement:presence];
- }
- - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{
- // NSLog(@"message = %@", message);
- NSString *msg = [[message elementForName:@"body"] stringValue];
- NSString *from = [[message attributeForName:@"from"] stringValue];
- NSMutableDictionary *dict = [NSMutableDictionary dictionary];
- [dict setObject:msg forKey:@"msg"];
- [dict setObject:from forKey:@"sender"];
- //消息委托
- [messageDelegate newMessageReceived:dict];
- }
NSBubbleData *sayBubble = [NSBubbleData dataWithText: string date:[NSDate dateWithTimeIntervalSinceNow:0] type:BubbleTypeSomeoneElse];
[bubbleData addObject:sayBubble];
[bubbleTable reloadData];
- (IBAction)sayPressed:(id)sender{
NSXMLElement *body = [NSXMLElementelementWithName:@"body"];
NSMutableDictionary *postdata=[NSMutableDictionarydictionary];
[postdata setObject:textField.textforKey:@"text"]; //消息体
[postdata setObject:[[NSUserDefaultsstandardUserDefaults] stringForKey:USER_ID]forKey:@"sender_id"];
[postdata setObject:[NSNumbernumberWithInt:self.userid]forKey:@"recipient_id"]; //收件人id
[postdata setObject:[USER_SAY stringFromDate:[NSDatedate]] forKey:@"created_at"];
[postdata setObject:[[NSUserDefaultsstandardUserDefaults] stringForKey:USER_NAME]forKey:@"sender_screen_name"];
[postdata setObject:[NSNumbernumberWithInt:100]forKey:@"type"]; //消息类型
NSString * json = [postdata JSONString];
[body setStringValue:json]; //json格式数据
//生成XML消息文档
NSXMLElement *mes = [NSXMLElementelementWithName:@"message"];
//消息类型
[mes addAttributeWithName:@"type"stringValue:@"chat"];
//发送给谁
[mes addAttributeWithName:@"to"stringValue:[NSStringstringWithFormat:@"%d@%@",userid,self.user_pic]];
//由谁发送
[mes addAttributeWithName:@"from"stringValue:[NSStringstringWithFormat:@"%@@%@",[[NSUserDefaultsstandardUserDefaults] stringForKey:USER_ID],self.user_pic]];
//组合
[mes addChild:body];
//发送消息
[[[selfappDelegate] xmppStream] sendElement:mes];
[selfreloadInputViews_byMyMessage:textField.text];
}