您的位置:首页 > 其它

基于环信Demo3.0,实现单聊功能 -- 简书内容

2016-02-17 19:31 489 查看
http://www.jianshu.com/p/f53be9664f14



注意:

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

最终效果



15

添加环信SDK

下载环信SDK 2.2.1

链接地址



1

添加EaseMobSDK到项目中,并添加依赖库。这里需要注意的地方:libEaseMobClientSDKLite.a不包含实时语音功能,libEaseMobClientSDK.a包含所有功能。必须要删掉一个,否则会报错。这里删除libEaseMobClientSDKLite.a。
添加依赖库。参见官方文档



2



3

新创建一个pch,并在Build Settings中添加配置。

在pch中,导入头文件。
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
#import "EaseMob.h"
#endif /* PrefixHeader_pch */




4

添加环信EaseUI

导入EaseUI到项目中,并实现基础的登陆功能。

找到Demo3.0的EaseUI目录,然后将如下文件,拖拽到项目中。并在pch文件中引入EaseUI.h
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
#import "EaseMob.h"
#import "EaseUI.h"
#endif /* PrefixHeader_pch */




5



6

在AppDelegate.m中注册环信的SDK和UI。
在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中的功能

首先导入Demo3.0中如下文件到项目中:



7

导入class里单聊功能ChatView到项目中



8

导入完成后的项目目录



9

添加头文件到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 */


注释未引用的文件,删除重复引用的文件,添加第三方库Parse的依赖。

注释未引用的文件:

在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<IMessageModel>)messageModel
{
//UserProfileViewController *userprofile = [[UserProfileViewController alloc] initWithUsername:messageModel.nickname];
//[self.navigationController pushViewController:userprofile animated:YES];
}

- (id<IMessageModel>)messageViewController:(EaseMessageViewController *)viewController
modelForMessage:(EMMessage *)message
{
id<IMessageModel> 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<IMessageModel> 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程序见:这里(百度云盘)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: