iOS 통합 클 라 우 드 SDK 인 스 턴 트 메 신 저 정리

최근 에 프로젝트 정 리 를 거의 쓰 지 않 았 습 니 다.최근 에 프로젝트 를 많이 했 지만 모두 아웃 소 싱 프로젝트 이기 때문에 정리 할 만 한 것 이 없습니다.최근 에 한 프로젝트 가 클 라 우 드 인 스 턴 트 메 시 지 를 사 용 했 는데 예전 에는 주로 환 신 을 사 용 했 기 때문에 문제 가 생 겼 습 니 다.여기 서 기록 을 정리 하 겠 습 니 다.
1.프로필 사진,닉네임 등 사용자 정보(클 라 우 드 는 이 문제 에 대해 두 가지 처리 방식 이 있다)
1.사용자 정보 제공 자
실현 절차(아래 코드 는 하나의 예 에 넣 으 면 AppDelegate 일 수 있 으 며,하나의 예 를 단독으로 쓰 는 것 이 좋 습 니 다)
우선 RCIMUserInfoDataSource 라 는 협 의 를 준수 합 니 다.
그리고 프 록 시 를 설정 해 야 돼 요.

[[RCIM sharedRCIM] setUserInfoDataSource:self]; 
마지막 으로 에이전트 구현 방법:

- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion {
NSLog(@"getUserInfoWithUserId ----- %@", userId);
RCUserInfo *user = [RCUserInfo new];
if (userId == nil || [userId length] == 0) {
  user.userId = userId;
  user.portraitUri = @"";
  user.name = @"";
  completion(user);
  return;
}
if ([userId isEqualToString:[UserInfo shareInstance].uid]) {
  NSString *urlSelf = [BASIC_URL_image stringByAppendingString:[UserInfo shareInstance].photo];
  return completion([[RCUserInfo alloc] initWithUserId:userId name:[UserInfo shareInstance].nickname portrait:urlSelf]);
}else {
  //            ,   userId       name   url,      
  [WTBaseHttpRequst postRequstWithURL:getUserHttp params:@{@"uid":[UserInfo shareInstance].uid, @"api_token":[UserInfo shareInstance].api_token, @"k_uid":userId} successBlock:^(NSDictionary *returnData) {
    if ([returnData[@"status"] integerValue] == 1) {
      NSString *urlStr = [BASIC_URL_image stringByAppendingString:returnData[@"data"][@"user"][@"photo"]];
      return completion([[RCUserInfo alloc] initWithUserId:userId name:returnData[@"data"][@"user"][@"nickname"] portrait:urlStr]);
    }else {
      completion(user);
    }
  } failureBlock:^(NSString *error) {
    completion(user);
  } showHUD:NO];
}
}
이 방법 은 사용자 정 보 를 수정 할 때 만 수 동 으로 호출 할 필요 가 없습니다.

[[RCIM sharedRCIM] refreshUserInfoCache:user withUserId:[UserInfo shareInstance].uid]
방법

WS(weakSelf);
//         
[WTBaseHttpRequst postRequstWithURL:modifyInfoHttp params:dict successBlock:^(NSDictionary *returnData) {
  [weakSelf MBProgressHudShowWithTextOnlyWithText:returnData[@"msg"]];
  if ([returnData[@"status"] integerValue] == 1) {
    RCUserInfo *user = [RCUserInfo new];
    user.userId = [UserInfo shareInstance].uid;
    user.portraitUri = [BASIC_URL_image stringByAppendingString:[UserInfo shareInstance].photo];
    user.name = weakSelf.nickNameTextField.text;
    [[RCIM sharedRCIM] refreshUserInfoCache:user withUserId:[UserInfo shareInstance].uid];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
      [self.navigationController popViewControllerAnimated:YES];
    });
  }
} failureBlock:^(NSString *error) {
  [weakSelf MBProgressHudShowWithTextOnlyWithText:error];
} showHUD:YES];
2.확장 메시지 에 사용자 정보 가 져 오기
메 시 지 를 보 낼 때 메시지 체 에 사용자 정 보 를 지 니 도록 설정 합 니 다(2.4.1 이후 사용자 정 보 를 추가 한 후 cell 은 기본적으로 추가 사용자 정 보 를 표시 합 니 다.즉,사용자 정 보 는 사용자 정보 제공 자 에서 제공 하 는 사용자 정 보 를 찾 지 않 습 니 다)

