欧美日韩专区-欧美日韩中文一区二区三区-欧美日韩中文一区-欧美日韩中文国产一区二区三区-日韩成人在线免费视频

1、單聊

? 發(fā)送文本\圖片\附件 — 我們假設(shè)Tony給John發(fā)送文本消息,則代碼如下:

//發(fā)送圖片
/*
ECImageMessageBody *messageBody = [[ECImageMessageBody alloc] initWithFile:@"圖片文件本地絕對路徑" 
displayName:@"文件名稱"];
*/

//發(fā)送文件
/*
ECFileMessageBody *messageBody = [[ECFileMessageBody alloc] initWithFile:@"文件本地絕對路徑" 
displayName:@"文件名稱"];
*/


//發(fā)送文本
ECTextMessageBody *messageBody = [[ECTextMessageBody alloc] initWithText:@"你好,歡迎來到云通訊"];
ECMessage *message = [[ECMessage alloc] initWithReceiver:@"John的賬號Id" body:messageBody];

//如果需要跨應(yīng)用發(fā)送消息,需通過appkey+英文井號+用戶帳號的方式拼接,發(fā)送錄音、發(fā)送群組消息等與此方式一致
//群組跨應(yīng)用只是邀請成員時,被邀請的用戶要用appid#賬號的格式,向群組里發(fā)消息不需要。
//例如: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) {
        //發(fā)送成功
    }else if(error.errorCode == ECErrorType_Have_Forbid || error.errorCode == ECErrorType_File_Have_Forbid)
    {
        //您已被群組禁言
    }else{
    //發(fā)送失敗
    }
}];

                    

? 發(fā)送語音

1、我們假設(shè)Tony給John發(fā)送語音消息,則代碼如下:

                    //開始錄音
-(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) {
            
            //錄音超時,立即發(fā)送;應(yīng)用也可以選擇不發(fā)送
            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) {
                    //發(fā)送成功
                }else if(error.errorCode == ECErrorType_Have_Forbid || error.errorCode == 
                ECErrorType_File_Have_Forbid){
                    //您已被群組禁言
                }else{
                    //發(fā)送失敗
                }
            }];
        }
    }];
}

//停止錄音
-(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) {
                    //發(fā)送成功
                }else if(error.errorCode == ECErrorType_Have_Forbid || error.errorCode == 
                ECErrorType_File_Have_Forbid){
                    //您已被群組禁言
                }else{
                    //發(fā)送失敗
                }
            }];
        } else if  (error.errorCode == ECErrorType_RecordTimeTooShort) {
            //錄音時間過短
        }
    }];
}

                    

2、我們假設(shè)Tony給John發(fā)送錄音變聲消息,則代碼如下:

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

                    

? 接收消息 — 我們假設(shè)John收到Tony發(fā)送過來的消息,則代碼如下:

/**
 @該通知回調(diào)接口在代理類里面
 @brief 接收即時消息代理函數(shù)
 @param message 接收的消息
 */
-(void)onReceiveMessage:(ECMessage*)message
{
//如果是跨應(yīng)用消息,from為appkey+英文井號+用戶帳號。
//例如:appkey=20150314000000110000000000000010 
             帳號ID=john  
             發(fā)送者=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;
}
}

                    

? 閱后即焚 — 我們假設(shè)John收到Tony單聊時,john發(fā)送給tony一條消息,tony閱讀后會自動刪除,并且通知john這條消息已經(jīng)被刪除(暫時只支持單聊),則代碼如下:

/**
 @brief 刪除點對點消息(目前只支持刪除接收到的消息)
 @param message 需要刪除的消息
 @param completion 執(zhí)行結(jié)果回調(diào)block
 */
-(void)deleteMessage:(ECMessage*)message completion:(void(^)(ECError *error, ECMessage* message)) completion;

接收方:
[[ECDevice sharedInstance].messageManager deleteMessage:self.displayMessage completion:^(ECError *error, ECMessage *message) {
                // 刪除服務(wù)器上的消息后,你也需要將本地的消息清空
                
 }];

