文档章节

iOS--环信集成并修改头像和昵称(需要自己的服务器)

指尖流年
 指尖流年
发布于 2017/07/13 21:15
字数 1020
阅读 162
收藏 0

 

一、环信集成

使用Cocopods导入:

   pod 'EaseUI', :git => 'https://github.com/easemob/easeui-ios-hyphenate-cocoapods.git'

   pod 'Hyphenate'

二、初始化SDK

 //AppKey:注册的AppKey,详细见下面注释。
    //apnsCertName:推送证书名(不需要加后缀),详细见下面注释。
    EMOptions *options = [EMOptions optionsWithAppkey:IMAPPKEY];
    options.apnsCertName = @"istore_dev";
    [[EMClient sharedClient] initializeSDKWithOptions:options];

//初始化EaseUI (可以与初始化SDK二选一,本人都写了,以防万一)

    [[EaseSDKHelper shareHelper] hyphenateApplication:application 

 didFinishLaunchingWithOptions:launchOptions appkey:IMAPPKEY  apnsCertName:@"qy"

  otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}];

三、环信登录 

在登录环信之前要登录自己的APP,这样后台要和环信后台交互(可以让后台自动注册环信),在APP登录成功时返回用户名和密码,用于后期的环信登录

 //登录环信

    EMError *error1 = [[EMClient sharedClient] loginWithUsername:[[NSUserDefaults standardUserDefaults] objectForKey:@"uuid"]  password:[[NSUserDefaults standardUserDefaults] objectForKey:@"password"]];

NSLog(@"ppppppperror1:%d",error1.code);

//error1.code=0,则登录成功

 //自动登录

 [[EMClient sharedClient].options setIsAutoLogin:YES];

代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //AppKey:注册的AppKey,详细见下面注释。
    //apnsCertName:推送证书名(不需要加后缀),详细见下面注释。
    EMOptions *options = [EMOptions optionsWithAppkey:@"douser#istore"];
    options.apnsCertName = @"istore_dev";
    [[EMClient sharedClient] initializeSDKWithOptions:options];


    //环信 IMAPPKEY
    //AppKey:注册的AppKey,详细见下面注释。
    //apnsCertName:推送证书名(不需要加后缀),详细见下面注释。
    
    EMOptions *options = [EMOptions optionsWithAppkey:IMAPPKEY];
    options.apnsCertName = @"qy";
    [[EMClient sharedClient] initializeSDKWithOptions:options];


    
    //登录环信
    EMError *error1 = [[EMClient sharedClient] loginWithUsername:[[NSUserDefaults  standardUserDefaults] objectForKey:@"uuid"]  password:[[NSUserDefaults standardUserDefaults] objectForKey:@"password"]];
    
     NSLog(@"ppppppperror1:%d",error1.code);


    //自动登录
    [[EMClient sharedClient].options setIsAutoLogin:YES];
    

    //初始化EaseUI
    [[EaseSDKHelper shareHelper] hyphenateApplication:application
                        didFinishLaunchingWithOptions:launchOptions
                                               appkey:IMAPPKEY
                                         apnsCertName:@"qy"
                                          otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}];
    



    return YES;
}

// APP进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[EMClient sharedClient] applicationDidEnterBackground:application];
}

// APP将要从后台返回
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [[EMClient sharedClient] applicationWillEnterForeground:application];
}


四、初始化聊天页面

可以自己创建一个ViewController并且继承 EaseMessageViewController,这样方便后期修改头像

可以与后台沟通好,创建群成功时直接让后台返回群ID即可

//群ID:@"groupId"
//聊天类型:EMConversationTypeGroupChat
 HYNChatViewController *chatController = [[HYNChatViewController alloc] initWithConversationChatter:@"groupId" conversationType:EMConversationTypeGroupChat];
chatController.title = self.navigationItem.title;//聊天界面的标题
[self.navigationController pushViewController:chatController animated:YES];

初始化单聊界面