[RCIM sharedRCIM].enableMessageAttachUserInfo = YES; 
enableMessage Attach User Info 를 설정 하면 찾 을 수 있 습 니 다.

/** 
*      
* **/ 
@property(nonatomic, strong) RCUserInfo *senderUserInfo; 
물론 저 는 배경 에서 친구 관 계 를 얻 을 수 있다 고 생각 합 니 다.저 희 는 로그 인 할 때마다 스 레 드 를 열 어 친구 관 계 를 요청 한 다음 에 환 신 ID 에 따라 친구 의 닉네임 과 프로필 사진 을 찾 습 니 다.
2 입력 상자 에 제시 어 를 추가 합 니 다.
1.알림 label 만 들 기

_lab = [[UILabel alloc] initWithFrame:self.chatSessionInputBarControl.inputTextView.bounds];
_lab.text = @"       ...";
_lab.textColor = [UIColor colorWithHexColor:@"dddddd"];
_lab.font = [UIFont systemFontOfSize:15];
_lab.center = CGPointMake(_lab.center.x + 15, _lab.center.y);
2.힌트 를 표시 하고 숨 길 초고 가 있 는 지 확인 하 는 label

[self.chatSessionInputBarControl.inputTextView addSubview:_lab];
if (self.chatSessionInputBarControl.draft == nil || self.chatSessionInputBarControl.draft.length == 0) {
  _lab.hidden = NO;
}else {
  _lab.hidden = YES;
}
3.입력 데이터 에 따라 숨겨 진 알림 표시 label

- (void)inputTextView:(UITextView *)inputTextView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if (((inputTextView.text.length == 1 && [text isEqualToString:@""]) || (inputTextView.text.length == 0 && text.length > 0)) && range.length == 1 && range.location == 0) {
  _lab.hidden = NO;
}else {
  _lab.hidden = YES;
}
}
3 입력 취소@친구 목록 창 팝 업,프로필 사진 유지@방법
1.먼저 AppDelegate 에서 메시지@기능 을 엽 니 다(단체 채 팅 과 토론 그룹 만 지원 하고 App 은 그룹 구성원 데이터 원본 groupMemberDataSource 를 실현 해 야 합 니 다)

[RCIM sharedRCIM].enableMessageMentioned = YES;
그리고 RCConversationViewController 를 계승 하 는 컨트롤 러 에서 호출 합 니 다.

-(void)showChooseUserViewController:(void (^)(RCUserInfo *selectedUserInfo))selectedBlock
             cancel:(void (^)())cancelBlock {
}

4 세 션 목록 에 고정된 cell 추가(RCConversationListView Controller 계승)

