- (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;