- 今年剛從學校畢業(yè),興沖沖的踏入到程序員的行業(yè),相比各種大神我大概是新嫩的不能再新嫩了.好了閑話不多說,上干貨.極光的IM推出的時間非常的短暫,初次了解到極光還是極光的推送.因為是第一次接觸到即時通訊,向好幾個前輩請教了很多,磕磕絆絆看官方文檔和demo,總算寫了點東西出來.
//這個是創(chuàng)建最初的單聊的會話,因為實際情況我并不需要團隊,如有需要可以另行創(chuàng)建
[JMSGConversation createSingleConversationWithUsername:self.userID completionHandler:^(id resultObject, NSError *error) {
if (error == nil) {
if ([resultObject isKindOfClass:[JMSGConversation class]]) {
chatVC *vc = [[chatVC alloc] initWithConversation:resultObject];
vc.userDict = self.resourceDict;
[self.navigationController pushViewController:vc animated:YES];
}
}
}];
- 之后就是非常常規(guī)的使用方法創(chuàng)建自己想要的發(fā)送的消息了.我這邊粗略的就寫上語音,文字,圖片的三種.我記得極光并不支持的視頻的發(fā)送.
關于這三種基本的信息聊天發(fā)送,基本上就這幾個步驟:首先指定一個指針變量指向?qū)嵗瘜ο? 即
JMSGTextContent *textContent = [[JMSGTextContent alloc] initWithText:textField.text];
然后數(shù)據(jù)的提取,賦值
messageModel *model = [[messageModel alloc] init];
//此接口創(chuàng)建消息后, SDK 會進行落地, 包括: 消息保存數(shù)據(jù)庫, 媒體文件保存到文件系統(tǒng).這意味著, 這個創(chuàng)建后的消息對象, App 可以用來放到 UI 上展示.相關具體詳細的有興趣可以去極光的官網(wǎng)上下載demo看下.
message = [_conversation createMessageWithContent:textContent];
//這里的sendMessage就是極光的接口方法了, 通過這個發(fā)送消息
[_conversation sendMessage:message];
[model setChatModelWith:message conversationType:_conversation];
最后添加到cell里面顯示
[self addMessage:model];
具體的方法我比較的偷懶,關于文字的發(fā)送我直接寫在了textField里面
#pragma - mark text field delegate
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
NSLog(@"return");
if (textField.text.length == 0) {
return NO;
}
JMSGMessage *message = nil;
JMSGTextContent *textContent = [[JMSGTextContent alloc] initWithText:textField.text];
messageModel *model = [[messageModel alloc] init];
message = [_conversation createMessageWithContent:textContent];
[_conversation sendMessage:message];
[model setChatModelWith:message conversationType:_conversation];
[self addMessage:model];
model.isSelf = NO;
textField.text = nil;
return YES;
}
這樣最基本的文字消息就發(fā)送出去了, 剩下的就是在cell里的顯示布局,我寫了一個最簡單的排版,就當拋磚引玉了
if (_msg.message.contentType == kJMSGContentTypeText) {
msgabel.hidden = NO;
_voiceConent.hidden = YES;
_imageConent.hidden = YES;
[self dialog];
JMSGTextContent *textContent = (JMSGTextContent *)_msg.message.content;
msgabel.text = textContent.text;
[self textLayout];
}
- (void)textLayout {
//字體大小,文字多少,行數(shù),分行模式
//圖片的拉伸
backBg.image = [backBg.image stretchableImageWithLeftCapWidth:backBg.image.size.width * 0.5 topCapHeight:backBg.image.size.height * 0.7];
//設置段落樣式
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.lineBreakMode = NSLineBreakByWordWrapping;
// 根據(jù)內(nèi)容動態(tài)獲取高度 屬性字符串,屬性字典
CGRect rect3 = [msgabel.text boundingRectWithSize:CGSizeMake(WIDTH - 170 , MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{
NSFontAttributeName : [UIFont systemFontOfSize:14],
NSParagraphStyleAttributeName : style
} context:nil];
CGFloat fixWidth = MAX(rect3.size.width, 10);
//第一個是自己的,第二個是收到的消息
backBg.frame = !self.msg.isSelf ? CGRectMake((WIDTH - 65 - MIN(WIDTH - 140, rect3.size.width + 50)) + 20, 10, (MIN(WIDTH - 139, rect3.size.width + 50)) - 20, rect3.size.height + 20) : CGRectMake(65, 10, (MIN(WIDTH - 139, fixWidth + 20)) + 20, rect3.size.height + 20);
//第一個是自己發(fā)送的 第二個是收到消息的
msgabel.frame = !self.msg.isSelf ? CGRectMake(10, -3, backBg.frame.size.width - 20, backBg.frame.size.height) : CGRectMake(20, 0, backBg.frame.size.width - 15, backBg.frame.size.height) ;
[self heardView];
}
基本上相應的一些UI我相信不同公司都有不同的設計的,我就不多說了.因為創(chuàng)業(yè)公司,并沒有相關的人員,關于視覺的設計我就兼職了 (實際效果果然是突出了簡單粗暴幾個字.反正該有的功能都有了,我的審美就這樣了!!!!!)
- 語音和圖片代碼都是比較相似的,我就不放出來占版面了.這里我主要是想說下我遇到的一些需要注意的地方.
相機的調(diào)用,具體的情況就是你調(diào)用相機拍出來的照片照片發(fā)送出去就會旋轉(zhuǎn)90°.網(wǎng)上有種說法是當照片大小超過2M就會旋轉(zhuǎn)
image = [info objectForKey:UIImagePickerControllerOriginalImage];
當你寫了這一句的時候,你就要計算相機用不同方式拍的照片,手動的把照片進行平移變換.非常遺憾的是我折騰了半天,并沒有成功.
如果有大神可以為我解惑的話我感激不盡!!!!這個很關鍵
后來查了文檔問了小伙伴,決定把png格式的圖片換成JPEG格式來上傳,用以規(guī)避照片的Original值.
剩下的也就語音播放了,注意取值正確應該沒有什么大的問題.
- 因為第一次接觸即時通訊,我也就搭建了這么個最基本的架子,缺的東西海了去了,正在慢慢補充回去.之后的有關即時通訊我會保持更新的~~~~讓之后和我一樣的新人們能有個方向.
謝謝