//     cell  
- (RCConversationBaseCell *)rcConversationListTableView:(UITableView *)tableView
               cellForRowAtIndexPath:(NSIndexPath *)indexPath {
RCCustomCell *cell = (RCCustomCell *)[[RCCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"RCCustomCell"];
RCConversationModel *model = self.conversationListDataSource[indexPath.row];
cell.nameLabel.text = model.conversationTitle;
return cell;
}

//      cell    
- (NSMutableArray *)willReloadTableData:(NSMutableArray *)dataSource{
NSArray *arr = @[@"     @  ", @"     ", @"     @  ", @"    "];
for (int i = 0; i<arr.count; i++) {
  RCConversationModel *model = [[RCConversationModel alloc]init];
  model.conversationModelType = RC_CONVERSATION_MODEL_TYPE_CUSTOMIZATION;
  model.conversationTitle = arr[i];
  model.isTop = YES;
  [dataSource insertObject:model atIndex:i];
}
return dataSource;
}

//   cell  
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
   conversationModel:(RCConversationModel *)model
      atIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row == 0) {
  WTForumAndConnectListViewController *chatList = (WTForumAndConnectListViewController *)[WTStoryBoardSegment instantiateViewControllerWithStoryBoardName:@"Main" identifier:@"WTForumAndConnectListViewController"];
  chatList.title = @"   @  ";
  [self.navigationController pushViewController:chatList animated:YES];
}else if (indexPath.row == 1) {
  WTChatListViewController *chatList = [[WTChatListViewController alloc] init];
  chatList.title = @"     ";
  chatList.isEnteredToCollectionViewController = YES;
  chatList.type = 1;
  chatList.friendArray = self.friendArray;
  [self.navigationController pushViewController:chatList animated:YES];
}else if (indexPath.row == 2) {
  WTChatListViewController *chatList = [[WTChatListViewController alloc] init];
  chatList.title = @"     @  ";
  chatList.isEnteredToCollectionViewController = YES;
  chatList.type = 2;
  [self.navigationController pushViewController:chatList animated:YES];
}else if (indexPath.row == 3) {
  WTQuestionnaireViewController *questionnaire = (WTQuestionnaireViewController *)[WTStoryBoardSegment instantiateViewControllerWithStoryBoardName:@"Main" identifier:@"WTQuestionnaireViewController"];
  [self.navigationController pushViewController:questionnaire animated:YES];
}else {
  //  cell,  cell   model,   model      RCUserInfo,        ,    
  if (model.conversationType == ConversationType_PRIVATE) {//  
    WTMyConversationLisViewController *_conversationVC = [[WTMyConversationLisViewController alloc]init];
    _conversationVC.conversationType = model.conversationType;
    _conversationVC.targetId = model.targetId;
    _conversationVC.title = model.conversationTitle;
    [self.navigationController pushViewController:_conversationVC animated:YES];
  }else if (model.conversationType == ConversationType_GROUP){//  
    WTMyConversationLisViewController *_conversationVC = [[WTMyConversationLisViewController alloc]init];
    _conversationVC.conversationType = model.conversationType;
    _conversationVC.title = model.conversationTitle;
    _conversationVC.targetId = model.targetId;
    [self.navigationController pushViewController:_conversationVC animated:YES];
  }
}
}
5 임의의 곳 에서 채 팅 목록 수량 및 삭제 목록 가 져 오기
채 팅 목록 가 져 오기

NSArray *privateArr = [[RCIMClient sharedRCIMClient] getConversationList:@[@(ConversationType_PRIVATE)]];
ConversationList 에 해당 유형의 채 팅 을 추가 하면 해당 유형의 채 팅 목록 을 가 져 올 수 있 습 니 다.삭제 방법 은 유사 합 니 다.

[[RCIMClient sharedRCIMClient] clearConversations:@[@(ConversationType_PRIVATE)]];
6 배경 그림
클 라 우 드 채 팅 목록 에 데이터 가 없 는 기본 그림 아래 오른쪽 상단 을 클릭 하여 채 팅 을 추가 합 니 다.그러나 모든 채 팅 에 이 기능 이 있 는 것 은 아 닙 니 다.(내 것 은 없 음)어떻게 없 으 면 자원 파일 에서 no 를 찾 을 수 있 습 니까?message_img 이 그림 은 ps 로 아래 줄 을 지 웁 니 다.😆
기타
이상 은 제 가 구름 을 녹 이 는 과정 에서 만난 문제 와 해결 방법 입 니 다.만약 에 잘못 되 거나 부족 한 점 이 있 으 면 지적 해 주 십시오.감사합니다!많은 응원 부 탁 드 리 겠 습 니 다.

좋은 웹페이지 즐겨찾기