关于融云SDK的使用(IMKit)

1.注册申请APPKEY不多说了

2.AppDelegate相关设置

// 初始化融云SDK
[[RCIM sharedRCIM]initWithAppKey:@"你的APPKEY"];

3.与融云交互的相关代理设置

    //用户信息提供者
    [[RCIM sharedRCIM] setUserInfoDataSource:self];
    //群组信息提供者
    [[RCIM sharedRCIM] setGroupInfoDataSource:self];
    //群名片信息提供者
    [[RCIM sharedRCIM] setGroupUserInfoDataSource:self];
    //IMKit连接状态的监听器
    [[RCIM sharedRCIM] setConnectionStatusDelegate:self];
    //IMKit消息接收的监听器
    [[RCIM sharedRCIM] setReceiveMessageDelegate:self];
    //是否关闭本地通知,默认是打开的
    [[RCIM sharedRCIM] setDisableMessageNotificaiton:NO];

4.实现设置好的代理

/**
 *  用户信息提供者
 *
 *  @param userId     <#userId description#>
 *  @param completion <#completion description#>
 */
- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion
{
        //通过代理方法获得的userid去获取详细信息()
        RCUserInfo *user = [[RCUserInfo alloc]init];
        user.userId = [@"用户id"];
        user.name = [@"用户昵称"];
        user.portraitUri = [@"头像"];
        return completion(user);
}
/**
 *  群组信息提供者
 *
 *  @param groupId    <#groupId description#>
 *  @param completion <#completion description#>
 */
-(void)getGroupInfoWithGroupId:(NSString *)groupId completion:(void (^)(RCGroup *))completion
{
        //通过代理方法获得的groupId去获取详细信息()  
        RCGroup * group  = [[RCGroup alloc]init];
        group.groupName = [群组昵称];
        group.groupId = [群组id];
        group.portraitUri = [头像];
        return completion(group);
  
}
/**
 *  网络状态变化。
 *
 *  @param status 网络状态。
 */
- (void)onRCIMConnectionStatusChanged:(RCConnectionStatus)status {
    if (status == ConnectionStatus_KICKED_OFFLINE_BY_OTHER_CLIENT) {
        UIAlertView *alert = [[UIAlertView alloc]
                              initWithTitle:@"提示"
                              message:@"您"
                              @"的帐号在别的设备上登录,您被迫下线!"
                              delegate:nil
                              cancelButtonTitle:@"知道了"
                              otherButtonTitles:nil, nil];
        MS_LoginFirstViewController *loginfirst = [[MS_LoginFirstViewController alloc] init];
        MS_NavigationController *nav = [[MS_NavigationController alloc] initWithRootViewController:loginfirst];
        
        UIWindow *window = [[UIApplication sharedApplication] keyWindow];
        
        window.rootViewController = nav;
   
        [alert show];
      
    } else if (status == ConnectionStatus_TOKEN_INCORRECT) {
        dispatch_async(dispatch_get_main_queue(), ^{
          
            UIAlertView *alertView =
            [[UIAlertView alloc] initWithTitle:nil
                                       message:@"已过期,请重新登录"
                                      delegate:nil
                             cancelButtonTitle:@"确定"
                             otherButtonTitles:nil, nil];
            
            MS_LoginFirstViewController *loginfirst = [[MS_LoginFirstViewController alloc] init];
            MS_NavigationController *nav = [[MS_NavigationController alloc] initWithRootViewController:loginfirst];
            
            UIWindow *window = [[UIApplication sharedApplication] keyWindow];
            
            window.rootViewController = nav;
            
            [alertView show];
        });
    }
}

/*!
 接收消息的回调方法
 
 @param message     当前接收到的消息
 @param left        还剩余的未接收的消息数,left>=0
 
 @discussion 如果您设置了IMKit消息监听之后,SDK在接收到消息时候会执行此方法(无论App处于前台或者后台)。
 其中,left为还剩余的、还未接收的消息数量。比如刚上线一口气收到多条消息时,通过此方法,您可以获取到每条消息,left会依次递减直到0。
 您可以根据left数量来优化您的App体验和性能,比如收到大量消息时等待left为0再刷新UI。
 */
-(void)onRCIMReceiveMessage:(RCMessage *)message left:(int)left{

int unreadMsgCount = [[RCIMClient sharedRCIMClient] getUnreadCount:@[
                                                                         @(ConversationType_PRIVATE),
                                                                         @(ConversationType_DISCUSSION),
                                                                         @(ConversationType_APPSERVICE),
                                                                         @(ConversationType_PUBLICSERVICE), 
                                                                         @(ConversationType_GROUP) 
                                                                         ]];
                                                                         
    NSString * unreadNum = [NSString stringWithFormat:@"%d",unreadMsgCount];
    NSDictionary * dict = @{@"unreadNum":unreadNum};

    [[NSNotificationCenter defaultCenter] postNotificationName:@"MessageUnreadNum" object:nil userInfo:dict];

    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    
    if (version >= 8.0) {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    }
    UIApplication *app = [UIApplication sharedApplication];
    app.applicationIconBadgeNumber = unreadMsgCount;
   
    
}
//这两个直接看注释,写的非常详细
-(BOOL)onRCIMCustomLocalNotification:(RCMessage*)message
                      withSenderName:(NSString *)senderName{
    return NO;
}
-(BOOL)onRCIMCustomAlertSound:(RCMessage *)message{
    return NO;
}

5单聊相关

//MS_ChatViewController是我继承融云RCConversationViewController的一个子类
MS_ChatViewController * chat = [[MS_ChatViewController alloc]initWithConversationType:ConversationType_PRIVATE targetId:@"对方id"];

    [self.navigationController pushViewController:chat animated:YES];

6群组相关

//MS_MyGroupChatViewController是我继承融云RCConversationViewController的一个子类
MS_MyGroupChatViewController * chat = [[MS_MyGroupChatViewController alloc]initWithConversationType:ConversationType_GROUP targetId:@“群组id”];

    [self.navigationController pushViewController:chat animated:YES];

7聊天室相关

//MS_DoctorChatDetailController是我继承融云RCConversationViewController的一个子类
 MS_DoctorChatDetailController * doc =[[MS_DoctorChatDetailController alloc]initWithConversationType:ConversationType_CHATROOM targetId:_chatRoomID];

    [self.navigationController pushViewController:doc animated:YES];
PS:融云的缓存可能导致你头像,昵称显示不出来,清一下
[[RCIM sharedRCIM] clearUserInfoCache];

你可能感兴趣的:(关于融云SDK的使用(IMKit))