热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

环信SDK头像、昵称、表情自定义和群聊设置的实现二(附源码)

前言:环信SDK头像、昵称、表情自定义和群聊设置的实现一(附源码)接着上面说的,我们来说说表情,它在哪里可以自定义,怎么写,那个方法是添加表情的我们都说说,找到Chat

前言:

        环信SDK 头像、昵称、表情自定义和群聊设置的实现 一(附源码)

     接着上面说的,我们来说说表情,它在哪里可以自定义,怎么写,那个方法是添加表情的我们都说说,找到 ChatViewController.m文件,它里面有这个方法;

-(NSArray*)emotionFormessageViewController:(EaseMessageViewController *)viewController

你可以在这里方法里面添加自己的表情,先看看Demo里面的源码,上面有自己的一些注释;

-(NSArray*)emotionFormessageViewController:(EaseMessageViewController *)viewController{

NSMutableArray *emotiOns= [NSMutableArray array];
for (NSString *name in [EaseEmoji allEmoji]) {

// 默认表情
EaseEmotion *emotion = [[EaseEmotion alloc] initWithName:@"" emotionId:name emotionThumbnail:name emotionOriginal:name emotionOriginalURL:@"" emotionType:EMEmotionDefault];
[emotions addObject:emotion];
}

EaseEmotion *temp = [emotions objectAtIndex:0];
EaseEmotionManager *managerDefault = [[EaseEmotionManager alloc] initWithType:EMEmotionDefault emotionRow:3 emotionCol:7 emotions:emotions tagImage:[UIImage imageNamed:temp.emotionId]];

// 下面是自己添加的Png格式的表情
// NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"normal_face" ofType:@"plist"]];
// NSMutableArray * nameData = [[NSMutableArray alloc] initWithCapacity:array.count];
// NSMutableArray * emotiOnPngs= [NSMutableArray array];
// _emotiOnDic= [NSMutableDictionary dictionary];
// for (NSDictionary * dic in array) {
//
// NSString * nameString = [dic objectForKey:@"face_name"];
// [nameData addObject:nameString];
// }
// int index = 0;
// for (NSString * faceName in nameData) {
//
// index++;
// EaseEmotion *emotion = [[EaseEmotion alloc] initWithName:faceName emotionId:[NSString stringWithFormat:@"em%d",(2000+index)] emotionThumbnail:faceName emotionOriginal:faceName emotionOriginalURL:@"" emotionType:EMEmotionPng];
// [emotionPngs addObject:emotion];
// [_emotionDic setObject:emotion forKey:[NSString stringWithFormat:@"em%d",(2000+index)]];
// }
//
// EaseEmotionManager *managerPng= [[EaseEmotionManager alloc] initWithType:EMEmotionPng emotionRow:3 emotionCol:7 emotions:emotionPngs tagImage:[UIImage imageNamed:@"[调皮]"]];

// 这是Demo里面兔斯基的表情,你要重新添加自己的Gif格式表情的话可以在这里按照这个方法进行添加
NSMutableArray *emotiOnGifs= [NSMutableArray array];
NSArray *names = @[@"icon_002",@"icon_007",@"icon_010",@"icon_012",@"icon_013",@"icon_018",@"icon_019",@"icon_020",@"icon_021",@"icon_022",@"icon_024",@"icon_027",@"icon_029",@"icon_030",@"icon_035",@"icon_040"];

int Gifindex = 0;
for (NSString * name in names) {

Gifindex++;

EaseEmotion *emotion = [[EaseEmotion alloc] initWithName:[NSString stringWithFormat:@"动图%d",Gifindex] emotionId:[NSString stringWithFormat:@"em%d",(2000 + Gifindex)] emotionThumbnail:[NSString stringWithFormat:@"%@_cover",name] emotionOriginal:[NSString stringWithFormat:@"%@",name] emotionOriginalURL:@"" emotionType:EMEmotionGif];

[emotionGifs addObject:emotion];
[_emotionDic setObject:emotion forKey:[NSString stringWithFormat:@"em%d",(2000 + Gifindex)]];
}

//EaseEmotionManager *managerGif= [[EaseEmotionManager alloc] initWithType:EMEmotionGif emotionRow:2 emotionCol:4 emotions:emotionGifs tagImage:[UIImage imageNamed:@"icon_002_cover"]];

return @[managerDefault];
}

可能有些小伙伴会和我一样,很纠结这个Demo默认的这套表情到底在哪里?看看下面的图你就能找到了。

 

恩就是这个EaseConvertToCommonEmoticonsHelper.m文件,上面截图的代码里面的表情名称是为了和Android统一改的,这里也不用纠结! 

再说说你获取到的群聊的名称和群图片,看看下面这张APP的截图;

 

    其实在这里你可以换一种思路去做这件事,不一定要经过后台,你可以叫后台的创建群的时候,或者是你自己在前端创建群的时候,群主题你可以写成群的名称,群的描述米可以把群群图片的URL写进去,换了个方式获取到它们了,这样获取到的群也就没啥问题了。这里的代码就不粘贴了,因为这部分只是这样说说,不是大家关心的地方了。要有疑问可以在我主页找到我QQ,QQ问我!

群的设置

    这里的群的设置也是Demo里面有的功能,我们主要就说说这里的内容,先看看下面的APP截图;

 

