环信客服SDK接入-----(一)

来源:互联网 发布:淘宝评论违禁词有哪些 编辑:程序博客网 时间:2024/05/20 02:30

第1步:快速创建APP关联

移动客服系统的“APP关联”对应即时通讯云(IM)后台的应用。在移动客服系统创建关联后,可直接登录IM后台管理该关联对应的应用。

  • 如果您还没有环信即时通讯云的账号,可以打开环信移动客服,进入“管理员模式 > 渠道管理 > 手机APP”,快速创建一个“APP关联”;
  • 如果您已有环信即时通讯云的账号,并创建了应用,可以登录环信移动客服,进入“管理员模式 > 渠道管理 > 手机APP”,关联您的IM账号。

关于快速创建APP关联的分步骤演示,请参考:快速创建APP关联。

开发工具:Xcode。

集成移动客服iOS SDK时,可参考“商城”demo源码和EaseUI源码。

下载地址:https://github.com/easemob/helpdeskdemo-ios

KefuSDK基于IM SDK 3.x,如同时使用环信IM功能(非音视频),需使用此文档中的初始化、登录、登出操作,不需要添加IM的SDK,其IMSDK-API正常使用。

完成该步骤可以实现用户注册、登录、退出,向移动客服系统发送文本、语音、图片、文件消息功能。

准备工作

1、在工程中导入 HelpDeskSDK 和 HelpDeskUI 文件夹。两种方式:

  • 选择“File > Add Files to”,从本地选择上述文件夹,点击“Options”,勾选“Create groups”,并点击“Add”;
  • 或者,直接将上述文件夹拖入工程,在弹出对话框中勾选“Create groups”,并点击“Finish”。

2、向Build Settings → Linking → Other Linker Flags 中增加-ObjC.

3、向Build Phases → Link Binary With Libraries 中添加依赖库

  • CoreMedia.framework
  • MobileCoreServices.framework
  • ImageIO.framework
  • AudioToolbox.framework
  • AVFoundation.framework
  • libc++.dylib
  • libz.dylib
  • libstdc++.6.0.9.dylib
  • libsqlite3.dylib
  • (Xcode 7 及以上版本,后缀为tbd)

4、SDK 不支持 bitcode,在 Build Settings → Build Options → Enable Bitcode 中设置 NO。

5、在工程info.plist文件中 增加隐私权限

  • Privacy - Photo Library Usage Description 需要访问您的相册
  • Privacy - Microphone Usage Description 需要访问您的麦克风
  • Privacy - Camera Usage Description 需要访问您的摄像机

6、在pch文件或全局.h文件中添加如下代码

#ifdef __OBJC__ #import "helpdesk_sdk.h" #import "HelpDeskUI.h" #endif
注:如果工程中没有pch文件,需要新建一个,并在Build Settings中设置Prefix Header为该pch文件,例如:HelloiOS/PrefixHeader.pch。

注意:由于环信客服端SDK不支持cocoPods 导入,只能进行手动导入。demo内有两个SDK文件夹,其中HelpDeskSDKFull支持实时语音,另外一个不支持实时语音

7、拿到环信客服SDK的appKey

8、初始化sdk

 HOptions *option = [[HOptions alloc] init];    option.appkey = HXKF_APP_KEY; // 必填项,appkey获取地址:kefu.easemob.com,“管理员模式 > 渠道管理 > 手机APP”页面的关联的“AppKey”    option.tenantId = @"32583";// 必填项,tenantId获取地址:kefu.easemob.com,“管理员模式 > 设置 > 企业信息”页面的“租户ID”    //推送证书名字    option.apnsCertName = @"your apnsCerName";//(集成离线推送必填)    //Kefu SDK 初始化,初始化失败后将不能使用Kefu SDK    HError *initError = [[HChatClient sharedClient] initializeSDKWithOptions:option];    if (initError) { // 初始化错误                NSLog(@"DADADSADASDSAD");            }
9. 进入会话列表页面

  // 进入会话页面    HDMessageViewController *chatVC = [[HDMessageViewController alloc] initWithConversationChatter:@"kefuchannelimid_750310"]; // 获取地址:kefu.easemob.com,“管理员模式 > 渠道管理 > 手机APP”页面的关联的“IM服务号”            [self.navigationController pushViewController:chatVC animated:YES];


10.修改客服头像(一般得到客服的头像和用户名实在接收到消息的方法内获取到的,红色是经过修改的代码)

