- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[ECDevice sharedInstance].delegate = [DeviceDelegateHelper sharedInstance];
return YES;
}
代理类示例:
DeviceDelegateHelper.h文件
//代理类.h文件如下 import//创建单例 import "ECDeviceHeaders.h" @interface DeviceDelegateHelper : NSObject /** *@brief 获取DeviceDelegateHelper单例句柄 */ +(DeviceDelegateHelper*)sharedInstance; //代理类.m文件中需要实现ECDeviceDelegate的回调函数,代码示例如下: import "DeviceDelegateHelper.h" import "AppDelegate.h" //如需使用IM功能,需实现ECChatDelegate类的回调函数。 //如需使用实时音视频功能,需实现ECVoIPCallDelegate类的回调函数。 //如需使用音视频会议功能,需实现ECMeetingDelegate类的回调函数。
DeviceDelegateHelper.m文件
第一步:创建单例方法
+(DeviceDelegateHelper*)sharedInstance
{
static DeviceDelegateHelper *devicedelegatehelper;
static dispatch_once_t devicedelegatehelperonce;
dispatch_once(&devicedelegatehelperonce, ^{
devicedelegatehelper = [[DeviceDelegateHelper alloc] init];
});
return devicedelegatehelper;
}
第二步:连接云通讯的服务平台,实现ECDelegateBase代理的方法
/**
@brief 连接状态接口
@discussion 监听与服务器的连接状态 V5.0版本接口
@param state 连接的状态
@param error 错误原因值
*/
-(void)onConnectState:(ECConnectState)state failed:(ECError*)error {
switch (state) {
case State_ConnectSuccess://连接成功
[[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_onConnected object:[ECError errorWithCode:ECErrorType_NoError]];
break;
case State_Connecting://正在连接
[[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_onConnected object:[ECError errorWithCode:ECErrorType_Connecting]];
break;
case State_ConnectFailed://失败
[[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_onConnected object:error];
break;
default:
break;
}
}
第三步 :各功能回调函数实现
1. 如需使用im功能,需实现ECChatDelegate类的回调函数。
/**
@brief 客户端录音振幅代理函数
@param amplitude 录音振幅
*/
-(void)onRecordingAmplitude:(double) amplitude;
/**
@brief 接收即时消息代理函数
@param message 接收的消息
*/
-(void)onReceiveMessage:(ECMessage*)message;
/**
@brief 离线消息数
@param count 消息数
*/
-(void)onOfflineMessageCount:(NSUInteger)count;
/**
@brief 需要获取的消息数
@return 消息数 -1:全部获取 0:不获取
*/
-(NSInteger)onGetOfflineMessage;
/**
@brief 接收离线消息代理函数
@param message 接收的消息
*/
-(void)onReceiveOfflineMessage:(ECMessage*)message;
/**
@brief 离线消息接收是否完成
@param isCompletion YES:拉取完成 NO:拉取未完成(拉取消息失败)
*/
-(void)onReceiveOfflineCompletion:(BOOL)isCompletion;
/**
@brief 接收群组相关消息
@discussion 参数要根据消息的类型,转成相关的消息类;
解散群组、收到邀请、申请加入、退出群组、有人加入、移除成员等消息
@param groupMsg 群组消息
*/
-(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg;
2.如需使用音视频通话功能,需实现ECVoIPCallDelegate类的回调函数。
/**
@brief 有呼叫进入
@param callid 会话id
@param caller 呼叫人
@param callerphone 被叫人手机号
@param callername 被叫人姓名
@param calltype 呼叫类型
*/
- (NSString*)onIncomingCallReceived:(NSString*)callid withCallerAccount:(NSString *)caller withCallerPhone:(NSString *)callerphone withCallerName:(NSString *)callername withCallType:(CallType)calltype;
/**
@brief 呼叫事件
@param voipCall 电话实体类的对象
*/
- (void)onCallEvents:(VoIPCall*)voipCall;
/**
@brief 收到dtmf
@param callid 会话id
@param dtmf 键值
*/
- (void)onReceiveFrom:(NSString*)callid DTMF:(NSString*)dtmf;
/**
@brief 视频分辨率发生改变
@param callid 会话id
@param voip 通讯号
@param isConference NO 不是, YES 是
@param width 宽度
@param height 高度
*/
- (void)onCallVideoRatioChanged:(NSString *)callid andVoIP:(NSString *)voip andIsConfrence:(BOOL)isConference andWidth:(NSInteger)width andHeight:(NSInteger)height;
/**
@brief 收到对方切换音视频的请求
@param callid 会话id
@param requestType 请求音视频类型 视频:需要响应 音频:请求删除视频(不需要响应,双方自动去除视频)
*/
- (void)onSwitchCallMediaTypeRequest:(NSString *)callid withMediaType:(CallType)requestType;
/**
@brief 收到对方应答切换音视频请求
@param callid 会话id
@param responseType 回复音视频类型
*/
- (void)onSwitchCallMediaTypeResponse:(NSString *)callid withMediaType:(CallType)responseType;
3.如需使用音视频会议功能,需实现ECMeetingDelegate类的回调函数。
/**
@brief 实时对讲通知消息
@param msg 实时对讲消息
*/
-(void)onReceiveInterphoneMeetingMsg:(ECInterphoneMeetingMsg *)msg;
/**
@brief 语音群聊通知消息
@param msg 语音群聊消息
*/
-(void)onReceiveMultiVoiceMeetingMsg:(ECMultiVoiceMeetingMsg *)msg;
//多路视频通知消息
-(void)onReceiveMultiVideoMeetingMsg:(ECMultiVideoMeetingMsg *)msg;
//有会议呼叫邀请。邀请用户时,呼叫回调接口,与点对点外呼接口不一致,只有会议邀请才会回调这个接口,其他情况均使用点对点呼叫回调接口
-(NSString*)onMeetingCallReceived:(NSString*)callid withCallType:(CallType)calltype withMeetingData:(NSDictionary*)meetingData;
//初始化登录信息类ECLoginInfo实例(ECLoginInfo已经包含在SDK包里,不要用户创建)
//默认模式:对AppKey、AppToken和userName鉴权
ECLoginInfo * loginInfo = [[ECLoginInfo alloc] init];
loginInfo.username = @"自定义账号";//用户登录app的用户id即可。
loginInfo.appKey = @"appid";
loginInfo.appToken = @"apptoken";
loginInfo.authType = LoginAuthType_NormalAuth;//默认方式登录
loginInfo.mode = LoginMode_InputPassword;
[[ECDevice sharedInstance] login:loginInfo completion:^(ECError *error){
if (error.errorCode == ECErrorType_NoError) {
//登录成功
}else{
//登录失败
}
}];
//密码模式:对AppKey、userName和userPassword鉴权
ECLoginInfo * loginInfo = [[ECLoginInfo alloc] init];
loginInfo.username = @"通讯账号";
loginInfo.appKey = @"appid";
loginInfo. userPassword= @"通讯密码";
loginInfo.authType = LoginAuthType_PasswordAuth;//密码方式登录
loginInfo.mode = LoginMode_InputPassword;
[[ECDevice sharedInstance] login:loginInfo completion:^(ECError *error){
if (error.errorCode == ECErrorType_NoError) {
//登录成功
}else{
//登录失败
}
}];
// 鉴权模式:MD5 Token认证方式,服务器认证appKey、username、timestamp、MD5Token字段
* (该鉴权方式是最安全的方式,用户在自己的服务器根据规则生成MD5,在不暴露apptoken的情况下进行鉴权,且生成的MD5 Token在平台上有失效时间)
ECLoginInfo * loginInfo = [[ECLoginInfo alloc] init];
loginInfo.username = @"自定义账号";
loginInfo.appKey = @"appid";
loginInfo.timestamp = "时间戳";//yyyyMMddHHmmss
loginInfo.MD5Token = "MD5串";//MD5(appid+username+timestamp+apptoken)
loginInfo.authType = LoginAuthType_MD5TokenAuth;// 鉴权模式方式登录
loginInfo.mode = LoginMode_InputPassword;
[[ECDevice sharedInstance] login:loginInfo completion:^(ECError *error){
if (error.errorCode == ECErrorType_NoError) {
//登录成功
}else{
//登录失败
}
}];
登录环境:
登录环境分为:生产(正式)环境和沙盒环境。主要是推送证书不一样。如果你是在开发环境注册的推送,相对应就需要选择在沙盒环境上登录;如果你是生产环境注册的推送,相对应就需要选择在生产(正式)环境上登录。
注:提供此方法仅用于客户测试IOS离线推送功能,在测试完成后请及时去掉,防止环境不同导致的通信障碍。
功能:切换服务器环境
调用登录接口前,调用该接口切换服务器环境;不调用该函数,默认使用的是生产环境;
参数:isSandBox 是否沙盒环境
是否成功 0:成功 非0失败
-(NSInteger)SwitchServerEvn:(BOOL)isSandBox;