iOS 통합 클 라 우 드 SDK 인 스 턴 트 메 신 저 정리
10023 단어 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 로 아래 줄 을 지 웁 니 다.😆
기타
이상 은 제 가 구름 을 녹 이 는 과정 에서 만난 문제 와 해결 방법 입 니 다.만약 에 잘못 되 거나 부족 한 점 이 있 으 면 지적 해 주 십시오.감사합니다!많은 응원 부 탁 드 리 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.