国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

XMPP接受發(fā)送消息

2019-11-14 18:39:10
字體:
供稿:網(wǎng)友

  在現(xiàn)階段的通信服務(wù)中,各種標準都有,因此會出現(xiàn)無法實現(xiàn)相互連通,而XMPP(Extensible Message and PResence Protocol)協(xié)議的出現(xiàn),實現(xiàn)了整個及時通信服務(wù)協(xié)議的互通。有了這個協(xié)議之后,使用任何一個組織或者個人提供的即使通信服務(wù),都能夠無障礙的與其他的及時通信服務(wù)的用戶進行交流。例如google 公司2005年推出的Google talk就是一款基于XMPP協(xié)議的即時通信軟件。下面我們就談?wù)撘幌氯绾魏唵蔚氖褂肵MPP的接收和發(fā)送消息

1、在XMPPFramework.h中將需要用到的頭文件打開

 

2、在storyboard創(chuàng)建展示消息頁面

 

3、定義查詢結(jié)果存儲器并且進行初始化

//消息存檔@property(nonatomic,strong) XMPPMessageArchiving * messageArch;//消息存檔存儲模型@property(nonatomic,strong) XMPPMessageArchivingCoreDataStorage * messageStore;

4、在上面storyboard創(chuàng)建的控制器中,添加如下代碼

AppDelegate * delgate=[UIapplication sharedApplication].delegate;        //初始化頭像    XMPPJID * fromJid=[XMPPJID jidWithString:self.fromJid];    NSData * fromData=[delgate.vCardAvatarModule photoDataForJID:fromJid];    self.fromImage=[[UIImage  alloc] initWithData:fromData];    NSString * userName= [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"];    XMPPJID * tojid=[XMPPJID jidWithString:userName];        //設(shè)置圖片模型    NSData * toData=[delgate.vCardAvatarModule photoDataForJID:tojid];    self.meImage=[[UIImage  alloc] initWithData:toData];        if (self.fromImage==nil) {        self.fromImage=[UIImage imageNamed:@"defalut"];    }        if (self.meImage==nil) {        self.meImage=[UIImage imageNamed:@"defalut"];    }     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKey:) name:UIKeyboardWillShowNotification object:nil];        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKey:) name:UIKeyboardWillHideNotification object:nil];        //初始化數(shù)據(jù)存儲  NSString *user=  [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"];        //初始化請求    NSFetchRequest * request=[[NSFetchRequest alloc] initWithEntityName:@"XMPPMessageArchiving_Message_CoreDataObject"];    request.predicate=[NSPredicate predicateWithFormat:@"bareJidStr=%@ and streamBareJidStr=%@",self.fromJid,user];            //定義排序    NSSortDescriptor * des=[NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES];    [request setSortDescriptors:@[des]];        //獲取上下文    NSManagedObjectContext *context=[delgate.messageStore mainThreadManagedObjectContext];        //初始化結(jié)果存儲器    fetch=[[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];        //設(shè)置代理    fetch.delegate=self;        //開始查詢    [fetch performFetch:nil];    

5、創(chuàng)實現(xiàn)tableView的代理方法

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    id <NSFetchedResultsSectionInfo>  info=fetch.sections[section];        NSLog(@"===%ld",info.numberOfObjects);    return [info numberOfObjects];    }- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{     XMPPMessageArchiving_Message_CoreDataObject * obj=[fetch objectAtIndexPath:indexPath];    JRChatTableViewCell * cell=nil;    if (obj.isOutgoing) {         cell=[tableView dequeueReusableCellWithIdentifier:@"cellto"];    }else{         cell=[tableView dequeueReusableCellWithIdentifier:@"cellfrom"];    }            //設(shè)置頭像    cell.image.image=self.meImage;    cell.selectionStyle=UITableViewCellSelectionStyleNone;    [cell setText:obj.body WithFlag:obj.isOutgoing ];    return cell;}

6、增加鍵盤控制

  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKey:) name:UIKeyboardWillShowNotification object:nil];    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKey:) name:UIKeyboardWillHideNotification object:nil];- (void) showKey:(NSNotification * ) notify{    CGFloat time=[notify.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]  ;    CGRect frame=[notify.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue];    [UIView animateWithDuration:time animations:^{        self.keyView.transform=CGAffineTransformMakeTranslation(0, frame.size.height*-1);    }];}- (void) hideKey:(NSNotification * ) notify{    CGFloat time=[notify.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]  ;    [UIView animateWithDuration:time animations:^{        self.keyView.transform=CGAffineTransformIdentity;    }];}

7、發(fā)送消息

-(BOOL)textFieldShouldReturn:(UITextField *)textField{    [textField resignFirstResponder];        //發(fā)送消息        //1 取出文本    AppDelegate * delgate=[UIApplication sharedApplication].delegate;        XMPPJID * jid=[XMPPJID jidWithString:self.fromJid];        //初始化消息體    XMPPMessage * message=[XMPPMessage messageWithType:@"chat" to:jid];    [message addBody:self.ketf.text];        //發(fā)送消息    [delgate.stream sendElement:message];        //將消息置空    self.ketf.text=nil;    return YES;}

 

  想要了解更多內(nèi)容的小伙伴,可以點擊查看源碼,親自運行測試。

  疑問咨詢或技術(shù)交流,請加入官方QQ群:JRedu技術(shù)交流 (452379712)

 

作者:杰瑞教育
出處:http://www.survivalescaperooms.com/jerehedu/ 
本文版權(quán)歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權(quán)利。
 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 海城市| 涞源县| 南宫市| 台江县| 岳阳市| 盱眙县| 遂昌县| 改则县| 隆回县| 什邡市| 民和| 高阳县| 库伦旗| 鞍山市| 吉林省| 克山县| 绩溪县| 福州市| 收藏| 旬阳县| 枣阳市| 巴楚县| 佳木斯市| 综艺| 青岛市| 达日县| 高淳县| 乐陵市| 阿克陶县| 望奎县| 西华县| 孝感市| 稷山县| 策勒县| 德江县| 宁夏| 秀山| 枝江市| 江北区| 昔阳县| 同江市|