極光即時通訊初次使用的一些經(jīng)驗和心得

  • 今年剛從學校畢業(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值.

剩下的也就語音播放了,注意取值正確應該沒有什么大的問題.

  • 因為第一次接觸即時通訊,我也就搭建了這么個最基本的架子,缺的東西海了去了,正在慢慢補充回去.之后的有關即時通訊我會保持更新的~~~~讓之后和我一樣的新人們能有個方向.
    謝謝
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容