//發送圖片 /* ECImageMessageBody *messageBody = [[ECImageMessageBody alloc] initWithFile:@"圖片文件本地絕對路徑" displayName:@"文件名稱"]; */ //發送文件 /* ECFileMessageBody *messageBody = [[ECFileMessageBody alloc] initWithFile:@"文件本地絕對路徑" displayName:@"文件名稱"]; */ //發送文本 ECTextMessageBody *messageBody = [[ECTextMessageBody alloc] initWithText:@"你好,歡迎來到云通訊"]; ECMessage *message = [[ECMessage alloc] initWithReceiver:@"John的賬號Id" body:messageBody]; //如果需要跨應用發送消息,需通過appkey+英文井號+用戶帳號的方式拼接,發送錄音、發送群組消息等與此方式一致 //群組跨應用只是邀請成員時,被邀請的用戶要用appid#賬號的格式,向群組里發消息不需要。 //例如:appkey=20150314000000110000000000000010 帳號ID=john 傳入帳號=20150314000000110000000000000010#john //ECMessage *message = [[ECMessage alloc] initWithReceiver:@"appkey#John的賬號Id" body:messageBody]; #warning 取本地時間 NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0]; NSTimeInterval tmp =[date timeIntervalSince1970]*1000; message.timestamp = [NSString stringWithFormat:@"%lld", (long long)tmp]; [[ECDevice sharedInstance].messageManager sendMessage:message progress:nil completion:^(ECError *error, ECMessage *amessage) { if (error.errorCode == ECErrorType_NoError) { //發送成功 }else if(error.errorCode == ECErrorType_Have_Forbid || error.errorCode == ECErrorType_File_Have_Forbid) { //您已被群組禁言 }else{ //發送失敗 } }];
//開始錄音 -(void)startRecord{ ECVoiceMessageBody * messageBody = [[ECVoiceMessageBody alloc] initWithFile:@"語音文件路徑.arm" displayName:@"文件名.arm"]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; [[ECDevice sharedInstance].messageManager startVoiceRecording:messageBody error:^(ECError *error, ECVoiceMessageBody *messageBody) { if (error.errorCode == ECErrorType_RecordTimeOut) { //錄音超時,立即發送;應用也可以選擇不發送 ECMessage *message = [[ECMessage alloc] initWithReceiver:@"John的賬號Id" body:messageBody]; NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0]; NSTimeInterval tmp =[date timeIntervalSince1970]*1000; message.timestamp = [NSString stringWithFormat:@"%lld", (long long)tmp]; [[ECDevice sharedInstance].messageManager sendMessage:message progress:nil completion:^(ECError *error, ECMessage *amessage) { if (error.errorCode == ECErrorType_NoError) { //發送成功 }else if(error.errorCode == ECErrorType_Have_Forbid || error.errorCode == ECErrorType_File_Have_Forbid){ //您已被群組禁言 }else{ //發送失敗 } }]; } }]; } //停止錄音 -(void)stopRecord { [[ECDevice sharedInstance].messageManager stopVoiceRecording:^(ECError *error, ECVoiceMessageBody *messageBody) { if (error.errorCode == ECErrorType_NoError) { ECMessage *message = [[ECMessage alloc] initWithReceiver:@"John的賬號Id" body:messageBody]; NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0]; NSTimeInterval tmp =[date timeIntervalSince1970]*1000; message.timestamp = [NSString stringWithFormat:@"%lld", (long long)tmp]; [[ECDevice sharedInstance].messageManager sendMessage:message progress:nil completion:^(ECError *error, ECMessage *amessage) { if (error.errorCode == ECErrorType_NoError) { //發送成功 }else if(error.errorCode == ECErrorType_Have_Forbid || error.errorCode == ECErrorType_File_Have_Forbid){ //您已被群組禁言 }else{ //發送失敗 } }]; } else if (error.errorCode == ECErrorType_RecordTimeTooShort) { //錄音時間過短 } }]; }
ECSountTouchConfig *config = [[ECSountTouchConfig alloc] init]; config.pitch = 8; config.pitch = 0; config.rate = -20; config.srcVoice = srcFile; config.dstVoice = desFile; [[ECDevice sharedInstance].messageManager changeVoiceWithSoundConfig:config completion:^(ECError *error, ECSountTouchConfig* dstSoundConfig) { ECVoiceMessageBody * messageBody = [[ECVoiceMessageBody alloc] initWithFile: [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:[dstSoundConfig.dstVoice lastPathComponent]] displayName:[dstSoundConfig.dstVoice lastPathComponent]]; [[ECDevice sharedInstance].messageManager playVoiceMessage:messageBody completion:^(ECError *error) { }]; } 參照demo
/** @該通知回調接口在代理類里面 @brief 接收即時消息代理函數 @param message 接收的消息 */ -(void)onReceiveMessage:(ECMessage*)message { //如果是跨應用消息,from為appkey+英文井號+用戶帳號。 //例如:appkey=20150314000000110000000000000010 帳號ID=john 發送者=20150314000000110000000000000010#john NSLog:(@"收到%@的消息,屬于%@會話", message.from, message.sessionId); switch(message.messageBody.messageBodyType){ case MessageBodyType_Text:{ ECTextMessageBody *msgBody = (ECTextMessageBody *)message.messageBody; NSLog(@"收到的是文本消息------%@,msgBody.text"); break; } case MessageBodyType_Voice:{ ECVoiceMessageBody *msgBody = (ECVoiceMessageBody *)message.messageBody; NSLog(@"音頻文件remote路徑------%@",msgBody. remotePath); break; } case MessageBodyType_Video:{ ECVideoMessageBody *msgBody = (ECVideoMessageBody *)message.messageBody; NSLog(@"視頻文件remote路徑------%@",msgBody. remotePath); break; } case MessageBodyType_Image:{ ECImageMessageBody *msgBody = (ECImageMessageBody *)message.messageBody; NSLog(@"圖片文件remote路徑------%@",msgBody. remotePath); NSLog(@"縮略圖片文件remote路徑------%@",msgBody. thumbnailRemotePath); break; } case MessageBodyType_File:{ ECFileMessageBody *msgBody = (ECFileMessageBody *)message.messageBody; NSLog(@"文件remote路徑------%@",msgBody. remotePath); break; } default: break; } }
/** @brief 刪除點對點消息(目前只支持刪除接收到的消息) @param message 需要刪除的消息 @param completion 執行結果回調block */ -(void)deleteMessage:(ECMessage*)message completion:(void(^)(ECError *error, ECMessage* message)) completion; 接收方: [[ECDevice sharedInstance].messageManager deleteMessage:self.displayMessage completion:^(ECError *error, ECMessage *message) { // 刪除服務器上的消息后,你也需要將本地的消息清空 }]; 發送方:(當接收方調用刪除消息接口,并且成功刪除后,會給發送方發一條通知消息) - (void)onReceiveMessageNotify:(ECMessageNotifyMsg *)message { NSLog(@"onReceiveMessageNotify:--%@",message); ECMessageDeleteNotifyMsg *msg = (ECMessageDeleteNotifyMsg*)message; }
說明:關于發送地理位置,該功能需要用戶自己在客戶端通過發送消息的接口實現,SDK中沒有封裝具體的發送位置接口(android、ios均需用戶自己在客戶端實現)。
//經緯度 @property (nonatomic, readonly) CLLocationCoordinate2D coordinate; //位置信息 @property (nonatomic, readonly, copy) NSString *title; ECLocationPoint *point = [ECLocationPoint alloc] init]; ECMessage* message = [[DeviceChatHelper sharedInstance] sendLocationMessage:point.coordinate andTitle:point.title to:self.sessionId]; 參照demo
[ECDevice sharedInstance].messageManager sendMessage:[[ECMessage alloc] initWithReceiver:to body:[[ECUserStateMessageBody alloc] initWithUserState:[NSString stringWithFormat:@"%d", state]]] progress:nil completion:^(ECError *error, ECMessage *message) {}];
ECMessage *message = [[ECMessage alloc] init]; ECPreviewMessageBody *msgBody = [[ECPreviewMessageBody alloc] initWithFile:”本地文件路徑” displayName: ”本地文件路徑后綴名”]; msgBody.url = ”鏈接消息URL”; msgBody.title = ”網頁的表頭”; msgBody.remotePath = ”網頁抓取圖片的地址”; msgBody.desc = ”網頁抓取的描述”; msgBody.thumbnailLocalPath = ”圖片縮略圖路徑”; message = [[DeviceChatHelper sharedInstance] sendMediaMessage:msgBody to:self.sessionId]; [ECDevice sharedInstance].messageManager sendMessage:message progress:nil completion:^(ECError *error, ECMessage *amessage) { if (error.errorCode == ECErrorType_NoError) { //發送成功 }else if(error.errorCode == ECErrorType_Have_Forbid || error.errorCode == ECErrorType_File_Have_Forbid) { //您已被群組禁言 }else {} }];
/** @brief 撤回消息 @param message 需要撤回的消息 @param completion 執行結果回調block */ [[ECDevice sharedInstance].messageManager revokeMessage:message completion:^(ECError *error, ECMessage *message) { __strong typeof(weakSelf)strongSelf = weakSelf; NSLog(@"撤回消息 error=%d", (int)error.errorCode); if (error.errorCode == ECErrorType_NoError) { // 撤回消息成功后,此位置顯示為你撤回了一條消息,此消息是需要本地去做,因為不經過服務器。可以仿照demo具體實現 } }
-(void)onReceiveMessageNotify:(ECMessageNotifyMsg*)message { if(message.messageType==ECMessageNotifyType_RevokeMessage) {// 接收方收到對方撤回消息的邏輯處理 } }
/** @brief 消息已讀(接收到的消息) @param message 設置已讀的消息 @param completion 執行結果回調block */ ECMessage *message(接收消息) [[ECDevice sharedInstance].messageManager readedMessage:message completion:^(ECError *error, ECMessage *amessage) { }
-(void)onReceiveMessageNotify:(ECMessageNotifyMsg*)message { if(message.messageType==ECMessageNotifyType_MessageIsReaded) {// 消息發送方收到對方回執消息的邏輯處理 } }
/** @brief 是否置頂會話 @param seesionId 會話id @param isTop 0 取消置頂 1 置頂 */ seesionId = @”通訊號碼” isTop = 0/1(“是否置頂0“) [[ECDevice sharedInstance].messageManager setSession:sessionId IsTop:isTop completion:^(ECError *error, NSString *seesionId) { if (error.errorCode == ECErrorType_NoError) {//是否置頂成功失敗} } /** @brief 獲取置頂會話列表 @param completion 執行結果回調block */ - (void)getTopSession:(void(^)(ECError *error, NSArray *topContactLists))completion{ // topContactLists里面包含會話sessionId }
ECTextMessageBody *messageBody = [[ECTextMessageBody alloc] initWithText:@"你好,歡迎來到云通訊"]; ECMessage *message = [[ECMessage alloc] initWithReceiver:@"出彩中國人的群組Id,以字母g開頭" body:messageBody]; #warning 取本地時間 NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0]; NSTimeInterval tmp =[date timeIntervalSince1970]*1000; message.timestamp = [NSString stringWithFormat:@"%lld", (long long)tmp]; [[ECDevice sharedInstance].messageManager sendMessage:message progress:nil completion:^ (ECError *error, ECMessage *amessage) { if (error.errorCode == ECErrorType_NoError) { //發送成功 }else if(error.errorCode == ECErrorType_Have_Forbid || error.errorCode == ECErrorType_File_Have_Forbid){ //您已被群組禁言 }else{ //發送失敗 } }];
ECSountTouchConfig *config = [[ECSountTouchConfig alloc] init]; config.pitch = 8; config.pitch = 0; config.rate = -20; config.srcVoice = srcFile; config.dstVoice = desFile; [[ECDevice sharedInstance].messageManager changeVoiceWithSoundConfig:config completion:^(ECError *error, ECSountTouchConfig* dstSoundConfig) { ECVoiceMessageBody * messageBody = [[ECVoiceMessageBody alloc] initWithFile:[[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:[dstSoundConfig.dstVoice lastPathComponent]] displayName:[dstSoundConfig.dstVoice lastPathComponent]]; [[ECDevice sharedInstance].messageManager playVoiceMessage:messageBody completion:^(ECError *error) { }]; } 參照demo
//經緯度 @property (nonatomic, readonly) CLLocationCoordinate2D coordinate; //位置信息 @property (nonatomic, readonly, copy) NSString *title; ECLocationPoint *point = [ECLocationPoint alloc] init]; ECMessage* message = [[DeviceChatHelper sharedInstance] sendLocationMessage:point.coordinate andTitle:point.title to:self.sessionId]; 參照demo
/** @該通知回調接口在代理類里面,和單聊是同一個通知回調接口,只不過發送者id是以'g'開頭。 @brief 接收即時消息代理函數 @param message 接收的消息 */ -(void)onReceiveMessage:(ECMessage*)message { NSLog:(@"收到%@的消息,來自%@群組", message.from, message.sessionId); switch(message.messageBody.messageBodyType){ case MessageBodyType_Text:{ ECTextMessageBody *msgBody = (ECTextMessageBody *)message.messageBody; NSLog(@"收到的是文本消息------%@,msgBody.text"); break; } case MessageBodyType_ Voice:{ ECVoiceMessageBody *msgBody = (ECVoiceMessageBody *)message.messageBody; NSLog(@"音頻文件remote路徑------%@",msgBody. remotePath); break; } case MessageBodyType_ Video:{ ECVideoMessageBody *msgBody = (ECVideoMessageBody *)message.messageBody; NSLog(@"視頻文件remote路徑------%@",msgBody. remotePath); break; } case MessageBodyType_ Image:{ ECImageMessageBody *msgBody = (ECImageMessageBody *)message.messageBody; NSLog(@"圖片文件remote路徑------%@",msgBody. remotePath); NSLog(@"縮略圖片文件remote路徑------%@",msgBody. thumbnailRemotePath); break; } case MessageBodyType_ File:{ ECFileMessageBody *msgBody = (ECFileMessageBody *)message.messageBody; NSLog(@"文件remote路徑------%@",msgBody. remotePath); break; } case MessageBodyType_Location:{ ECLocationMessageBody*msgBody = (ECLocationMessageBody*)message.messageBody; break; } default: break; } }
ECGroup * newgroup = [[ECGroup alloc] init]; newgroup.name = @"出彩中國人"; newgroup.declared = @"歡迎來到容聯云通訊"; newgroup.isDiscuss = NO;//討論組該值為YES [[ECDevice sharedInstance].messageManager createGroup:newgroup completion:^(ECError *error, ECGroup *group) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"創建群組成功 群組ID:%@", group.groupId); } else{ NSLog(@"創建群組失敗 errorCode:%d\r\nerrorDescription:%@", (int)error.errorCode,error.errorDescription); } }];
1、我們假設"出彩中國人"群組已經有Tony和John兩位成員,現在Smith要加入"出彩中國人"群組,則代碼如下:
[[ECDevice sharedInstance].messageManager joinGroup:@"出彩中國人群組ID" reason:@"我要參加出彩中國人" completion:^(ECError *error, NSString *groupId) { __strong __typeof(weakSelf)strongSelf = weakSelf; if (error.errorCode==ECErrorType_Have_Joined) { NSLog(@"您已經在群組%@", groupId); }else if(error.errorCode==ECErrorType_NoError){ if (strongSelf.applyGroup.mode == ECGroupPermMode_DefaultJoin) { NSLog(@"加入群組%@成功!", groupId); }else{ NSLog(@"申請加入已發出,請等待群主同意請求"); } }else{ NSLog(@"加入群組失敗 errorCode:%d\r\nerrorDescription:%@", (int)error.errorCode,error.errorDescription); } }];
注意:如果群組"出彩中國人"是公開群組,則smith直接被允許加入。
如果群組"出彩中國人"是私有群組,
則smith加入需要群主Tony的的同意。
關于幾種群組的解釋:
公開群組:用戶可以直接被允許加入群組,不需要群主進行驗證;
驗證群組:用戶加入群組的時候需要群主同意才可以加入
私有群組:只能群主邀請加入
Tony首先收到Smith加入的請求,代碼如下:
/** @該通知回調接口是代理類里面統一的關于群組的"群組通知回調接口"— onReceiveGroupNoticeMessage @brief 接收群組相關消息 @discussion 參數要根據消息的類型,轉成相關的消息類; 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息 @param groupMsg 群組消息 */ -(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{ if (groupMsg.messageType == ECGroupMessageType_Propose) { ECProposerMsg * message = (ECProposerMsg *)groupMsg; NSString *declared = @""; if (message.declared.length>0) { declared = [NSString stringWithFormat:@",理由:%@",message.declared]; } NSLog(@"\"%@\" 昵稱:\"%@\" 申請加入討論組\"%@\"%@",message.proposer,message.nickName, message.groupId, declared); } }
Tony同意Smith加入的請求,代碼如下:
/** @brief 管理員驗證用戶申請加入群組 @param groupId 申請加入的群組id @param memberId 申請加入的成員id @param type 是否同意 @param completion 執行結果回調block */ [[ECDevice sharedInstance].messageManager ackJoinGroupRequest:@"出彩中國人群組ID" member:@" Smith的賬號Id" ackType:EAckType_Agree completion:^(ECError *error, NSString *gorupId, NSString *memberId) { if (error.errorCode == ECErrorType_NoError || error.errorCode == ECErrorType_Have_Joined) { NSLog(@"加入群組"); }else{ NSLog(@"errorCode:%d\rerrorDescription:%@",(int)error.errorCode,error.errorDescription); } }];
2.Smith加入成功后,群組中成員Tony和John收到的通知回調方法代碼如下:
/** @該通知回調接口是代理類里面統一的關于群組的"群組通知回調接口"—onReceiveGroupNoticeMessage @brief 接收群組相關消息 @discussion 參數要根據消息的類型,轉成相關的消息類; 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息 @param groupMsg 群組消息 */ -(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{ if (groupMsg.messageType == ECGroupMessageType_ReplyJoin) { ECReplyJoinGroupMsg *message = (ECReplyJoinGroupMsg *)groupMsg; NSLog(@"討論組\"%@\"%@\"%@\"的加入申請",message.groupId,message.confirm==2?@"同意":@"拒絕", message.member); } }
1、我們假設"出彩中國人"群組的創建者Tony邀請Smith加入群組,則代碼如下:
/** @brief 管理員邀請加入群組 @param groupId 邀請加入的群組id @param reason 邀請理由 @param members 邀請加入的人 @param confirm 是否需要對方驗證 1:直接加入(不需要驗證) 2:需要對方驗證 @param completion 執行結果回調block */ [[ECDevice sharedInstance].messageManager inviteJoinGroup:@"出彩中國人群組ID" reason:@"歡迎來到云通訊" members:@[@"Smith的賬號Id"] confirm:2 completion:^(ECError *error, NSString *groupId, NSArray *members) { [MBProgressHUD hideHUDForView:self.view animated:YES]; if(error.errorCode ==ECErrorType_NoError) { NSLog(@"邀請請求已發出"); } else { NSLog(@"errorCode:%d\rerrorDescription:%@",(int)error.errorCode,error.errorDescription); } }];
注意:如果Tony邀請Smith加入的時候,接口參數不指定加入需要Smith確認,則smith直接被邀請加入。
如果指定需要Smith同意才能加入,則Smith收到如下通知回調,并在回調里面回復"同意"或"拒絕"加入。代碼如下:
/** @該通知回調接口是代理類里面統一的關于群組的"群組通知回調接口"— onReceiveGroupNoticeMessage @brief 接收群組相關消息 @discussion 參數要根據消息的類型,轉成相關的消息類; 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息 @param groupMsg 群組消息 */ -(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{ if (groupMsg.messageType == ECGroupMessageType_Invite) { ECInviterMsg * message = (ECInviterMsg *)groupMsg; NSString *declared = @""; if (message.declared.length>0) { declared = [NSString stringWithFormat:@",理由:%@",message.declared]; } NSLog(@"\"%@\"邀請您加入\"%@\"討論組\"%@",message.admin,message.groupId,declared); if (message.confirm==1) { [[ECDevice sharedInstance].messageManager ackInviteJoinGroupRequest:message.groupId invitor:message.admin ackType:EAckType_Agree completion:^(ECError *error, NSString *gorupId){ if (error.errorCode == ECErrorType_NoError) { NSLog(@"回復已發出"); }else{ NSLog(@"errorCode:%d\rerrorDescription:%@", (int)error.errorCode,error.errorDescription); } }]; } } }
2、Smith加入成功后,群組中成員Tony和John收到的通知回調方法代碼如下:
/** @該通知回調接口是代理類里面統一的關于群組的"群組通知回調接口"— onReceiveGroupNoticeMessage @brief 接收群組相關消息 @discussion 參數要根據消息的類型,轉成相關的消息類; 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息 @param groupMsg 群組消息 */ -(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{ if (groupMsg.messageType == ECGroupMessageType_ReplyInvite) { ECReplyInviteGroupMsg *message = (ECReplyInviteGroupMsg *)groupMsg; NSLog(@"\"%@\"%@討論組\"%@\"的邀請加入", message.member, message.confirm==2?@"同意":@"拒絕", message.groupId); } }
1、我們假設Smith要退出群組,則代碼如下:
/** @brief 退出群組 @param groupId 退出的群組id @param completion 執行結果回調block */ [[ECDevice sharedInstance].messageManager quitGroup:@"出彩中國人群組ID" completion:^(ECError *error, NSString *groupId) { [MBProgressHUD hideHUDForView:self.view animated:YES]; if (error.errorCode == ECErrorType_NoError) { NSLog(@"退出群組"); } else { NSLog(@"errorCode:%d\rerrorDescription:%@",(int)error.errorCode,error.errorDescription); } }];
2、Smith退出成功后,群組中成員Tony和John收到的通知回調方法代碼如下:
/** @該通知回調接口是代理類里面統一的關于群組的"群組通知回調接口"— onReceiveGroupNoticeMessage @brief 接收群組相關消息 @discussion 參數要根據消息的類型,轉成相關的消息類; 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息 @param groupMsg 群組消息 */ -(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{ if (groupMsg.messageType == ECGroupMessageType_Quit) { ECQuitGroupMsg *message = (ECQuitGroupMsg *)groupMsg; NSLog(@"\"%@\"退出討論組\"%@\"",message.member, message.groupId); } }
1、我們假設群主Tony要把Smith要踢出群組,則代碼如下:
/** @brief 刪除成員 @param groupId 刪除成員的群組id @param member 刪除的成員 @param completion 執行結果回調block */ [[ECDevice sharedInstance].messageManager deleteGroupMember:@"出彩中國人群組ID" member:@"Smith的賬號Id" completion:^(ECError *error, NSString *groupId, NSString *member) { if (error.errorCode ==ECErrorType_NoError) { NSLog(@"踢人成功"); } else { NSLog(@"errorCode:%d\rerrorDescription:%@",(int)error.errorCode,error.errorDescription); } }];
2、群組中所有成員都會收到的Smith被踢的消息,包括Smith自己,Smith判斷被踢用戶的id等于自己,則從本地刪除群組,
此通知回調方法代碼如下:
/** @該通知回調接口是代理類里面統一的關于群組的"群組通知回調接口"— onReceiveGroupNoticeMessage @brief 接收群組相關消息 @discussion 參數要根據消息的類型,轉成相關的消息類; 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息 @param groupMsg 群組消息 */ -(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{ if (groupMsg.messageType == ECGroupMessageType_RemoveMember){ ECRemoveMemberMsg *message = (ECRemoveMemberMsg *)groupMsg; NSLog(@"\"%@\"被移除討論組\"%@\"", message.member, message.groupId); } }
1、我們假設群主Tony要解散"出彩中國人",則代碼如下:
/** @brief 刪除群組 @param groupId 刪除的群組id @param completion 執行結果回調block */ [[ECDevice sharedInstance].messageManager deleteGroup:@"出彩中國人群組ID" completion:^(ECError *error, NSString *groupId) { [MBProgressHUD hideHUDForView:self.view animated:YES]; if (error.errorCode == ECErrorType_NoError) { NSLog(@"解散群組成功"); } else { NSLog(@"errorCode:%d\rerrorDescription:%@",(int)error.errorCode,error.errorDescription); } }];
2、群組中所有成員收到的通知回調方法代碼如下:
/** @該通知回調接口是代理類里面統一的關于群組的"群組通知回調接口"— onReceiveGroupNoticeMessage @brief 接收群組相關消息 @discussion 參數要根據消息的類型,轉成相關的消息類; 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息 @param groupMsg 群組消息 */ -(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{ if (groupMsg.messageType == ECGroupMessageType_Dissmiss){ NSLog(@"討論組\"%@\"被解散", groupMsg.groupId); } }
/** @brief 獲取群組屬性 @param groupId 獲取信息的群組id @param completion 執行結果回調block */ [[ECDevice sharedInstance].messageManager getGroupDetail:@"出彩中國人群組ID" completion:^(ECError *error, ECGroup *group) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"群主:%@",group.owner); NSLog(@"群名字:%@",group.name); NSLog(@"群公告:%@",group.declared); NSLog(@"是否討論組:%d",group. isDiscuss); }else{ NSLog(@"errorCode:%d\rerrorDescription:%@",(int)error.errorCode,error.errorDescription); } }];
/** @brief 查詢群組成員 @param groupId 查詢的群組id @param completion 執行結果回調block */ [[ECDevice sharedInstance].messageManager queryGroupMembers:@"出彩中國人群組ID" completion:^(ECError *error, NSString* groupId, NSArray *members) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"獲取群組成員成功"); for (ECGroupMember *member in members) { if (member.role == ECMemberRole_Creator) { NSLog(@"群組創建者:%@", member.memberId); break; } } }else{ NSLog(@"errorCode:%d\rerrorDescription:%@",(int)error.errorCode,error.errorDescription); } }];
/** @brief 按條件搜索公共群組 @param match 需要匹配的條件 @param completion 執行結果回調block */ ECGroupMatch *match = [[ECGroupMatch alloc] init]; match.searchType = 2; //搜索類型 1: 群組ID 2:群組名稱 match.keywords = @"出彩中國人"; [[ECDevice sharedInstance].messageManager searchPublicGroups: match completion:^(ECError *error, NSArray *groups) { if (error.errorCode == ECErrorType_NoError) { if(groups.count==0){ NSLog(@"獲取到的群組為空"); }else{ for (ECGroup* group in groups) { NSLog(@"群組ID:%@",group.groupId); NSLog(@"群主:%@",group.owner); NSLog(@"群名字:%@",group.name); NSLog(@"群公告:%@",group.declared); } } }else { NSLog(@"errorCode:%d\rerrorDescription:%@",(int)error.errorCode,error.errorDescription); } }];
[[ECDevice sharedInstance].messageManager queryOwnGroupsWith: ECGroupType_Group/ECGroupType_Discuss completion:^(ECError *error, NSArray *groups) { if (error.errorCode == ECErrorType_NoError) { for (ECGroup *group in groups) { NSLog(@"群組ID:%@",group.groupId); NSLog(@"群主:%@",group.owner); NSLog(@"群名字:%@",group.name); NSLog(@"是否討論組:%d",group. isDiscuss); } } else { } }];
/** @brief 管理員修改用戶角色權限 @param groupId 群組id @param memberId 成員id @param role 1群主 2管理員 3普通成員 @param completion 執行結果回調block */ -(void)setGroupMemberRole:(NSString*)groupId member:(NSString*)memberId role:(ECMemberRole)role completion:(void(^)(ECError*error,NSString*groupId,NSString *memberId))completion; [[ECDevice sharedInstance].messageManager setGroupMemberRole:”群組id” member:”成員id” role:”角色” completion:^(ECError *error, NSString *groupId, NSString *memberId) { if (error.errorCode == ECErrorType_NoError) { } }
/** @brief 獲取消息狀態(只支持群組,且發送的消息) @param message 設置已讀的消息 @param completion 執行結果回調block */ ECMessage *message(發送消息) [[ECDevice sharedInstance].messageManager queryMessageReadStatus:_message completion:^(ECError *error, NSArray *readArray, NSArray *unreadArray) { if (error.errorCode == ECErrorType_NoError) { // readArray已讀的通訊賬號,unreadArray未讀的通訊賬號 } }
1、用戶登錄以后,應該首先獲取自己的云通訊服務端的離線條數,具體代碼如下:
/** @該通知回調接口在代理類里面 @brief 離線消息數 @param count 消息數 */ -(void) onOfflineMessageCount:(NSUInteger)count { NSLog(@"onOfflineMessageCount =%lu",count); }
2、根據總的離線條數,決定獲取多少條離線消息,具體代碼如下:
/** @該通知回調接口在代理類里面 @brief 需要獲取的消息數 @return 消息數 -1:全部獲取 0:不獲取 */ -(NSInteger) onGetOfflineMessage { return -1; }
3、離線消息的接收
/** @該通知回調接口在代理類里面 @brief 接收離線消息代理函數 @param message 接收的消息 */ -(void)onReceiveOfflineMessage:(ECMessage*)message { NSLog:(@"收到%@的消息,屬于%@會話", message.from, message.sessionId); switch(message.messageBody.messageBodyType){ case MessageBodyType_Text:{ ECTextMessageBody *msgBody = (ECTextMessageBody *)message.messageBody; NSLog(@"收到的是文本消息------%@,msgBody.text"); break; } case MessageBodyType_Voice:{ ECVoiceMessageBody *msgBody = (ECVoiceMessageBody *)message.messageBody; NSLog(@"音頻文件remote路徑------%@",msgBody. remotePath); break; } case MessageBodyType_Video:{ ECVideoMessageBody *msgBody = (ECVideoMessageBody *)message.messageBody; NSLog(@"視頻文件remote路徑------%@",msgBody. remotePath); break; } case MessageBodyType_Image:{ ECImageMessageBody *msgBody = (ECImageMessageBody *)message.messageBody; NSLog(@"圖片文件remote路徑------%@",msgBody. remotePath); NSLog(@"縮略圖片文件remote路徑------%@",msgBody. thumbnailRemotePath); break; } case MessageBodyType_File:{ ECFileMessageBody *msgBody = (ECFileMessageBody *)message.messageBody; NSLog(@"文件remote路徑------%@",msgBody. remotePath); break; } default: break; } }
4、離線消息接收結果
/** @該通知回調接口在代理類里面 @brief 離線消息接收是否完成 @param isCompletion YES:拉取完成 NO:拉取未完成(拉取消息失敗) */ -(void)onReceiveOfflineCompletion:(BOOL)isCompletion { //離線消息接收完成 }
5、離線消息角標數顯示
/** @brief 設置角標數 @param badgeNumber 角標數字 @param completion 執行結果回調block */ -(void)setAppleBadgeNumber:(NSInteger)badgeNumber completion:(void(^)(ECError* error)) completion;
自定義消息通過發送文本消息接口擴展字段來實現,具體說明如下:
ECTextMessageBody *messageBody = [[ECTextMessageBody alloc] initWithText:@"你好,歡迎來到云通訊"]; ECMessage *message = [[ECMessage alloc] initWithReceiver:@"John的賬號Id" body:messageBody]; message.userData = @"擴展字段"; //發送同上
可以通過接口設置個人信息,包括昵稱、生日、性別,建議昵稱必須設置,以便在推送消息的時候使用,具體代碼如下:
ECPersonInfo *person = [[ECPersonInfo alloc] init]; person.nickName = @"云通訊"; person.sex = ECSexType_Male; person.birth = @"2013-11-28";//時間格式 yyyy-MM-dd /** @brief 設置個人信息 @discussion 異步函數,斷開與平臺的連接 @param person 個人信息 @param completion 執行結果回調block */ [[ECDevice sharedInstance] setPersonInfo:person completion:^(ECError *error, ECPersonInfo *person) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"修改成功"); }else{ NSLog(@"errorCode:%d\rerrorDescription:%@", (int)error.errorCode,error.errorDescription); } }];
獲取個人信息代碼如下:
/** @brief 獲取個人信息 @discussion 異步函數,斷開與平臺的連接 @param completion 執行結果回調block */ [[ECDevice sharedInstance] getPersonInfo:^(ECError *error, ECPersonInfo *person) { if (error.errorCode == ECErrorType_NoError) { NSLog(@"昵稱:%@",person.nickName); NSLog(@"生日:%@",person.birth); NSLog(@"性別:%@",person.sex==ECSexType_Male?@"男":@"女"); NSLog(@"個人信息版本號:%lld",person.version); } }];
獲取個人信息代碼如下:
/** @brief 設置免打擾 @param sessionId 會話id,個人賬號或群組ID @param isMute 是否免打擾 @param completion 執行結果回調block */ [[ECDevice sharedInstance] setMuteNotification:@ "個人賬號或群組id" isMute:(BOOL)isMute completion:(void(^)(ECError* error)) completion{ if (error.errorCode == ECErrorType_NoError) { NSLog(@"設置成功"); } }];