博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
环信集成 2---基于环信Demo3.0,实现单聊功能
阅读量:6439 次
发布时间:2019-06-23

本文共 8148 字,大约阅读时间需要 27 分钟。

这几天在做环信,所以把环信相关的东西拿过来,做个系统点的东西

 

 

注意:

  1. 这里Demo集成的是带有实时语音功能的(libEaseMobClientSDK.a)。
  2. 环信库是直接拖拽EaseMobSDK文件夹到项目内的,没有使用pod管理。

最终效果

15

添加环信SDK

  1. 下载环信SDK 2.2.1
    1
  2. 添加EaseMobSDK到项目中,并添加依赖库。这里需要注意的地方:libEaseMobClientSDKLite.a不包含实时语音功能,libEaseMobClientSDK.a包含所有功能。必须要删掉一个,否则会报错。这里删除libEaseMobClientSDKLite.a。
  3. 添加依赖库。
    2
    3
  4. 新创建一个pch,并在Build Settings中添加配置。
    在pch中,导入头文件。
    #ifndef PrefixHeader_pch#define PrefixHeader_pch#import "EaseMob.h"#endif /* PrefixHeader_pch */
    4

添加环信EaseUI

  1. 导入EaseUI到项目中,并实现基础的登陆功能。
    找到Demo3.0的EaseUI目录,然后将如下文件,拖拽到项目中。并在pch文件中引入EaseUI.h
    #ifndef PrefixHeader_pch#define PrefixHeader_pch#import "EaseMob.h"#import "EaseUI.h"#endif /* PrefixHeader_pch */
    5
    6
  2. 在AppDelegate.m中注册环信的SDK和UI。
  3. 在StoryBoard中新增一个按钮,并给予登陆方法。然后在方法中实现登陆功能。当登陆成功后,发送通知。收到通知后,跳转到UI提供的EaseMessageViewController界面。

其中APPDelegate中文件内容

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    //注册SDK    [[EaseMob sharedInstance] registerSDKWithAppKey:@"easemob-demo#chatdemoui" apnsCertName:nil];    //注册UI    [[EaseSDKHelper shareHelper] easemobApplication:application                      didFinishLaunchingWithOptions:launchOptions                                             appkey:@"easemob-demo#chatdemoui"                                       apnsCertName:nil                                        otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}];    [[EaseMob sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];    return YES;}

ViewController中的内容

