美文网首页
IM常用整理

IM常用整理

作者: 幻想无极 | 来源:发表于2019-08-20 14:00 被阅读0次

前言

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

昵称和头像

昵称和头像的显示流程:

  • 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

相关文章

  • IM常用整理

    前言 撤回消息,红包,昵称头像,输入状态提示 昵称和头像 昵称和头像的显示流程: a用户发一条消息给b b从服务器...

  • 扫盲篇:产品经理可能用到的专业术语(二)

    终于整理出了刀刀老师在给同学讲课时,产品经理常用术语!(二) 与行业有关的: IM,即时通信类,如QQ、微信、旺旺...

  • shadow插件框架调研与实践

    参考 【Android 修炼手册】常用技术篇 -- Android 插件化解析https://juejin.im/...

  • 常用整理

    1,99美元账号申请http://www.jianshu.com/p/9b994a019ee6 2,证书相关htt...

  • NodeJs 使用 gm 对图片进行加工

    NodeJs 两种最常用的图片处理工具:GraphicsMagick 或 ImageMagick,GM 是 IM ...

  • RNN

    RNN资源整理:awesome-rnn GitHub 上的RNN项目: Awesome Tensorflow Im...

  • create-react-app的自定义配置

    create-react-app作为最常用的react脚手架集成了很多的常用功能,比如支持es6、JSX、动态im...

  • 课程笔记

    https://shimo.im/docs/Z8xLb6G5IfQrPZ56 《娜娜整理 3月12日课程整理》,可...

  • nginx 2

    1 nginx 常用模块整理 nginx 常用模块整理1 http核心模块 ngx_http_core_modu...

  • Windows下使用nodejs图片处理工具的插件gm

    前言 GraphicsMagick(GM) 或 ImageMagick(IM)是两种常用的图片处理工具,功能基本相...

网友评论

      本文标题:IM常用整理

      本文链接:https://www.haomeiwen.com/subject/becpsctx.html