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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baidu_35044401/article/details/68927426

第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



展开阅读全文

没有更多推荐了,返回首页