av一区二区三区在线观看_久久久久国产一区二区三区_伊人春色在线播放_欧美亚洲国产一区_九九热在线免费视频_久久视频国产

1、單聊

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

//發送圖片
/*
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{
    //發送失敗
    }
}];

                    

? 發送語音

1、我們假設Tony給John發送語音消息,則代碼如下:

                    //開始錄音
-(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) {
            //錄音時間過短
        }
    }];
}

                    

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

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

                    

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

/**
 @該通知回調接口在代理類里面
 @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;
}
}

                    

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

/**
 @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;
    
}

                    

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

說明:關于發送地理位置,該功能需要用戶自己在客戶端通過發送消息的接口實現,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

                    

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

[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具體實現
  }
}

                    

撤回消息通知增加ECMessageRevokeNotifyMsg — 當發送方撤回消息時,接收方會收到這一條通知消息-(void)onReceiveMessageNotify:(ECMessageNotifyMsg*)message,接受方可以在這里做接收方的邏輯判斷處理,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) {
}

                    

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

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

                    

2、群聊

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

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{
    	//發送失敗
    }
}];
                    

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


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


                    

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

//經緯度
@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

                    

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

/**
 @該通知回調接口在代理類里面,和單聊是同一個通知回調接口,只不過發送者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;
}
}
     
                    

3、群組操作

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

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);
    }
}];
                    

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

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);
    }
}];
                    
                    

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

/**
 @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);
    }
}];

                    

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

[[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未讀的通訊賬號
}
}
 
                    

4、離線消息

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;

                    

5、自定義消息

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

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

//發送同上
              
                    

6、設置個人信息

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

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);
    }
}];

                    

7、獲取個人信息

獲取個人信息代碼如下:

/**
 @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);
    }
}];

                    

8、設置免打擾

獲取個人信息代碼如下:

/**
 @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(@"設置成功");
    }
}];
                    
主站蜘蛛池模板: 亚洲精品中文字幕中文字幕 | 麻豆国产一区二区三区四区 | eeuss国产一区二区三区四区 | 欧美精品99 | 91久久久久久久久久久久久 | 神马久久av | 久热伊人 | 波多野结衣电影一区 | 欧美精品一区二区免费 | 天天澡天天狠天天天做 | 亚洲最大看片网站 | 日韩av电影院 | 亚洲黄色片免费观看 | 日韩综合一区 | 亚洲a级| 精品国产欧美一区二区三区成人 | 欧美美女爱爱 | 精品国产一区二区国模嫣然 | 99免费精品视频 | 亚洲国产精品久久 | 欧美中文字幕 | 成人精品久久久 | 日日夜夜天天 | 亚洲精品中文字幕 | 欧美成人精品一区二区男人看 | 久久精品手机视频 | 国产乱码高清区二区三区在线 | 欧美一区二区在线 | 日韩中文字幕一区二区 | 国产精品精品视频一区二区三区 | 中文字幕在线欧美 | 九九久久久 | 亚洲精品国产电影 | 国产精品久久一区二区三区 | 无码国模国产在线观看 | 欧美日韩亚洲在线 | 久久久久国产一区二区三区 | 成人免费看 | 久久精品中文 | 国产综合精品一区二区三区 | 欧美日韩亚 |