腾讯云IM浅谈

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

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

//引入登录IM聊天相关头文件
#import <ImSDK/ImSDK.h>
#import <ImSDK/TIMCallbackExt.h>
//使用代理
TIMMessageListener,TIMRefreshListener
self.messageImManager = [TIMManager sharedInstance];
[_messageImManager setMessageListener:self];
[_messageImManager setRefreshListener:self];
//代理回调方法
//获取当前用户的聊天消息
-(void)onNewMessage:(NSArray *)msgs
{for (NSInteger i =0; i<msgs.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<TIMRefreshListener>)listener
{NSLog(@"当未读消息或者新联系人发送消息时触发回调");return 2;
}
//刷新聊天内容
- (void) onRefresh
{NSLog(@"刷新聊天内容");
}
    4.然后是登录,登录导入头文件
#import <ImSDK/ImSDK.h>#import <ImSDK/TIMCallbackExt.h>//设置代理      <TLSExchangeTicketListener,TIMConnListener,TIMUserStatusListener>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转换为DataNSData* 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(@"发送私聊信息失败");}];

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


http://www.ppmy.cn/news/653110.html

相关文章

【UE5 Cesium】08-Cesium for Unreal 子关卡应用实例(上)

UE版本&#xff1a;5.1 效果 &#xff08;运行游戏可以看到进入关卡体积内楼房模型才会显现&#xff0c;以此来减少电脑性能消耗&#xff09; 步骤 一、新建两个子关卡&#xff08;以北京和上海为例&#xff09; 点击窗口-》关卡-》新建 命名第一个子关卡为“SubLevel_Bei…

完整的IM架构设计

服务的主体功能为提供消息的在线转发和离线消息的获取。从产品侧角度&#xff0c;衍生出多平台的同步转发、互踢及群组的需求。功能上需要提供消息指定路由转发、是否持久化、在线离线机制、心跳包、通知送达、授权验证等。从技术层次上划分&#xff0c;网络层提供长连接/短连接…

im即时通讯源码带教程/uniapp即时通讯源码,附安装教程

前言 目前&#xff0c;即时通讯在app中逐渐成了不可或缺的功能&#xff0c;尤其是在疫情期间&#xff0c;音视频会议功能更是火了一把&#xff0c;但是想自己开发即时通讯功能&#xff0c;却一点都不简单&#xff0c;如果用原生开发的话&#xff0c;那么Android、iOS就需要两套…

IMP-00019

报错 IMP-00019: 由于 ORACLE 错误 12899 而拒绝行 IMP-00003: 遇到 ORACLE 错误 12899 ORA-12899: 列 "XX"."XX"."XXX" 的值太大 (实际值: 21, 最大值: 20) 【一个汉字用GBK存放是2个字符&#xff0c;用AL32UTF8占用3个字符&#xff0c;所以…

腾讯IM即时通讯(2.4.1)

可以参考另外两篇博客&#xff08;另外感谢&#xff09; http://blog.csdn.net/chenshuaiforwork/article/details/52910974 http://blog.csdn.net/chenshuaiforwork/article/details/52710341 在https://www.qcloud.com/product/im中下载SDK、查看集成文档 ImSDK 支持 JDK…

IM系统的简单介绍

作为一个互联网时代的公司无论你的产品是什么&#xff0c;你都需要一个网站还是app亦或是一个pc软件作为自己的网络平台&#xff0c;而在网络平台当中&#xff0c;即时收集用户反馈、与用户进行互动、方便用户之间互动提高产品活跃度只要存在这些需求&#xff0c;那么你的产品都…

开源轻量级 IM 框架 MobileIMSDK v6.2 发布

一、更新内容简介 本次更新为次要版本更新&#xff0c;进行了若干优化&#xff08;更新历史详见&#xff1a;码云 Release Nodes&#xff09;。可能是市面上唯一同时支持 UDPTCPWebSocket 三种协议的同类开源IM框架。 二、MobileIMSDK简介 MobileIMSDK 是一套专为移动端开发的…

基于Netty,从零开发IM:编码实践篇(im单聊功能)

引言 本篇主要讲解的是通过实战编码实现IM的单聊功能&#xff0c;内容涉及技术原理、编码实践。 补充说明&#xff1a;因为本系列文章主要目的是引导IM初学者在基于Netty的情况下&#xff0c;如何一步一步从零写出IM的逻辑和思维能力&#xff0c;因而为了简化编码实现&#xf…