====== 环信坐席 iOS SDK ====== ---- ===== 开发工具 ===== > Xcode AgentSDKDemo 为Open Source,link to [[https://github.com/easemob/kefu-agent-ios/tree/master/AgentSDKDemo|AgentSDKDemo]] ==== 目录 ==== * [[#SDK介绍|SDK介绍]] * [[#准备工作|准备工作]] * [[#上传AppStore注意事项|上传AppStore注意事项]] * [[#集成离线推送|离线推送]] * [[#初始化|初始化]] * [[#登录|登录]] * [[#退出方法|退出]] * [[#判断是否已经登录|登录状态]] * [[#添加SDK监听|SDK监听]] * [[#添加消息监听|消息监听]] ==== SDK介绍 ==== 1、文件介绍:依赖库包括HyphenateLite.framework和AgentSDK.framework两个framework,二者缺一不可。 ==== 准备工作 ==== 1、工程中导入 HyphenateLite.framework和AgentSDK.framework 【勾选 Copy items if needed 和 Create groups】。\\ 2、选中当前的TARGET,向General -> Embedded Binaries 中添加以上两个依赖库.Linked Frameworks and Libraries 中会自动增加。\\ 3、向Build Settings -> Linking -> Other Linker Flags 中增加-ObjC【注意区分大小写】。\\ 4、在工程info.plist文件中 增加隐私权限(必填,用于聊天)\\ Privacy - Photo Library Usage Description 需要访问您的相册 Privacy - Microphone Usage Description 需要访问您的麦克风 Privacy - Camera Usage Description 需要访问您的摄像机 5、在.pch文件或者全局.h文件中添加如下代码: #ifdef __OBJC__ #import #endif ==== 上传AppStore注意事项 ==== 为了方便广大开发者开发测试,framework中提供的二进制文件支持x86_64 armv7 arm64等平台,上传AppStore需要剔除不需要的CPU架构支持,只剩余armv7、arm64 平台即可,命令如下: 【首先进入AgentSDK.framework所在的目录】 //移除二进制文件的x86_64支持 lipo AgentSDK.framework/AgentSDK -remove x86_64 -output AgentSDK //剔除x86_64 //替换framework内部二进制文件【记得备份】 mv AgentSDK AgentSDK.framework/AgentSDK //查看剥离后二进制文件支持的CPU架构,如果现实armv7 arm64 ,则完成剥离 lipo -info AgentSDK.framework/AgentSDK 【首先进入HyphenateLite.framework所在目录】 // 移除二进制文件的x86_64支持 lipo HyphenateLite.framework/HyphenateLite -remove x86_64 -output HyphenateLite //替换framework内部二进制文件【记得备份】 mv HyphenateLite HyphenateLite.framework/HyphenateLite //查看剥离后的二进制文件支持的CPU架构,如果显示armv7 arm64,就完成剥离 lipo -info HyphenateLite.framework/HyphenateLite ==== 集成离线推送 ==== - (void)registerRemoteNotification { //注册离线推送 { [application registerForRemoteNotifications]; UIUserNotificationType notificationTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil]; [application registerUserNotificationSettings:settings]; } //您注册了推送功能,iOS 会自动回调以下方法,得到 deviceToken,您需要将 deviceToken 传给 SDK。 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ [[HDClient sharedClient] bindDeviceToken:deviceToken]; } // 注册deviceToken失败 - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{ NSLog(@"error -- %@",error); } ** APNs注册失败,一般是由于使用了通用证书或者是模拟器调试导致,请检查证书并用真机调试。此处是 iOS 系统报的错,如仍不能确定,请从网上查找相关资料。** ==== 初始化 ==== 在didFinishLaunchingWithOptions中调用初始化方法: HDOptions *option = [[HDOptions alloc] init]; option.apnsCertName = apnsCertName;//NSString 类型的推送证书名字 option.enableConsoleLog = NO; //控制台的日志是否开启 [[HDClient sharedClient] initializeSDKWithOptions:option]; ==== 登录 ==== //传入username、password以及是否隐身登录 [[HDClient sharedClient] asyncLoginWithUsername:<#(NSString *)#> password:<#(NSString *)#> hidingLogin:<#(BOOL)#> completion:^(id responseObject, HDError *error) { if (error) { //登录失败 } else { //登录成功 } }]; ==== 退出方法 ==== [[HDClient sharedClient] logoutCompletion:^(HDError *error) { if (error == nil) { //退出成功 } else { //退出失败 } }]; ==== 判断是否已经登录 ==== [HDClient sharedClient].isLoggedInBefore //BOOL 类型,YES是,NO ==== 添加SDK监听 ==== //添加SDK监控,第二个参数是执行代理方法的队列,暂为主队列 [[HDClient sharedClient] addDelegate:self delegateQueue:nil]; //移除SDK监控 [[HChatClient sharedClient] removeDelegate:self]; /* * SDK连接服务器的状态变化时会接收到该回调 * * 以下情况, 会调用该方法: * 1. 登录成功后, 手机无法上网时, 会调用该回调 * 2. 登录成功后, 网络状态变化时, 会调用该回调 */ - (void)connectionStateDidChange:(HDConnectionState)aConnectionState; /** 管理员是否允许客服自定义最大接待人数 @param allow YES NO 分别表示允许、不允许 */ - (void)allowAgentChangeMaxSessions:(BOOL)allow; /** 当前账号被迫下线,需要重新登录 @param reason 下线原因 */ - (void)userAccountNeedRelogin:(HDAutoLogoutReason)reason; /* * 会话被管理员转接 * @param sessionId 被转接的会话ID */ - (void)conversationTransferedByAdminWithServiceSessionId:(NSString *)sessionId; /* * 会话被管理员关闭 * @param sessionId 被关闭的会话ID */ - (void)conversationClosedByAdminWithServiceSessionId:(NSString *)sessionId; /* * 会话自动关闭 * @param sessionId 关闭的会话ID */ - (void)conversationAutoClosedWithServiceSessionId:(NSString *)sessionId; /* * 会话最后一条消息变化 * @param sessionId 变化的sessionId */ - (void)conversationLastMessageChanged:(MessageModel *)message; /* * 新会话 * @param sessionId 新会话sessionId */ - (void)newConversationWithSessionId:(NSString *)sessionId; /** 有新转接会话请求接收 @param parameters sessionId,用于接受调度 */ - (void)transferScheduleRequest:(NSString *)sessionId; /** 会话被确认转接【需要管理员开启“转接会话需要对方确认”】 */ - (void)transferScheduleAccept:(NSString *)sessionId; /** 会话被拒绝转接 @param sessionId sessionId */ - (void)transferScheduleRefuse:(NSString *)sessionId; /* * 客服身份发生变化 */ - (void)roleChange:(RolesChangeType)type; /* * 待接入列表变化 */ - (void)waitListChange; /* * 客服列表发生变化 */ - (void)agentUsersListChange; /* * 通知中心有有变化 */ - (void)notificationChange; ==== 添加消息监听 ==== //添加消息监听 [[HDClient sharedClient].chatManager addDelegate:self]; //移除消息监听 [[HDClient sharedClient].chatManager removeDelegate:self]; /* * 收到新消息 * * @param aMessages 消息列表 */ - (void)messagesDidReceive:(NSArray *)aMessages;