国产探花免费观看_亚洲丰满少妇自慰呻吟_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://m.survivalescaperooms.com/jerehedu/ 
本文版權(quán)歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權(quán)利。
 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌恰县| 晴隆县| 静乐县| 利津县| 湖州市| 抚宁县| 义马市| 门头沟区| 龙陵县| 陈巴尔虎旗| 阆中市| 河北省| 蓬溪县| 自贡市| 曲阳县| 皋兰县| 鸡西市| 荥经县| 榆中县| 隆尧县| 喀喇沁旗| 武冈市| 新龙县| 铜梁县| 巴东县| 奉节县| 佛冈县| 右玉县| 五河县| 平顺县| 甘德县| 博白县| 吴桥县| 石阡县| 河池市| 葵青区| 海淀区| 民和| 淮南市| 乌拉特中旗| 丹棱县|