#pragma mark - public - (NSArray *)formatMessages:(NSArray *)messages{    NSMutableArray *formattedArray = [[NSMutableArray alloc] init];    if ([messages count] == 0) {        return formattedArray;    }        for (HMessage *message in messages) {        //Calculate time interval        CGFloat interval = (self.messageTimeIntervalTag - message.timestamp) / 1000;        if (self.messageTimeIntervalTag < 0 || interval > 60 || interval < -60) {            NSDate *messageDate = [NSDate dateWithTimeIntervalInMilliSecondSince1970:(NSTimeInterval)message.timestamp];            NSString *timeStr = @"";                        if (_dataSource && [_dataSource respondsToSelector:@selector(messageViewController:stringForDate:)]) {                timeStr = [_dataSource messageViewController:self stringForDate:messageDate];            }            else{                timeStr = [messageDate formattedTime];            }            [formattedArray addObject:timeStr];            self.messageTimeIntervalTag = message.timestamp;        }                //Construct message model        id<HDIMessageModel> model = nil;        //接收的消息不能设置头像        BOOL isSender = message.direction == HMessageDirectionSend;        if (isSender && _dataSource && [_dataSource respondsToSelector:@selector(messageViewController:modelForMessage:)]) {            model = [_dataSource messageViewController:self modelForMessage:message];        }        else{            model = [[HDMessageModel alloc] initWithMessage:message];            NSDictionary *weichat = [NSDictionary dictionary];            if ([message.ext objectForKey:@"weichat"]) {                weichat = [message.ext valueForKey:@"weichat"];            }            NSDictionary *agent = [NSDictionary dictionary];            if ([weichat objectForKey:@"agent"]) {                agent = [weichat valueForKey:@"agent"];            }            if ([[agent allKeys] containsObject:@"avatar"]) {                NSString *url = [agent valueForKey:@"avatar"];                if (![url isKindOfClass:[NSNull class]]) {                    if ([url hasPrefix:@"http"]) {                        model.avatarURLPath = [agent valueForKey:@"avatar"];                    } else {                        //设置客服头像                        model.avatarURLPath = [[@"https:" stringByAppendingString:[agent valueForKey:@"avatar"]] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];                    }                }            }            model.avatarImage = [UIImage imageNamed:@"HelpDeskUIResource.bundle/user"];            model.failImageName = @"imageDownloadFail";        }        if (model) {            [formattedArray addObject:model];        }    }        return formattedArray;}

10.更改自己的头像

是在HDBaseMessageCell.m文件内进行赋值的  修改对方头像也可以在这里修改

#pragma mark - setter- (void)setModel:(id<HDIMessageModel>)model{    [super setModel:model];    if (model.avatarURLPath) {        [self.avatarView sd_setImageWithURL:[NSURL URLWithString:model.avatarURLPath] placeholderImage:model.avatarImage];    } else {        self.avatarView.image = model.avatarImage;    }    if (![model.nickname isKindOfClass:[NSNull class]]) {        _nameLabel.text = model.nickname;    }    if (self.model.isSender) {        _hasRead.hidden = YES;        switch (self.model.messageStatus) {                            case HMessageStatusPending:            {                _statusButton.hidden = YES;                [_activity setHidden:NO];                [_activity startAnimating];            }                break;            case HMessageStatusDelivering:            {                _statusButton.hidden = YES;                [_activity setHidden:NO];                [_activity startAnimating];            }                break;            case HMessageStatusSuccessed:            {                _statusButton.hidden = YES;                [_activity stopAnimating];                if (self.model.isMessageRead) {                    _hasRead.hidden = NO;                }            }                break;                        case HMessageStatusFailed:            {                [_activity stopAnimating];                [_activity setHidden:YES];                _statusButton.hidden = NO;            }                break;            default:                break;        }                // 自己的 昵称 头像        [self.avatarView sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://pic35.nipic.com/20131121/2531170_145358633000_2.jpg"]] placeholderImage:[UIImage imageNamed:@""]];        self.nameLabel.text = @"我的名字";    }else{        // 对方的昵称 头像            }}

11.进行指定客服聊天

#pragma mark - Hyphenate#pragma mark - HChatDelegate#pragma mark -- 获取客服的名字和头像- (void)messagesDidReceive:(NSArray *)aMessages {    for (HMessage *message in aMessages) {        //获取客服的头像和名称        NSLog(@"%@",message.ext[@"weichat"][@"agent"]);        NSLog(@"头像 ----- url  %@",message.ext[@"weichat"][@"agent"][@"avatar"]);        NSLog(@"昵称 ----- %@",message.ext[@"weichat"][@"agent"][@"userNickname"]);        self.title = message.ext[@"weichat"][@"agent"][@"userNickname"];                if ([self.conversation.conversationId isEqualToString:message.conversationId]) {            [self addMessageToDataSource:message progress:nil];        }    }}- (void)cmdMessagesDidReceive:(NSArray *)aCmdMessages {    for (HMessage *message in aCmdMessages) {        if ([self.conversation.conversationId isEqualToString:message.conversationId]) {            [self showHint:NSEaseLocalizedString(@"receiveCmd", @"receive cmd message")];            break;        }    }}

今天第一次接触环信客服SDK 有不足之处希望指正  联系方式QQ: 497108685



0 0
原创粉丝点击