//个人ID:@"groupId"
//聊天类型: EMConversationTypeChat
HYNChatViewController *chatController = [[HYNChatViewController alloc] initWithConversationChatter:conver.conversationId conversationType:EMConversationTypeChat];
chatController.title = self.navigationItem.title;//聊天界面的标题
[self.navigationController pushViewController:chatController animated:YES];;

获取会话列表

//getConversation: 获取或创建与8001的会话
//type:EMConversationTypeChat: 会话类型

EMConversation *conversation = [[EMClient sharedClient].chatManager getConversation:@"8001" type:EMConversationTypeChat createIfNotExist:YES];

//获取所有会话
NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations];
//获取会话未读消息数
[EMConversation unreadMessagesCount];

显示用户昵称和头像

 主要在这个方法进行修改
- (id<IMessageModel>)messageViewController:(EaseMessageViewController *)viewController modelForMessage:(EMMessage *)message;

五、展示有昵称和头像的聊天界面

1.在列表页面解析数据,点击行时传入所需要的数据如:昵称和头像

列表页面

//获取所有会话列表
_conversations  = [[EMClient sharedClient].chatManager getAllConversations];
//拿到所有会话列表的conversationId,用于解析数据
 NSMutableArray *arr = [NSMutableArray new];
    
    for(int i=0; i<_conversations.count; i++){
        
        EMConversation *conversation = _conversations[i];
        [arr addObject:conversation.conversationId];
        
        NSLog(@"conversationId:%@",conversation.conversationId);
        
    }

//数据解析



    
//点击行单元时,传入数据并跳转单聊界面
EMConversation *conver = _conversations[indexPath.row];
    
 CircleFansListModel *model = _userinfoModelArr[indexPath.row];
HYNChatViewController *chatController = [[HYNChatViewController alloc] initWithConversationChatter:conver.conversationId conversationType:EMConversationTypeChat];
        chatController.title = model.nickname;
        chatController.nickname = model.nickname;
        chatController.avatarURLPath = model.headimg; 
[self.navigationController pushViewController:chatController animated:YES];

在继承了EaseMessageViewController的单聊界面

.h中

#import <EaseUI/EaseUI.h>

//要遵守协议EaseMessageViewControllerDelegate,EaseMessageViewControllerDataSource
@interface HYNChatViewController : EaseMessageViewController<EMChatManagerDelegate,EaseMessageViewControllerDelegate,EaseMessageViewControllerDataSource>

@property (nonatomic, strong) NSString *chatWay;//chatWay=0,圈聊,chatWay=1,私信

@property (nonatomic, copy) NSString *nickname;
@property (nonatomic, copy) NSString *avatarURLPath;

@end

.m中

- (void)viewDidLoad {
    [super viewDidLoad];

   //一定要加上这俩个代理设置,之前因为没有添加,找了半天的bug,最后发现原来是这里忘记设置了,简直吐了2升血
    self.delegate = self;
    self.dataSource = self;

     //刷新
     self.showRefreshHeader = YES;


}


//修改头像和昵称的方法
#pragma mark - EaseMessageViewControllerDataSource
- (id<IMessageModel>)messageViewController:(EaseMessageViewController *)viewController modelForMessage:(EMMessage *)message
{
    id<IMessageModel> model = nil;
    model = [[EaseMessageModel alloc] initWithMessage:message];
    NSLog(@"-----message:%@",message);
    
    if (model.isSender) {//自己发送 ,头像和昵称是在登录时后台返回的
        
        model.message.ext = @{@"avatar":[[NSUserDefaults standardUserDefaults] objectForKey:@"headimgurl"],@"nickname":[[NSUserDefaults standardUserDefaults] objectForKey:@"nickname"]};
        //头像
        model.avatarURLPath = [[NSUserDefaults standardUserDefaults] objectForKey:@"headimgurl"];
        //昵称
        model.nickname = [[NSUserDefaults standardUserDefaults] objectForKey:@"nickname"];
        //头像占位图
        model.failImageName = @"logo";
        
    }else{//对方发送
       
       //列表页面的传值
        //头像
        model.avatarURLPath = _avatarURLPath;
        //昵称
        model.nickname = _nickname;
        //头像占位图
        model.failImageName = @"logo";
    }
    
    
    return model;
}