發(fā)送方:(當(dāng)接收方調(diào)用刪除消息接口,并且成功刪除后,會給發(fā)送方發(fā)一條通知消息)
- (void)onReceiveMessageNotify:(ECMessageNotifyMsg *)message {
    NSLog(@"onReceiveMessageNotify:--%@",message);
    ECMessageDeleteNotifyMsg *msg = (ECMessageDeleteNotifyMsg*)message;
    
}

                    

? 地理位置 — 我們假設(shè)John收到Tony單聊時,john發(fā)送給tony一條位置消息,tony點擊會自動跳轉(zhuǎn)并點擊右上角導(dǎo)航跳轉(zhuǎn)蘋果地圖為您導(dǎo)航,則代碼如下:

說明:關(guān)于發(fā)送地理位置,該功能需要用戶自己在客戶端通過發(fā)送消息的接口實現(xiàn),SDK中沒有封裝具體的發(fā)送位置接口(android、ios均需用戶自己在客戶端實現(xiàn))。

//經(jīng)緯度
@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

                    

? 發(fā)送和接收自定義狀態(tài)消息 — 當(dāng)A收到B的第一條消息后,B如果還在輸入,則A能獲取B的輸入狀態(tài),代碼如下:

[ECDevice sharedInstance].messageManager 
sendMessage:[[ECMessage alloc] initWithReceiver:to 
body:[[ECUserStateMessageBody alloc] 
initWithUserState:[NSString stringWithFormat:@"%d", state]]] 
progress:nil completion:^(ECError *error, ECMessage *message) 
{}];

                    

? 發(fā)送鏈接消息 — 發(fā)送文本消息是鏈接是點擊進入后,可將本網(wǎng)頁的內(nèi)容抓取后分享到云通訊平臺的單人和群組討論組,代碼如下:

ECMessage *message = [[ECMessage alloc] init];
    ECPreviewMessageBody *msgBody = [[ECPreviewMessageBody alloc] 
initWithFile:”本地文件路徑” displayName: ”本地文件路徑后綴名”];
    msgBody.url = ”鏈接消息URL”;
    msgBody.title = ”網(wǎng)頁的表頭”;
    msgBody.remotePath = ”網(wǎng)頁抓取圖片的地址”;
    msgBody.desc = ”網(wǎng)頁抓取的描述”;
    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) {
        //發(fā)送成功
    }else if(error.errorCode == ECErrorType_Have_Forbid || error.errorCode == ECErrorType_File_Have_Forbid)
    {
        //您已被群組禁言
    }else {}
}];


                    

? 消息撤回 — 發(fā)送消息成功后,如果用戶想要撤回此消息時,此接口可以幫用戶實現(xiàn)功能,但是發(fā)送成功消息必須在兩分鐘之內(nèi)。

/**
 @brief 撤回消息
 @param message 需要撤回的消息
 @param completion 執(zhí)行結(jié)果回調(diào)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) {
    // 撤回消息成功后,此位置顯示為你撤回了一條消息,此消息是需要本地去做,因為不經(jīng)過服務(wù)器。可以仿照demo具體實現(xiàn)
  }
}

                    

撤回消息通知增加ECMessageRevokeNotifyMsg — 當(dāng)發(fā)送方撤回消息時,接收方會收到這一條通知消息-(void)onReceiveMessageNotify:(ECMessageNotifyMsg*)message,接受方可以在這里做接收方的邏輯判斷處理,demo如下:

-(void)onReceiveMessageNotify:(ECMessageNotifyMsg*)message {
if(message.messageType==ECMessageNotifyType_RevokeMessage) {// 接收方收到對方撤回消息的邏輯處理
}
}

                    

? 消息回執(zhí) — 當(dāng)用戶接收到消息并且查看此消息時,可以向發(fā)送方發(fā)送消息已讀,這樣發(fā)送方就可以知道消息是否被讀過。

/**
 @brief 消息已讀(接收到的消息)
 @param message 設(shè)置已讀的消息
 @param completion 執(zhí)行結(jié)果回調(diào)block
 */
