IM常用整理

前言

撤回消息,红包,昵称头像,输入状态提示

昵称和头像

昵称和头像的显示流程:

  • a用户发一条消息给b
  • b从服务器收到消息
  • 本地有a用户的数据,直接显示
  • 本地没有a用户的数据,向服务器请求a的数据,成功后显示

方法一:从服务器获取昵称和头像

获取:昵称和头像的获取:当收到一条消息(群消息),得到发送者的用户id,然后查找手机本地数据库是否有此用户的信息,如果没有就通过用户id查出来,然后进行本地数据缓存,下次用户来信息直接从本地缓存中抓取

更新:点击个人资料的时候更新数据缓存

方法二:从扩展中获取昵称和头像

获取:把用户的昵称和头像放到消息扩展中,通过消息发送给对方,并进行数据缓存,在聊天里面判断扩展字段显示,在会话列表取出最后一条消息判断扩展字段显示,第二次从数据缓存中读取

@property (nonatomic,copy) NSString *userId;            //用户id(自己的用户id)
@property (nonatomic,copy) NSString *nickname;          //昵称(自己的)
@property (nonatomic,copy) NSString *avatarUrl;         //地址(自己的)

@property (nonatomic,copy) NSString *othernickname;     //昵称(别人的或者群的)
@property (nonatomic,copy) NSString *otheravatarUrl;    //头像地址(别人的或者群的)
@property (nonatomic,copy) NSString *otherUserId;       //用户id(对方的用户id)

更新:当消息扩展里面的信息变化的时候更新数据缓存

撤回消息

用户A消息给用户B,用户a当需要撤回的时候,使用透传消息,将要撤回的消息id传给用户b,用户b搜到这条消息,将该id的消息从数据库中删除

  • A用户发送消息
  • A用户需要撤回某条消息,将消息id通过扩展消息发送到用户B
  • B用户收到扩展消息,解析其中的messageid,从数据库删除对应消息
  • 如果需要显示撤回的ui,则删除成功之后发送一条‘撤回消息’cell
  • qq能撤回消息的限制是2分钟

@功能

分析

群组中,@某人的和群组普通消息没有区别,只是针对被@的用户在 UI 上显示会有不同。可以通过环信的扩展消息来实现。

流程

  • 发送方将想要@的人的环信 ID 通过扩展字段放到扩展消息中,并把消息发到群里。
  • 群中成员在收到消息时,先检查扩展字段中是否有对应的字段,如果有,取出其中的环信 ID。
  • 检查取出的环信 ID 与当前登录的环信 ID 是否一致。
  • 如果检测一致,需要在 UI 上做特殊处理,显示出对应的提示信息,如“[有人@我]“,如不一致,不做处理。

发送时

// @某些人
message.ext = @{@"em_at_list":@[@"6001",@"6002"]}; // @6001,6002

接受时

-(void)didReceiveMessages:(NSArray *)messages{
    // 获取当前登录用户环信ID
    NSString *currentUserId = [[[EaseMob sharedInstance].chatManager loginInfo] objectForKey: kSDKUsername];
    // 被@用户环信ID
    for(EMMessage *msg in messages){
        NSArray *atList = [message.ext objectForKey:@"em_at_list"];
        for (NSString *atName in atList) {
            if (atName isEqualToString:currentUserId) {
             // 当前用户被@,需要单独处理UI                    
            }
        }
    }
}

红包流程

分析

主要分为发送红包,消息列表中的展示,检测是否被拆开,红包拆开(详情)界面,红包领取过后的红包领取消息

发送

A3268DCB2124C32899DB11229FCBDEEE.png
  • 网络请求发送红包获取第三方支付的支付参数
  • 调用第三方支付
  • 成功后发送一条消息增加红包扩展字段

红包扩展字段

红包ID,文字内容,是否是红包,

请求红包参数

发送者的id,接受者的id,发送的金额(单位分),第三方平台类型,发送的内容

消息列表展示

BB5963F34C2321A0129FDF14BF586638.png
  • 获取红包的扩展字段使用文本类型展示出来

点击红包

5E09D56439D2667925F19D3126B79E7F.png
  • 通过红包ID和用户ID请求服务器红包详情
  • 判断是不是发红包的用户,如果是发红包的用户直接进入详情
  • 如果是接受红包的用户,根据返回的拆开状态判定
  • 如果未拆开进行拆红包操作,如果已经拆开,直接进入红包详情
  • 拆开红包之后要发送一条红包已经领取消息(自定义cell)

红包领取消息扩展字段

是否是领取红包,领取人的名字

红包详情

红包的状态

  • 红包已过期
  • 红包已抢完
  • 红包不存在
  • 红包已领取
  • 红包已退还
  • 自己不能拆自己的红白
  • 红包未支付成功
  • 红包未领取

显示出领取人的一些信息和自己的信息

输入状态提示

功能:输入状态提示,当A用户正在输入文字的时候,聊天的对方可以收到用户A正在输入的提示。

监听用户a的输入,一旦有文字输入,每隔几秒,将消息输入状态发送给b,b客户端收到消息的时候提示a正在输入消息
顺序:

  • 用户a向用户b发送一条状态消息
  • 用户b在收到消息的时候,判断当前是否在和a的聊天界面,如果在就显示输入状态
  • 当隔了几秒没有收到a的状态消息,状态自动消失

注意:

  • 两边需要约束时间间隔
  • 这种消息不进行数据库的存储

环信的解决方案:
http://docs.easemob.com/im/490integrationcases/input-status

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270