目录
1、集成
2、EaseUI中类的使用
3、对于头像昵称等信息的获取(群&个人)
4、app在后台运行时(没有杀死)接收好友发来的消息
集成
关于集成和appKey的获取这些东西,我相信我写的再清楚都不如官方文档了,所以下放给出链接,请直接去官网看文档,再详细不过了。
IOS环信官网文档
IOS环信视频集成demo
IOS环信项目源码demo
EaseUI的使用
1、首先你必须知道EaseUI当中所存在的ViewController、View、Model都作用于什么页面,只有这样你才能准确知道你想要哪个页面,或者按照自己项目需求更改哪些页面,因为毕竟demo中所存在的还是有很多是项目中不需要的功能,下面呢。我就按照问题配图的方式指出页面对应的类~
对于头像昵称等信息的获取(群&个人)
思考?首先环信demo中是不会存储头像(人&群聊),当然也不会存储昵称(人&群聊),demo当中只会展示环信ID(eg:19001)和环信默认的头像(单聊---->EaseUIResource.bundle/user 群聊----->EaseUIResource.bundle/group)那我们总不能展示环信ID和默认头像吧。所以我们必须依靠后台和自己本地存储来实现头像和昵称的展示。
解决方式如下~
解决方式1:我们本地一定会有类似于我的好友这样的页面。如果没有后台也能帮我们查得到,那么我们可以把这些list存储在本地,在聊天的时候对本地的数据进行遍历便利之后我们就可以获取到想要的头像和昵称了。
备注:这种解决方式是有弊端的,因为你是无法保证你好友数据是实时刷新的也就是我举个例子(A+B为好友 B在A同意添加好友之后 B还没有走我的好友的接口,A就和B说了话,那么这个时候 B会话列表的展示一定是没有A的昵称和头像的!)
所以为了解决上面这个问题,我们采用以下方案来实现实时获取数据。
方案如下、利用归档存储的方案,在本地存储我的好友数据,那么我们需要在什么情况下获取到对方好友的信息呢?
第一个地方~ 场景:A+B为好友 B在同意的时候 把A的信息存起来(包括头像和昵称)有的人会问了他的头像和昵称你是怎么查到的。那肯定是后台帮你查的啊。通过环信的ID后台帮你查到这个人的头像和昵称,然后返回给你,你存储在本地即可。
第二个地方~扩展消息当中在环信demo中又一个实例方法
- (void)messagesDidReceive:(NSArray *)aMessages{
[self playNewMessageSound];/*声音开启*/
for (EMMessage *message in aMessages) {
// 消息中的扩展属性
self.extDic = [[NSMutableDictionary alloc] initWithDictionary:message.ext];
NSLog(@"消息中的扩展属性是 -- %@",self.extDic);
}
}
扩展消息当中所返回的message.ext就是当A和B说话的时候,B收到的回调内容。而message.ext恰恰就是A的信息(包括他自己的头像和昵称等信息)那么这个时候一定会有人问A这个消息是什么时候发的呢。请看下面~
在EaseMessageViewController.m文件中,有一个实例方法是
- (void)sendTextMessage:(NSString *)text withExt:(NSDictionary*)ext
{
NSLog(@"%@",ext);
// /*取出环信登录账号 和姓名 还有头像*/
NSString *hyName = [kUserDefaults objectForKey:SAVE_HyphName];
NSString *myName = [kUserDefaults objectForKey:SAVE_Name];
NSString *myPicture = [kUserDefaults objectForKey:SAVE_Picture];
NSDictionary *parma = @{
@"hxid":hyName,
@"pic":myPicture,
@"name":myName,
};
NSLog(@"%@",parma);
EMMessage *message = [EaseSDKHelper sendTextMessage:text
to:self.conversation.conversationId
messageType:[self _messageTypeFromConversationType]
messageExt:parma];
NSLog(@"%@",ext);
[self _sendMessage:message];
}
在sendTextMessage这个方法中text参数就是A和B说话A说话的内容,而ext就是扩展消息的内容,也就是上面messagesDidReceive方法中B接到回调里面包含A信息的参数message.ext,所以现在发和接受都找到了。
备注:以上的方法中,第一种并不能保证实时刷新数据,有可能产生的问题就是在A+B为好友的时候,B同意之后并不能立马知道好友数据,从而使聊天出现头像不争取,昵称不正确的现象。那么第二种的优势,就在于我们可以实时知道对方的头像,昵称等信息(但是千万别忘了查重处理,同样的数据不要存了,以免本地很卡)
解决完个人聊天的头像和昵称之后,我们来思考下,群内人员头像和昵称的操作
eg:A+B创建了一个群。然后A作为群主又向群里拉人(拉了一个C),这个时候问题就出现了。当C说话的时候,A电话里面是不存在C的信息的。那么也会出现头像和昵称不对应的状态。那么这个问题怎么处理呢。方案如下~
其实上面写的扩展消息的回调方法无论是群还是个人还是聊天室。都是会走的。那么我们可以采用和上面个人头像昵称一样的方式,创建本地的数据库,来存储群聊天中出现的陌生人的数据。也就是代码如下~
- (void)messagesDidReceive:(NSArray *)aMessages{
[self playNewMessageSound];/*声音开启*/
for (EMMessage *message in aMessages) {
// 消息中的扩展属性
self.extDic = [[NSMutableDictionary alloc] initWithDictionary:message.ext];
/*判断是不是群聊的消息*/
NSLog(@"%d",message.chatType);
/*1为群聊 0 为单聊*/
if (message.chatType == 1) {
/*如果是群聊就把self.dic存起来 当然这里还是需要做查重处理的,如果有了就别加了。容易卡*/
}
NSLog(@"消息中的扩展属性是 -- %@",self.extDic);
}
}
按照上面的解决方式,我们还是可以获取到群里不是本人好友的数据,这样群中头像和昵称的问题也解决了。
app在后台运行时(没有杀死)接收好友发来的消息
代码的话这边就不复制了,直接上demo~
iOS-10-本地推送通知Demo
代码当中唯一需要更改的就是
希望本文能帮助到你,我是辛小二 喜欢的话记得点赞哦