这个群里面有多少人,得和后台配合一起来做,让后台写接口你请求群里面所有人!重点说说这几个,屏蔽群消息,接受并提示群消息,查找聊天记录和清空聊天纪录;

一:屏蔽群消息 

     在SDK的文件EMClient.h中有这样一个属性

/*!
* \~chinese
* 群组模块
*/
@property (nonatomic, strong, readonly) id groupManager;

 这个属性可以用来管理屏蔽等这些属于群设置的内容,你通过 [EMClient sharedClient].groupManager 就可以取到它了,然后剩下的就是按部就班的操作,给大家随便写一个,比如下面这是一个完整的屏蔽群消息和取消的方法,说下面三点:

一:群主是不能屏蔽群消息的。

二:屏蔽了群消息你记得还有关闭接受并提醒这个操作,因为你屏蔽之后也就相应的收不到消息了。

三:刚进入这个设置界面,你得判断你是不是屏蔽了这个群的消息,用的就是  isBlocked 的属性,下面的接收提醒的是一个道理,刚进来都要判断你是不是开了!当然这些都是SDK里面的属性,你知道会用就行。

-(void)chatSetSwitchIsChanged:(UISwitch *)swit{

// NOTE:这里加判断,要是是群主就不能屏蔽消息
// NSSLog(@"===%@",READUSERDEFAULTS(UserPhonenumber));
// NSSLog(@"===%@",_chatGroup.owner);
if ([[NSString stringWithFormat:@"%@",READUSERDEFAULTS(UserPhonenumber)] isEqualToString:_chatGroup.owner]) {

[MBPSecondary showMBProgressHUDWithText:@"群主不能屏蔽消息" andType:FAILED];
self.chatSetSwitch.on = NO;
return;
}
// 打开屏蔽群消息
if ([swit isOn]){

[MBPSecondary showMBProgressHUDWithText:@"屏蔽中..." ToView:self.view];
[[EMClient sharedClient].groupManager blockGroup:_chatGroup.groupId completion:^(EMGroup *aGroup, EMError *aError) {

[MBPSecondary hideMBProgressHUDWith:self.view];
if (aError) {

[MBPSecondary showMBProgressHUDWithText:@"屏蔽失败" andType:FAILED];
self.chatSetSwitch.on = NO;

} else {

// 屏蔽成功的话要关闭远程推送
[[EMClient sharedClient].groupManager updatePushServiceForGroup:self.chatGroup.groupId isPushEnabled:NO completion:^(EMGroup *aGroup, EMError *aError){
if (aError) {

[MBPSecondary showMBProgressHUDWithText:@"屏蔽失败" andType:SUCCESSFUL];
self.chatSetSwitch.on = NO;

}else{

[MBPSecondary showMBProgressHUDWithText:@"屏蔽成功" andType:SUCCESSFUL];
self.chatAndPromptSetSwitch.on = NO;
}

}];

self.chatSetSwitch.on = YES;
}
}];
} else {

// 取消屏蔽群消息
[MBPSecondary showMBProgressHUDWithText:@"取消中..." ToView:self.view];
[[EMClient sharedClient].groupManager unblockGroup:_chatGroup.groupId completion:^(EMGroup *aGroup, EMError *aError) {

[MBPSecondary hideMBProgressHUDWith:self.view];
if (aError) {

[MBPSecondary showMBProgressHUDWithText:@"取消失败" andType:FAILED];
self.chatSetSwitch.on = YES;

} else {

[MBPSecondary showMBProgressHUDWithText:@"取消成功" andType:FAILED];
self.chatAndPromptSetSwitch.on = YES;
self.chatSetSwitch.on = NO;
}
}];
}
}

查找聊天记录:

    这个功能当然也是SDK里面有的,这里有几个地方你要注意的,我也在下面代码的注释里面有加,下面这个方法是当上面的搜索框一档输入的内容有变化就执行一次:

#pragma mark --  SearchBarSearch
//每次有输入内容更新就会调用这个方法
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
// 搜索指定内容的聊天记录
[self.noResultView removeFromSuperview];
NSString * keyWord = searchController.searchBar.text; // 关键字
// NOTE: EMMessageSearchDirectionDown 向下搜索是搜索比你设置的timestamp晚的消息
// EMMessageSearchDirectionUp 向上搜索是搜索比你设置的timestamp早的消息
[self.conversation loadMessagesWithKeyword:keyWord timestamp:[self.searchTime timeIntervalSince1970] * 1000 count:SEARCHMESSAGE_PAGE_SIZE fromUser:@"" searchDirection:EMMessageSearchDirectionDown completion:^(NSArray *aMessages, EMError *aError) {

if (aMessages.count == 0) {

[self.view addSubview:self.noResultView];
}

[_dataSourceArray removeAllObjects];
[_dataSourceArray addObjectsFromArray:aMessages];
[self.tableView reloadData];
}];
}

再给大家看一下截图,你在做的过程中要有什么问题,你也可以随时提出了!

 

    最后一个说说这个清空聊天纪录,这里就简单了,也是SDK里面写好的东西,在这里就不花时间,给大家提一下,大家看看!在 SDK的 EMConversation 里面有这个方法  deleteAllMessages就可以把一个会话的小新给清空了

 


推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
author-avatar
mobiledu2502870587
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有