ECMessage *message(接收消息)
[[ECDevice sharedInstance].messageManager readedMessage:message 
completion:^(ECError *error, ECMessage *amessage) {
}

                    

消息回執(zhí)通知增加ECMessageIsReadedNotifyMsg — 當(dāng)接收方讀完消息發(fā)送消息回執(zhí)時,消息發(fā)送方會收到這一條通知消息-(void)onReceiveMessageNotify:(ECMessageNotifyMsg*)message,消息發(fā)送方可以在這里做發(fā)送方消息回執(zhí)的邏輯判斷處理,demo如下:

-(void)onReceiveMessageNotify:(ECMessageNotifyMsg*)message {
if(message.messageType==ECMessageNotifyType_MessageIsReaded) {// 消息發(fā)送方收到對方回執(zhí)消息的邏輯處理
}
}

                    

? 置頂(取消置頂)會話 — 是否置頂會話場景:用戶可以置頂本地的會話,并且在切換設(shè)備時可以調(diào)用獲取置頂會話列表來達到會話置頂?shù)墓δ堋?/h3>
/**
 @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 執(zhí)行結(jié)果回調(diào)block
 */
- (void)getTopSession:(void(^)(ECError *error, NSArray *topContactLists))completion{
// topContactLists里面包含會話sessionId
}

                    

2、群聊

? 發(fā)送文本\語音\圖片\附件 — 我們假設(shè)Tony給群組名為"出彩中國人"的群組發(fā)送消息,則代碼如下:

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) {
        //發(fā)送成功
    }else if(error.errorCode == ECErrorType_Have_Forbid || error.errorCode == 
    ECErrorType_File_Have_Forbid){
        //您已被群組禁言
    }else{
    	//發(fā)送失敗
    }
}];
                    

? 發(fā)送變聲消息 — 我們假設(shè)Tony給群組名為"出彩中國人"的群組發(fā)送錄音變聲消息,則代碼如下:


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


                    

? 地理位置 — 我們假設(shè)Tony給群組名為"出彩中國人"的群組發(fā)送消息, 點擊會自動跳轉(zhuǎn)并點擊右上角導(dǎo)航跳轉(zhuǎn)蘋果地圖為您導(dǎo)航則代碼如下:

//經(jīng)緯度
@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

                    

? 接收消息 — 我們假設(shè)John是"出彩中國人"群組中的一員,則代碼如下:

