腾讯云IM浅谈

前面几篇文章讲过了腾讯云的视频直播,既然有直播肯定也得需要聊天模块了,在我的项目需求中需要的有群聊和私聊,目前没有要求推送。虽然推送已经做过很多次了,但是由于项目紧张,就只写无推送功能的聊天内容了。
    之前用过的推送有极光、友盟的第三方,也二次封装过网上的XMPP的demo。总的来说,推送这个东西对ios只有一套就是下载并安装推送证书,有了这个东西一切推送就跟非推送的聊天类似了。好了,今天就先开始讲述没有推送的聊天,第一次用腾讯的云IM所以也就从头好好讲一遍。
    1.当然还是去腾讯云注册账号申请appid等东西了。所有运用的第三方都是这样,例如友盟分享、推送、统计,极光推送、包括微信分享、支付,支付宝支付、以及高德、百度的地图等,都是类似的一般。
    2.需要用腾讯云IM就要先看看它的demo和官方sdk的介绍。下载IMSDK并集成到项目中去。集成的方案很通用的,无非就是导入腾讯云的sdk和其他辅助类库以及项目支持的类库,这些通用性太大直接上官方查看文档即可。

集成腾讯云IM方法
3.集成完毕以后就该初始化对象了,在需要聊天的模块初始化也可以,登录项目的时候初始化也可以。这就需要看你的项目需求了。如果是直播,聊天类的社交性项目就需要登录的时候直接初始化了。初始化的对象是TIMManager。在使用的模块引入头文件并使用IM的聊天代理。

//引入登录IM聊天相关头文件
#import 
#import 
//使用代理
TIMMessageListener,TIMRefreshListener
self.messageImManager = [TIMManager sharedInstance];
[_messageImManager setMessageListener:self];
[_messageImManager setRefreshListener:self];
//代理回调方法
//获取当前用户的聊天消息
-(void)onNewMessage:(NSArray *)msgs
{
    for (NSInteger i =0; i.count; i++) {
        TIMMessage *lastMsg =msgs[i];
        self.senderModule = [[MSMessageSendersModule alloc]initWithConversation:lastMsg];
        NSInteger unNum = [_senderModule.unreadNum integerValue];
        _senderModule.unreadNum = [NSString stringWithFormat:@"%ld",++unNum];
        [_messageSendersArray addObject:_senderModule];
    }
    [_messageSendersTableView reloadData];
}
//当未读消息或者新联系人发送消息时触发回调
-(int) setRefreshListener: (id)listener
{
    NSLog(@"当未读消息或者新联系人发送消息时触发回调");
    return 2;
}
//刷新聊天内容
- (void) onRefresh
{
    NSLog(@"刷新聊天内容");
}
    4.然后是登录,登录导入头文件
#import 
        #import 
    //设置代理      
    self.messageImManager = [TIMManager sharedInstance];
        [_messageImManager setEnv:0];
        [_messageImManager initSdk:[tecentSDKAppid intValue]];
        [_messageImManager setConnListener:self];
        [_messageImManager setUserStatusListener:self];
    5.之前在直播模块也写到过这个登录,因为直播的账户和聊天账户都是同一个数据库,同一个服务器,所以登录也可以参考前面的文章

腾讯云在线直播二
6.在3里面写的方法其实都是该代理的回调,真正请求聊天,获取聊天列表的方法如下:

//开启子线程
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //获取当前用户消息数目
        NSInteger conversationNum = [_messageImManager ConversationCount];
        for (int i = 0; i < conversationNum; i++) {
            TIMConversation *conversation = [[TIMManager sharedInstance] getConversationByIndex:i];
            [conversation getMessage:1 last:nil succ:^(NSArray *msgs) {
                //获取当前用户最新一条消息
                TIMMessage *lastMsg = msgs[0];
                self.senderModule = [[MSMessageSendersModule alloc]initWithConversation:lastMsg];
                _senderModule.unreadNum = [NSString stringWithFormat:@"%d",[conversation getUnReadMessageNum]];
                [_messageSendersArray addObject:_senderModule];
                if (conversationNum == i+1) {
                    dispatch_async(dispatch_get_main_queue(), ^{
                        [SVProgressHUD showSuccessWithStatus:NSLocalizedStringFromTable(@"更新完毕", @"InfoPlist", nil)];
                        [_messageSendersTableView reloadData];
                    });
                }
            } fail:^(int code, NSString *msg) {

            }];
        }

    });

7.聊天的发送消息可以使用demo里面的特定消息体例如(文本消息:TIMTextElem,图片消息:TIMImageElem,文件消息:TIMFileElem,语音消息:TIMSoundElem,群Tips:TIMGroupTipsElem,地理位置:TIMLocationElem,表情消息类型:TIMFaceElem,群系统消息:TIMGroupSystemElem,关系链变更消息:TIMSNSSystemElem,资料变更系统消息:TIMProfileSystemElem,微视频消息:TIMVideoElem),也可以用sdk提供的另一个自定义消息体(自定义消息类型:TIMCustomElem)。一般情况下,需求肯定是多变的。这里我就是使用的自定义消息体。代码如下:

//发送消息自己的唯一标示、自己的头像、自己的昵称、发送对象的唯一标示、消息内容、类型
    NSDictionary *sendDic = [NSDictionary dictionaryWithObjectsAndKeys:[HSUserInfo getUserId],@"senderId",[HSUserInfo getHeadIcon],@"senderIcon",[HSUserInfo getUserName],@"senderNick",_senderModule.senderIdentefier,@"receiveId",msg,@"messageContent",@"TIM_C2C",@"TIMConversationType", nil];
    //NSDictionary转换为Data
    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:sendDic options:NSJSONWritingPrettyPrinted error:nil];
    TIMCustomElem* userElem = [[TIMCustomElem alloc] init];
    userElem.data = jsonData;
    TIMMessage* timMsg = [[TIMMessage alloc] init];
    [timMsg addElem:userElem];
    [_friendConversation sendMessage:timMsg succ:^(){
        NSLog(@"发送私聊信息成功");
    } fail:^(int code, NSString* err) {
        NSLog(@"发送私聊信息失败");
    }];

在此聊天收发就完成了。如果需要推送功能的可以自己再看腾讯云官方的文档,地址在这

你可能感兴趣的:(腾讯云IM浅谈)