最后展示一下结果

 

有不足之处请留言,谢谢!

 

 

© 著作权归作者所有

共有 人打赏支持
指尖流年
粉丝 9
博文 61
码字总数 30011
作品 0
海淀
iOS工程师
私信 提问
iOS--融云即时通信的使用(推送、聊天和会话列表的头像和昵称)

集成刚说完,这里接直接说使用吧 一、初始化 导入头文件 初始化 连接服务器:融云提供的 方法,需要传入融云的token值,这个token值是在登录自己服务器时,后台所传过来的,同时传过来的数据...

指尖流年
2017/10/28
0
0
你见过最目瞪狗呆的bug是什么?

你见过最目瞪狗呆的bug是什么? 2018-05-28 14:01编辑: garace分类:程序人生来源:代码湾 bug网上注册刘伟楠 招聘信息: C++工程师 Cocos2d-x游戏客户端开发 iOS开发工程师 京东招聘iOS开发...

garace
05/28
0
0
iOS运营级B2B服务平台App、自定义图标库、个人中心页面、识别身份证Demo、瀑布流等源码

iOS精选源码 简单的个人中心页面-自定义导航栏并予以渐变动画(http://www.code4app.com/thread-10860-1-1.html) 一个近乎完整的可识别中国身份证信息的Demo 可自动快速...(http://www.code4a...

Android爱开源
10/25
0
0
四种绕过iOS SSL验证和证书锁定的方法

     几个月前,Cody Wass发布了一篇关于如何绕过Android验证和证书锁定(Certificate Pinning)的文章。由此,我觉得也有必要写一篇关于iOS的。正如Cody在博客中所说的,中间人(MitM)...

嘶吼RoarTalk
09/29
0
0
Java转iOS-第一个项目总结(1)

0.前言 本人14年12月份,从网站开发组转到了移动开发组,自己的java两年半工作经验变成了objective-c零经验。2015年1月份新启动了一个移动项目,年后因为人事变动,自己从辅助开发变成了"核心...

蛙牛
2015/03/31
0
67

没有更多内容

加载失败,请刷新页面

加载更多

epoll中使用

1、一个线程epoll_wait时,另一个线程调用epoll_ctl是安全的。 2、使用edge触发,在socket有数据到来后,不收取数据,再次调用epoll_ctl将socket加入,仍会触发下一次动作。 asio用该方法来发...

gelare
20分钟前
1
0
PHP规范PSR2

PSR标准 - PSR-2 为了尽可能的提升阅读其他人代码时的效率,下面例举了一系列的通用规则,特别是有关于PHP代码风格的。 各个成员项目间的共性组成了这组代码规范。当开发者们在多个项目中合作...

geek土拨鼠
35分钟前
5
0
【极简】如何在服务器上安装SSL证书?

本文适合任何人了解,图形化操作。下面以腾讯云为例,并且服务器(linux)也安装了宝塔面板。 1.登陆腾讯云账号进入控制台,找到SSL的产品 2.按要求申请并填写表单,记住私钥密码 3.提交后,待...

皇冠小丑
44分钟前
1
0
深入理解编译器

深入理解编译器 原文出处 欢迎向Rust中文社区投稿,投稿地址,好文将在以下地方直接展示 1 Rust中文社区首页 2 Rust中文社区Rust文章栏目 3 知乎专栏Rust语言 编程语言是如何工作的 从内部理解...

krircc
45分钟前
1
0
Centos7&docker-ce&compose&wordpress

如题,最近帮人装个WordPress,想起来用docker方便,这里做个记录。 因为docker要求linux内核版本3.10以上我记得,所以直接用的centos7省去很多麻烦。 主机在国内的先把yum源改成国内的阿里云...

虚拟世界的懒猫
49分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部