/**
 @該通知回調(diào)接口在代理類里面,和單聊是同一個通知回調(diào)接口,只不過發(fā)送者id是以'g'開頭。
 @brief 接收即時消息代理函數(shù)
 @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;
}
}
     
                    

3、群組操作

? 創(chuàng)建群組/討論組 — 我們假設(shè)Tony要創(chuàng)建一個名為"出彩中國人"具體代碼如下:

ECGroup * newgroup = [[ECGroup alloc] init];
newgroup.name = @"出彩中國人";
newgroup.declared = @"歡迎來到容聯(lián)云通訊";
newgroup.isDiscuss = NO;//討論組該值為YES

[[ECDevice sharedInstance].messageManager createGroup:newgroup completion:^(ECError *error, 
ECGroup *group) {
    
    if (error.errorCode == ECErrorType_NoError) {
        
        NSLog(@"創(chuàng)建群組成功 群組ID:%@", group.groupId);
    }
    else{
        NSLog(@"創(chuàng)建群組失敗 errorCode:%d\r\nerrorDescription:%@",
        (int)error.errorCode,error.errorDescription);
    }
}];
                    

? 主動加入 — 只要知道群組id,就可以主動加入群組。

1、我們假設(shè)"出彩中國人"群組已經(jīng)有Tony和John兩位成員,現(xiàn)在Smith要加入"出彩中國人"群組,則代碼如下:

[[ECDevice sharedInstance].messageManager joinGroup:@"出彩中國人群組ID" reason:@"我要參加出彩中國人"
 completion:^(ECError *error, NSString *groupId) {
    __strong __typeof(weakSelf)strongSelf = weakSelf;
    if (error.errorCode==ECErrorType_Have_Joined) {
        NSLog(@"您已經(jīng)在群組%@", groupId);
    }else if(error.errorCode==ECErrorType_NoError){
        if (strongSelf.applyGroup.mode == ECGroupPermMode_DefaultJoin) {
            NSLog(@"加入群組%@成功!", groupId);
        }else{
            NSLog(@"申請加入已發(fā)出,請等待群主同意請求");
        }
    }else{
        NSLog(@"加入群組失敗 errorCode:%d\r\nerrorDescription:%@",
        (int)error.errorCode,error.errorDescription);
    }
}];
                    

注意:如果群組"出彩中國人"是公開群組,則smith直接被允許加入。 如果群組"出彩中國人"是私有群組
則smith加入需要群主Tony的的同意。

關(guān)于幾種群組的解釋:
公開群組:用戶可以直接被允許加入群組,不需要群主進行驗證;
驗證群組:用戶加入群組的時候需要群主同意才可以加入
私有群組:只能群主邀請加入

Tony首先收到Smith加入的請求,代碼如下:

/**
@該通知回調(diào)接口是代理類里面統(tǒng)一的關(guān)于群組的"群組通知回調(diào)接口"—
onReceiveGroupNoticeMessage
 @brief 接收群組相關(guān)消息
 @discussion 參數(shù)要根據(jù)消息的類型,轉(zhuǎn)成相關(guān)的消息類;
 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息
 @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 執(zhí)行結(jié)果回調(diào)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收到的通知回調(diào)方法代碼如下:

/**
 @該通知回調(diào)接口是代理類里面統(tǒng)一的關(guān)于群組的"群組通知回調(diào)接口"—onReceiveGroupNoticeMessage
 @brief 接收群組相關(guān)消息
 @discussion 參數(shù)要根據(jù)消息的類型,轉(zhuǎn)成相關(guān)的消息類;
 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息
 @param groupMsg 群組消息
 */