- (IBAction)login:(id)sender {    //用户名:zlanchun 密码:123456    //异步登陆账号    [[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@"zlanchun" password:@"123456" completion:^(NSDictionary *loginInfo, EMError *error) {         if (loginInfo && !error) {             //发送自动登陆状态通知             [[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_LOGINCHANGE object:@YES];         } else {             NSLog(@"login error: %@",error);         }     } onQueue:nil];}- (void)jumpToChatVC {    //创建聊天室 对象:zlanchun1    EaseMessageViewController *chatController = [[EaseMessageViewController alloc] initWithConversationChatter:@"zlanchun1" conversationType:eConversationTypeChat];    [self.navigationController pushViewController:chatController animated:YES];}

继承Demo3.0中的功能

  1. 首先导入Demo3.0中如下文件到项目中:
    7
  2. 导入class里单聊功能ChatView到项目中
    8
  3. 导入完成后的项目目录
    9
  4. 添加头文件到PCH中。
    #ifndef PrefixHeader_pch#define PrefixHeader_pch//头文件#import "ChatDemoUIDefine.h"#import "EMAlertView.h"#import "TTGlobalUICommon.h"#import "UIViewController+DismissKeyboard.h"#import "NSString+Valid.h"#import "EaseMob.h"#import "EaseUI.h"#endif /* PrefixHeader_pch */
  5. 注释未引用的文件,删除重复引用的文件,添加第三方库Parse的依赖。

    注释未引用的文件:

  6. 在ViewController.m中应用头文件#import "ChatViewController.h"。然后在跳转方法中,注册跳转VC,跳转即可。

ViewController.m新增部分:

- (void)jumpToChatVC {    //创建聊天室 对象:zlanchun1    //EaseMessageViewController *chatController = [[EaseMessageViewController alloc] initWithConversationChatter:@"zlanchun1" conversationType:eConversationTypeChat];    //创建基于Demo3.0Class的chatroom    ChatViewController *chatController = [[ChatViewController alloc] initWithConversationChatter:@"zlanchun1" conversationType:eConversationTypeChat];    [self.navigationController pushViewController:chatController animated:YES];}

ChatViewController.m中需要注释的地方

#import "ChatViewController.h"//#import "ChatGroupDetailViewController.h"//#import "ChatroomDetailViewController.h"#import "CustomMessageCell.h"//#import "UserProfileViewController.h"//#import "UserProfileManager.h"//#import "ContactListSelectViewController.h"
- (void)messageViewController:(EaseMessageViewController *)viewController   didSelectAvatarMessageModel:(id
)messageModel{ //UserProfileViewController *userprofile = [[UserProfileViewController alloc] initWithUsername:messageModel.nickname]; //[self.navigationController pushViewController:userprofile animated:YES];}
- (id
)messageViewController:(EaseMessageViewController *)viewController modelForMessage:(EMMessage *)message{ id
model = nil; model = [[EaseMessageModel alloc] initWithMessage:message]; model.avatarImage = [UIImage imageNamed:@"EaseUIResource.bundle/user"];// UserProfileEntity *profileEntity = [[UserProfileManager sharedInstance] getUserProfileByUsername:model.nickname];// if (profileEntity) {// model.avatarURLPath = profileEntity.imageUrl;// } model.failImageName = @"imageDownloadFail"; return model;}
- (void)showGroupDetailAction{    [self.view endEditing:YES];//    if (self.conversation.conversationType == eConversationTypeGroupChat) {//        ChatGroupDetailViewController *detailController = [[ChatGroupDetailViewController alloc] initWithGroupId:self.conversation.chatter];//        [self.navigationController pushViewController:detailController animated:YES];//    }//    else if (self.conversation.conversationType == eConversationTypeChatRoom)//    {//        ChatroomDetailViewController *detailController = [[ChatroomDetailViewController alloc] initWithChatroomId:self.conversation.chatter];//        [self.navigationController pushViewController:detailController animated:YES];//    }}
- (void)transpondMenuAction:(id)sender{//    if (self.menuIndexPath && self.menuIndexPath.row > 0) {//        id
model = [self.dataArray objectAtIndex:self.menuIndexPath.row];// ContactListSelectViewController *listViewController = [[ContactListSelectViewController alloc] initWithNibName:nil bundle:nil];// listViewController.messageModel = model;// [listViewController tableViewDidTriggerHeaderRefresh];// [self.navigationController pushViewController:listViewController animated:YES];// } self.menuIndexPath = nil;}

UIImageView+HeadImage.文件中注释

/************************************************************ *  * EaseMob CONFIDENTIAL * __________________ * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. * * NOTICE: All information contained herein is, and remains * the property of EaseMob Technologies. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from EaseMob Technologies. */#import "UIImageView+HeadImage.h"//#import "UserProfileManager.h"@implementation UIImageView (HeadImage)- (void)imageWithUsername:(NSString *)username placeholderImage:(UIImage*)placeholderImage{    if (placeholderImage == nil) {        placeholderImage = [UIImage imageNamed:@"chatListCellHead"];    }//    UserProfileEntity *profileEntity = [[UserProfileManager sharedInstance] getUserProfileByUsername:username];//    if (profileEntity) {//        [self sd_setImageWithURL:[NSURL URLWithString:profileEntity.imageUrl] placeholderImage:placeholderImage];//    } else {//        [self sd_setImageWithURL:nil placeholderImage:placeholderImage];//    }    [self sd_setImageWithURL:nil placeholderImage:placeholderImage];}@end@implementation UILabel (Prase)- (void)setTextWithUsername:(NSString *)username{//    UserProfileEntity *profileEntity = [[UserProfileManager sharedInstance] getUserProfileByUsername:username];//    if (profileEntity) {//        if (profileEntity.nickname && profileEntity.nickname.length > 0) {//            [self setText:profileEntity.nickname];//            [self setNeedsLayout];//        } else {//            [self setText:username];//        }//    } else {//        [self setText:username];//    }    [self setText:username];}@end

添加parse依赖库:

  • StoreKit.framework
  • Bolts.framework
  • Parse.framework
  • Accounts.framework
  • Social.framework。
    其中Bolts.framework/Parse.framework在文件夹EaseClass/3rdparty/Parse下。
    10
    11

删除重用引用MBProgressHUD库

12

删除wav.mm文件。

13

删除VoiceConvert文件

14

错误集合

  • 报错1:未添加Parse依赖库引起的clang: error: linker command failed with exit code 1 (use -v to see invocation)错误。

    16

    解决办法:添加parse的依赖库,一共有5个(环信小哥告诉我有4个,结果,添加完4个依赖后,9个错误变成4个了。咋办?还好有Google,查parse依赖关系,发现15年7月份依赖增加了一个。)
    剩余的4个错误("_OBJC_CLASS_$_SKPayment"):

    17

    看看国外小哥怎么说得()。

    18
  • 报错2:删除重复引用MBProgressHUD库

    19
  • 报错3:删除重复引用wav.mm文件

    20
  • 报错4:删除VoiceConvert文件

    21

Demo程序见:(百度云盘)

链接:http://www.jianshu.com/p/f53be9664f14

转载地址:http://kmzwo.baihongyu.com/

你可能感兴趣的文章
基准测试(Benchmarks)不必消亡
查看>>
ceph 常用命令记录(完善中...)
查看>>
AppDynamics把业务交易跟踪扩展到SAP环境
查看>>
[Three.js]Three.js中文文档-自定义混合方程常数
查看>>
Kafka 处理器客户端介绍
查看>>
通过分析这段代码的进化历程,或许能够加深您对JavaScript的作用域的理解
查看>>
创建对象(一):创建与继承
查看>>
深入浅出vue1.0:Vue 实例
查看>>
XML 实体扩展攻击
查看>>
浅谈 OneAPM 在 express 项目中的实践
查看>>
kubernetes节点选择器
查看>>
Sublime Text 3初体验
查看>>
快速排序&归并排序
查看>>
将字符串转换成二维码
查看>>
AsyncTask的小分析
查看>>
使用Redis实现关注关系
查看>>
Go抓取网页数据并存入MySQL和返回json数据<三>
查看>>
MySQL复制介绍及搭建
查看>>
Java在线调试工具
查看>>
[译]CSS-理解百分比的background-position
查看>>