IM常用整理

2019-08-20  本文已影响0人  幻想无极

前言

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

昵称和头像

昵称和头像的显示流程:

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

获取:昵称和头像的获取:当收到一条消息(群消息),得到发送者的用户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的消息从数据库中删除

@功能

分析

群组中,@某人的和群组普通消息没有区别,只是针对被@的用户在 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

红包领取消息扩展字段

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

红包详情

红包的状态

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

输入状态提示

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

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

注意:

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

上一篇 下一篇

猜你喜欢

热点阅读