-(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{
    
    if (groupMsg.messageType == ECGroupMessageType_ReplyJoin)
    {
        ECReplyJoinGroupMsg *message = (ECReplyJoinGroupMsg *)groupMsg;
        NSLog(@"討論組\"%@\"%@\"%@\"的加入申請",message.groupId,message.confirm==2?@"同意":@"拒絕",
        message.member);
    }
}
                    

? 邀請加入 — 只能群主邀請別人加入

1、我們假設(shè)"出彩中國人"群組的創(chuàng)建者Tony邀請Smith加入群組,則代碼如下:

/**
 @brief 管理員邀請加入群組
 @param groupId 邀請加入的群組id
 @param reason 邀請理由
 @param members 邀請加入的人
 @param confirm 是否需要對方驗證 1:直接加入(不需要驗證) 2:需要對方驗證
 @param completion 執(zhí)行結(jié)果回調(diào)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(@"邀請請求已發(fā)出");
    }
    else
    {
        NSLog(@"errorCode:%d\rerrorDescription:%@",(int)error.errorCode,error.errorDescription);
    }
}];
                    

注意:如果Tony邀請Smith加入的時候,接口參數(shù)不指定加入需要Smith確認(rèn),則smith直接被邀請加入。
如果指定需要Smith同意才能加入,則Smith收到如下通知回調(diào),并在回調(diào)里面回復(fù)"同意"或"拒絕"加入。代碼如下:

                    /**
@該通知回調(diào)接口是代理類里面統(tǒng)一的關(guān)于群組的"群組通知回調(diào)接口"—
onReceiveGroupNoticeMessage
 @brief 接收群組相關(guān)消息
 @discussion 參數(shù)要根據(jù)消息的類型,轉(zhuǎn)成相關(guān)的消息類;
 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息
 @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(@"回復(fù)已發(fā)出");
                }else{
                    NSLog(@"errorCode:%d\rerrorDescription:%@",
                    (int)error.errorCode,error.errorDescription);
                }
            }];
        }
    }
}
                    

2、Smith加入成功后,群組中成員Tony和John收到的通知回調(diào)方法代碼如下:

/**
@該通知回調(diào)接口是代理類里面統(tǒng)一的關(guān)于群組的"群組通知回調(diào)接口"—
onReceiveGroupNoticeMessage
 @brief 接收群組相關(guān)消息
 @discussion 參數(shù)要根據(jù)消息的類型,轉(zhuǎn)成相關(guān)的消息類;
 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息
 @param groupMsg 群組消息
 */
-(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{
    
    if (groupMsg.messageType == ECGroupMessageType_ReplyInvite)
    {
        ECReplyInviteGroupMsg *message = (ECReplyInviteGroupMsg *)groupMsg;
        NSLog(@"\"%@\"%@討論組\"%@\"的邀請加入", message.member, 
        message.confirm==2?@"同意":@"拒絕", message.groupId);
    }
}

                    

? 退出群組

1、我們假設(shè)Smith要退出群組,則代碼如下:

/**
 @brief 退出群組
 @param groupId 退出的群組id
 @param completion 執(zhí)行結(jié)果回調(diào)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收到的通知回調(diào)方法代碼如下:

/**
@該通知回調(diào)接口是代理類里面統(tǒng)一的關(guān)于群組的"群組通知回調(diào)接口"—
onReceiveGroupNoticeMessage
 @brief 接收群組相關(guān)消息
 @discussion 參數(shù)要根據(jù)消息的類型,轉(zhuǎn)成相關(guān)的消息類;
 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息
 @param groupMsg 群組消息
 */
-(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{
    
    if (groupMsg.messageType == ECGroupMessageType_Quit)
    {
        ECQuitGroupMsg *message = (ECQuitGroupMsg *)groupMsg;
        NSLog(@"\"%@\"退出討論組\"%@\"",message.member, message.groupId);
    }
}
                    

? 群主踢人

1、我們假設(shè)群主Tony要把Smith要踢出群組,則代碼如下:

/**
 @brief 刪除成員
 @param groupId 刪除成員的群組id
 @param member 刪除的成員
 @param completion 執(zhí)行結(jié)果回調(diào)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等于自己,則從本地刪除群組,
此通知回調(diào)方法代碼如下:

/**
@該通知回調(diào)接口是代理類里面統(tǒng)一的關(guān)于群組的"群組通知回調(diào)接口"—
onReceiveGroupNoticeMessage
 @brief 接收群組相關(guān)消息
 @discussion 參數(shù)要根據(jù)消息的類型,轉(zhuǎn)成相關(guān)的消息類;
 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息
 @param groupMsg 群組消息
 */
-(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{
    
    if (groupMsg.messageType == ECGroupMessageType_RemoveMember){
        
        ECRemoveMemberMsg *message = (ECRemoveMemberMsg *)groupMsg;
        NSLog(@"\"%@\"被移除討論組\"%@\"", message.member, message.groupId);
    }
}

                    

? 解散群組 — 只有群主才能解散群組。

1、我們假設(shè)群主Tony要解散"出彩中國人",則代碼如下:

/**
 @brief 刪除群組
 @param groupId 刪除的群組id
 @param completion 執(zhí)行結(jié)果回調(diào)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、群組中所有成員收到的通知回調(diào)方法代碼如下:

/**
@該通知回調(diào)接口是代理類里面統(tǒng)一的關(guān)于群組的"群組通知回調(diào)接口"—
onReceiveGroupNoticeMessage

 @brief 接收群組相關(guān)消息
 @discussion 參數(shù)要根據(jù)消息的類型,轉(zhuǎn)成相關(guān)的消息類;
 解散群組、收到邀請、申請加入、退出群組、有人加入、移除成員等消息
 @param groupMsg 群組消息
 */
-(void)onReceiveGroupNoticeMessage:(ECGroupNoticeMessage *)groupMsg{
    if (groupMsg.messageType == ECGroupMessageType_Dissmiss){
        NSLog(@"討論組\"%@\"被解散", groupMsg.groupId);
    }
}

                    

? 獲取群詳情 — 代碼如下:

/**
 @brief 獲取群組屬性
 @param groupId 獲取信息的群組id
 @param completion 執(zhí)行結(jié)果回調(diào)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 查詢?nèi)航M成員
 @param groupId 查詢的群組id
 @param completion 執(zhí)行結(jié)果回調(diào)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(@"群組創(chuàng)建者:%@", member.memberId);
                break;
            }
        }
    }else{
        NSLog(@"errorCode:%d\rerrorDescription:%@",(int)error.errorCode,error.errorDescription);
    }
}];
                    
                    

? 群組搜索 — 可以根據(jù)群組名字或者群組ID來搜索群組(群組名稱為純數(shù)字或純字母時需要輸入完整的群名稱) ,代碼如下:

/**
 @brief 按條件搜索公共群組
 @param match 需要匹配的條件
 @param completion 執(zhí)行結(jié)果回調(diào)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);
    }
}];

                    

? 獲取個人所在的群組 — 通常登錄之后,需要立即獲取自己所在的群組,返回的群組信息包括
群組/討論組id、群組名、群組創(chuàng)建者賬號等信息

[[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 {
        
    }
}];
  
                    

? 設(shè)置群組成員角色(包括設(shè)置管理員和成員以及轉(zhuǎn)讓群主權(quán)限) — 群主權(quán)限最高、管理次之、成員最低,同等權(quán)限之間不可操作,代碼如下:

/**
 @brief 管理員修改用戶角色權(quán)限
 @param groupId 群組id
 @param memberId 成員id
 @param role 1群主 2管理員 3普通成員
 @param completion 執(zhí)行結(jié)果回調(diào)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) {
}
}
 
                    

? 查詢消息已讀和未讀人數(shù) — 群組消息發(fā)送方會知道消息多少人已讀和未讀。

/**
 @brief 獲取消息狀態(tài)(只支持群組,且發(fā)送的消息)
 @param message 設(shè)置已讀的消息
 @param completion 執(zhí)行結(jié)果回調(diào)block
 */ 
ECMessage *message(發(fā)送消息)
[[ECDevice sharedInstance].messageManager queryMessageReadStatus:_message 
completion:^(ECError *error, NSArray *readArray, NSArray *unreadArray) {  
 if (error.errorCode == ECErrorType_NoError) {
// readArray已讀的通訊賬號,unreadArray未讀的通訊賬號
}
}
 
                    

4、離線消息

1、用戶登錄以后,應(yīng)該首先獲取自己的云通訊服務(wù)端的離線條數(shù),具體代碼如下:

/**
 @該通知回調(diào)接口在代理類里面
 @brief 離線消息數(shù)
 @param count 消息數(shù)
 */
-(void) onOfflineMessageCount:(NSUInteger)count
{
    NSLog(@"onOfflineMessageCount =%lu",count);
}
                   
                    

2、根據(jù)總的離線條數(shù),決定獲取多少條離線消息,具體代碼如下:

/**
 @該通知回調(diào)接口在代理類里面
 @brief 需要獲取的消息數(shù)
 @return 消息數(shù) -1:全部獲取 0:不獲取
 */
-(NSInteger) onGetOfflineMessage
{
    return -1;
}

                    

3、離線消息的接收

/**
 @該通知回調(diào)接口在代理類里面
 @brief 接收離線消息代理函數(shù)
 @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、離線消息接收結(jié)果

/**
 @該通知回調(diào)接口在代理類里面
 @brief 離線消息接收是否完成
 @param isCompletion YES:拉取完成 NO:拉取未完成(拉取消息失敗)
 */
-(void)onReceiveOfflineCompletion:(BOOL)isCompletion {
   //離線消息接收完成
}

                    

5、離線消息角標(biāo)數(shù)顯示

/**
 @brief 設(shè)置角標(biāo)數(shù)
 @param badgeNumber 角標(biāo)數(shù)字
 @param completion 執(zhí)行結(jié)果回調(diào)block
 */
-(void)setAppleBadgeNumber:(NSInteger)badgeNumber completion:(void(^)(ECError* error)) completion;

                    

5、自定義消息

自定義消息通過發(fā)送文本消息接口擴展字段來實現(xiàn),具體說明如下:

ECTextMessageBody *messageBody = [[ECTextMessageBody alloc] initWithText:@"你好,歡迎來到云通訊"];
ECMessage *message = [[ECMessage alloc] initWithReceiver:@"John的賬號Id" body:messageBody];
message.userData = @"擴展字段";

//發(fā)送同上
              
                    

6、設(shè)置個人信息

可以通過接口設(shè)置個人信息,包括昵稱、生日、性別,建議昵稱必須設(shè)置,以便在推送消息的時候使用,具體代碼如下:

ECPersonInfo *person = [[ECPersonInfo alloc] init];
person.nickName = @"云通訊";
person.sex = ECSexType_Male;
person.birth = @"2013-11-28";//時間格式 yyyy-MM-dd

/**
 @brief 設(shè)置個人信息
 @discussion 異步函數(shù),斷開與平臺的連接
 @param person 個人信息
 @param completion 執(zhí)行結(jié)果回調(diào)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);
    }
}];

                    

7、獲取個人信息

獲取個人信息代碼如下:

/**
 @brief 獲取個人信息
 @discussion 異步函數(shù),斷開與平臺的連接
 @param completion 執(zhí)行結(jié)果回調(diào)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);
    }
}];

                    

8、設(shè)置免打擾

獲取個人信息代碼如下:

/**
 @brief 設(shè)置免打擾
 @param sessionId 會話id,個人賬號或群組ID
 @param isMute 是否免打擾
 @param completion 執(zhí)行結(jié)果回調(diào)block
 */
[[ECDevice sharedInstance] setMuteNotification:@ "個人賬號或群組id" isMute:(BOOL)isMute 
    completion:(void(^)(ECError* error)) completion{
    if (error.errorCode == ECErrorType_NoError)
    {
    	NSLog(@"設(shè)置成功");
    }
}];
                    
主站蜘蛛池模板: 久久精品网站免费观看 | 国产免费黄色 | 精品国产一区二区三区成人 | 亚洲欧美一区二区三区 | 五月天激情啪啪 | 国产精品一二三 | 视频一区精品 | 亚洲综合天堂网 | 亚洲综合丁香 | 自拍视频一区二区 | 婷婷色在线播放 | 羞羞视频在线播放 | 婷婷六月久久综合丁香可观看 | 丁香花在线影院观看在线播放 | 亚洲男人天堂久久 | 羞羞免费网站在线 | 亚洲乱码国产乱码精品精98 | 一木道一二三区精品 | www四虎| 男人的天堂黄色片 | 午夜欧美精品久久久久久久 | 亚洲福利视频一区二区 | 亚洲阿v天堂最新版2021 | 新婚第一次一级毛片 | 亚洲国产高清人在线 | 国产一区二区久久久 | 羞羞视频免费网站在线看 | 亚洲第一区在线观看 | 国产成人综合久久精品下载 | 亚洲国产欧美日韩 | 亚洲电影网址 | 亚洲清色| 狠狠狠色丁香婷婷综合久久五月 | 亚洲免费在线视频播放 | 四虎最新网址 | 欧美福利在线观看 | www.麻豆| 国产伦精品一区三区视频 | 欧美曰韩一区二区三区 | 久久久一本精品99久久精品66 | 欧美深夜福利网站在线观看 |