iOS-融云的部分功能集成

1、導(dǎo)入融云的SDK


融云SDK.png

2扰她、添加framework


融云framework.png

3兽掰、添加融云API的管理類RongCloudManage
#import <Foundation/Foundation.h>

#import <RongIMKit/RongIMKit.h>
@interface RongCloudManage : NSObject <RCIMUserInfoDataSource, RCIMGroupInfoDataSource>

@property (nonatomic, strong) NSMutableArray *friendsArray;//好友數(shù)組
@property (nonatomic, strong) NSMutableArray *groupsArray; //群組數(shù)組

//單例類
+ (instancetype)shareDataManage;

//登錄
-(void)loginRongCloudWithUserInfo:(RCUserInfo *)userInfo withToken:(NSString *)token;

//通過userid得到RCUserInfo
- (void)getUserInfoWithUserId:(NSString*)userId completion:(void (^)(RCUserInfo*))completion;

//好友中是否有這個(gè)userid
-(BOOL)hasTheFriendWithUserId:(NSString *)userId;

//群組中是否有這個(gè)groupid
- (BOOL)hasTheGroupWithGroupId:(NSString *)groupId;

// 從服務(wù)器同步好友列表
-(void) syncFriendList:(void (^)(NSMutableArray * friends,BOOL isSuccess))completion;

// 從服務(wù)器同步群組列表
-(void) syncGroupList:(void (^)(NSMutableArray * groups,BOOL isSuccess))completion;

//刷新badge
-(void) refreshBadgeValue;

//根據(jù)用戶參數(shù)的id獲取當(dāng)前用戶的name
-(NSString *)currentNameWithUserId:(NSString *)userId;

//根據(jù)用戶參數(shù)的id(userId)獲取RCUserInfo
-(RCUserInfo *)currentUserInfoWithUserId:(NSString *)userId;

//根據(jù)群組的id(groupId)獲取RCGroup
-(RCGroup *)currentGroupInfoWithGroupId:(NSString *)groupId;
@end
#import "RongCloudManage.h"
#import "AppDelegate.h"
#import "RootTabBarController.h"
@implementation RongCloudManage
{
    NSMutableArray *dataSoure;
    
    NSArray *_userIdArray;
    NSArray *_nameArray;
    NSArray *_urlArray;
    NSArray *_tokenArray;
}
- (instancetype)init
{
    if (self = [super init]) {
        [RCIM sharedRCIM].userInfoDataSource = self;
        [RCIM sharedRCIM].groupInfoDataSource = self;
    }
    return self;
}
+ (instancetype)shareDataManage
{
    static RongCloudManage *manage = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manage = [[RongCloudManage alloc] init];
    });
    return manage;
}

#pragma mark - loginRogCloud
-(void)loginRongCloudWithUserInfo:(RCUserInfo *)userInfo withToken:(NSString *)token{
    [[RCIM sharedRCIM] connectWithToken:token success:^(NSString *userId) {
        [RCIM sharedRCIM].globalNavigationBarTintColor = [UIColor redColor];
        NSLog(@"login success with userId %@",userId);
        //同步好友列表
        [self syncFriendList:^(NSMutableArray *friends, BOOL isSuccess) {
//            NSLog(@"%@",friends);
            if (isSuccess) {
                [self syncGroupList:^(NSMutableArray *groups, BOOL isSuccess) {
                    if (isSuccess) {
                        NSLog(@" success 發(fā)送通知");
                        [[NSNotificationCenter defaultCenter] postNotificationName:@"alreadyLogin" object:nil];
                    }
                }];
            }
        }];
        [RCIMClient sharedRCIMClient].currentUserInfo = userInfo;
        [[RongCloudManage shareDataManage] refreshBadgeValue];
    } error:^(RCConnectErrorCode status) {
        NSLog(@"status = %ld",(long)status);
    } tokenIncorrect:^{
        NSLog(@"token 錯(cuò)誤");
    }];
}

- (void)createDateSource
{
    
    _userIdArray = @[@"13579",
                     @"12888",
                     @"12345",
                     @"54321",
                     @"87654321",
                     @"123456",
                     @"654321",];
    _nameArray = @[@"hello_one",
                   @"hello_two",
                   @"hello_three",
                   @"猴賽雷",
                   @"妹子",
                   @"123456",
                   @"654321",];
    
    _urlArray = @[@"http://weixin.ihk.cn/ihkwx_upload/fodder/20151210/1449727866527.jpg",
                  @"http://weixin.ihk.cn/ihkwx_upload/fodder/20151210/1449727755947.jpg",
                  @"http://pic.ihk.cn/head/base/ihk/2014/04/30/213816839.jpg",
                  @"http://pic.ihk.cn/head/80_93/ihk/2015/05/20/104331022.jpg",
                  @"http://weixin.ihk.cn/ihkwx_upload/fodder/20151218/1450420944608.jpg",
                  @"123456",
                  @"654321",];
    
    _tokenArray = @[@"aiAxITW3kbJg7Ayy9ynaU5ciKm2nZw8edLjLs0YBrzGXTgFE/7jwYcLCUBKKKC4Wn/e/+Oa/M+Fw4Wu0M0Iyfw==",
                    @"bYqaXADdV3GCCqm7eFRbeJciKm2nZw8edLjLs0YBrzGXTgFE/7jwYXQZci6kNiGdS0okiEM9x1nIpiIsgpVQNA==",
                    @"WKEnT6Ir0b6GlD7nW+z/cJciKm2nZw8edLjLs0YBrzGXTgFE/7jwYfo/iUQapWcahM/YZxEzSoF2xFDsI935wg==",
                    @"uB98Blf86jDhuTXcs9RpXNBkzAOozj9F+pyFMVI7MpSkT/x/daJtb0PC6GPnRWihxK+d1jfut+xBstcUxIOpUQ==",
                    @"eZ8Q9k7+16LW5j6iIYvJvpciKm2nZw8edLjLs0YBrzGXTgFE/7jwYfBSKHbePSQzj2GZjW47L0wcJJ7rq10J7K8vdcu/4QoY",
                    @"tYzEy49VLDjgxcVYPnEMedBkzAOozj9F+pyFMVI7MpTRis9jOGS/fwKnzxyDH7hNr3dhmyLSPYrPutrE54DbYQ==",
                    @"Nly/jQvunT48ceC7FVIr/o48JsPo610z1NcuN8qpfMOhYvO8Cbxa5QTrO1asCXNZuFWMAujpZII3y0gALhIGAA==",];
}

-(void)refreshBadgeValue
{
    dispatch_async(dispatch_get_main_queue(), ^{

        NSInteger unreadMsgCount = (NSInteger)[[RCIMClient sharedRCIMClient] getUnreadCount:@[@(ConversationType_PRIVATE), @(ConversationType_GROUP)]];


        RootTabBarController *root = (id)[UIApplication sharedApplication].delegate.window.rootViewController;
        UINavigationController *chatNav = root.viewControllers[1];
        if (unreadMsgCount == 0) {
            chatNav.tabBarItem.badgeValue = nil;
        }else{
            chatNav.tabBarItem.badgeValue = [NSString stringWithFormat:@"%li",(long)unreadMsgCount];
        }
    });
}
-(BOOL)hasTheFriendWithUserId:(NSString *)userId
{
    
    if (self.friendsArray) {
        NSMutableArray *tempArray = [[NSMutableArray alloc]init];
        
        for (RCUserInfo *aUserInfo in self.friendsArray) {
            [tempArray addObject:aUserInfo.userId];
        }
        
        if ([tempArray containsObject:userId]) {
            return YES;
        }
    }
    return NO;
}

- (BOOL)hasTheGroupWithGroupId:(NSString *)groupId
{
    NSLog(@"group-->%@<--", self.groupsArray);
    if (self.groupsArray.count) {
        NSMutableArray *tempArray = [[NSMutableArray alloc] init];
        for (RCGroup *aGroupInfo in self.groupsArray) {
            [tempArray addObject:aGroupInfo.groupId];
        }
        if ([tempArray containsObject:groupId]) {
            return YES;
        }
    }
    return NO;
}
/**
 *  從服務(wù)器同步好友列表
 */
-(void)syncFriendList:(void (^)(NSMutableArray* friends,BOOL isSuccess))completion
{
    dataSoure = [[NSMutableArray alloc]init];
    
    for (NSInteger i = 0; i<7; i++) {
        
        RCUserInfo *aUserInfo =[[RCUserInfo alloc]initWithUserId:_userIdArray[i] name:_nameArray[i] portrait:_urlArray[i]];
        [dataSoure addObject:aUserInfo];
        
    }
    self.friendsArray = dataSoure;
    completion(dataSoure,YES);
    
}
/**
 *  從服務(wù)器同步群組列表
 */
-(void) syncGroupList:(void (^)(NSMutableArray * groups,BOOL isSuccess))completion{
    if (self.groupsArray) {
        [self.groupsArray removeAllObjects];
    }
    NSMutableArray *_dataSourceGroup = [[NSMutableArray alloc] init];
    for (NSInteger i = 1; i<3; i++) {
        if (i==1){
            RCGroup *aGroup = [[RCGroup alloc]initWithGroupId:@"8888888" groupName:@"醫(yī)食保健群_an" portraitUri:@"http://farm2.staticflickr.com/1715/23815656639_ef86cf1498_m.jpg"];
            [_dataSourceGroup addObject:aGroup];
            
        }
        else if (i==2){
            RCGroup *aGroup = [[RCGroup alloc]initWithGroupId:@"66666666" groupName:@"青龍幫" portraitUri:@"http://farm2.staticflickr.com/1455/23888379640_edf9fce919_m.jpg"];
            [_dataSourceGroup addObject:aGroup];
        }
    }
    //    NSLog(@"111->>>%@", _dataSourceGroup);
    self.groupsArray = _dataSourceGroup;
    completion(self.groupsArray,YES);
    
}
#pragma mark
#pragma mark 根據(jù)userId獲取RCUserInfo
-(RCUserInfo *)currentUserInfoWithUserId:(NSString *)userId{
    for (NSInteger i = 0; i<self.friendsArray.count; i++) {
        RCUserInfo *aUser = self.friendsArray[i];
        if ([userId isEqualToString:aUser.userId]) {
            NSLog(@"current = %@",aUser.name);
            return aUser;
        }
    }
    return nil;
}
#pragma mark
#pragma mark 根據(jù)userId獲取RCGroup
-(RCGroup *)currentGroupInfoWithGroupId:(NSString *)groupId{
    for (NSInteger i = 0; i<self.groupsArray.count; i++) {
        RCGroup *aGroup = self.groupsArray[i];
        if ([groupId isEqualToString:aGroup.groupId]) {
            return aGroup;
        }
    }
    return nil;
}
-(NSString *)currentNameWithUserId:(NSString *)userId{
    for (NSInteger i = 0; i < self.friendsArray.count; i++) {
        RCUserInfo *aUser = self.friendsArray[i];
        if ([userId isEqualToString:aUser.userId]) {
            NSLog(@"current = %@",aUser.name);
            return aUser.name;
        }
    }
    return nil;
}

#pragma mark - RCIMUserInfoDataSource
- (void)getUserInfoWithUserId:(NSString*)userId completion:(void (^)(RCUserInfo*))completion
{
    NSLog(@"getUserInfoWithUserId ----- %@", userId);
    
    if (userId == nil || [userId length] == 0 )
    {
        [self syncFriendList:^(NSMutableArray *friends, BOOL isSuccess) {
            
        }];
        
        completion(nil);
        return ;
    }
    
    if ([userId isEqualToString:[RCIM sharedRCIM].currentUserInfo.userId]) {
        RCUserInfo *myselfInfo = [[RCUserInfo alloc]initWithUserId:[RCIM sharedRCIM].currentUserInfo.userId name:[RCIM sharedRCIM].currentUserInfo.name portrait:[RCIM sharedRCIM].currentUserInfo.portraitUri];
        completion(myselfInfo);
        
    }
    
    for (NSInteger i = 0; i < self.friendsArray.count; i++) {
        RCUserInfo *aUser = self.friendsArray[i];
        if ([userId isEqualToString:aUser.userId]) {
            completion(aUser);
            break;
        }
    }
}

#pragma mark - RCIMGroupInfoDataSource
- (void)getGroupInfoWithGroupId:(NSString *)groupId
                     completion:(void (^)(RCGroup *groupInfo))completion{
    for (NSInteger i = 0; i < self.groupsArray.count; i++) {
        RCGroup *aGroup = self.groupsArray[i];
        if ([groupId isEqualToString:aGroup.groupId]) {
            completion(aGroup);
            break;
        }
    }
}

3、在AppDelegate.m文件里面進(jìn)行的操作

- (void)initRongCloud
{
    [[RCIM sharedRCIM] initWithAppKey:@"8w7jv4qb7hp2y"];
    [RCIM sharedRCIM].enableMessageAttachUserInfo = YES;
    [[RongCloudManage shareDataManage] loginRongCloudWithUserInfo:[[RCUserInfo alloc] initWithUserId:@"12345" name:@"hello_three" portrait:@"http://pic.ihk.cn/head/base/ihk/2014/04/30/213816839.jpg"] withToken:@"WKEnT6Ir0b6GlD7nW+z/cJciKm2nZw8edLjLs0YBrzGXTgFE/7jwYfo/iUQapWcahM/YZxEzSoF2xFDsI935wg=="];
}

4徒役、會話列表類

#import <UIKit/UIKit.h>
#import <RongIMKit/RongIMKit.h>
@interface MessageController : RCConversationListViewController
@end
#import "MessageController.h"

@interface MessageController ()

@end

@implementation MessageController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setDisplayConversationTypes:@[@(ConversationType_PRIVATE), @(ConversationType_GROUP)]];
    
    [self setNavigationBar];
    
    self.conversationListTableView.tableFooterView = [UIView new];
}

- (void)setNavigationBar
{
    self.view.backgroundColor = [UIColor colorWithRed:0.9295 green:0.9246 blue:0.9345 alpha:1.0];
    
    self.navigationItem.title = @"消息";
    [self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20], NSForegroundColorAttributeName:[UIColor whiteColor]}];
    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:0.2945 green:0.5072 blue:1.0 alpha:1.0];
    
}
//點(diǎn)擊cell孽尽,跳轉(zhuǎn)到好友或者群組界面
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType conversationModel:(RCConversationModel *)model atIndexPath:(NSIndexPath *)indexPath
{
//如果是群組類型
    if (model.conversationType == ConversationType_GROUP) {
        RCConversationViewController *rcConversationVC = [[RCConversationViewController alloc] initWithConversationType:model.conversationType targetId:model.targetId];
        
        RCGroup *group = [[RongCloudManage shareDataManage] currentGroupInfoWithGroupId:model.targetId];
        rcConversationVC.title = group.groupName;
        NSLog(@"group-->%@-->%@", model.conversationTitle, group.groupName);
        [self.navigationController pushViewController:rcConversationVC animated:YES];
    }
//如果是好友類型
    else if (model.conversationType == ConversationType_PRIVATE) {
        RCConversationViewController *rcConversationVC = [[RCConversationViewController alloc] initWithConversationType:model.conversationType targetId:model.targetId];
        rcConversationVC.title = model.conversationTitle;
        NSLog(@"private-->%@", model.conversationTitle);
        [self.navigationController pushViewController:rcConversationVC animated:YES];
    }
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市廉涕,隨后出現(xiàn)的幾起案子泻云,更是在濱河造成了極大的恐慌艇拍,老刑警劉巖狐蜕,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卸夕,居然都是意外死亡层释,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門快集,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贡羔,“玉大人廉白,你說我怎么就攤上這事」院” “怎么了猴蹂?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長楣嘁。 經(jīng)常有香客問我磅轻,道長,這世上最難降的妖魔是什么逐虚? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任聋溜,我火速辦了婚禮,結(jié)果婚禮上叭爱,老公的妹妹穿的比我還像新娘撮躁。我一直安慰自己,他們只是感情好买雾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布把曼。 她就那樣靜靜地躺著,像睡著了一般漓穿。 火紅的嫁衣襯著肌膚如雪祝迂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天器净,我揣著相機(jī)與錄音型雳,去河邊找鬼。 笑死山害,一個(gè)胖子當(dāng)著我的面吹牛纠俭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浪慌,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冤荆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了权纤?” 一聲冷哼從身側(cè)響起钓简,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汹想,沒想到半個(gè)月后外邓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡古掏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年损话,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丧枪,死狀恐怖光涂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拧烦,我是刑警寧澤忘闻,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站恋博,受9級特大地震影響服赎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜交播,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一抗蠢、第九天 我趴在偏房一處隱蔽的房頂上張望须肆。 院中可真熱鬧,春花似錦、人聲如沸偏友。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藕甩。三九已至,卻和暖如春曹傀,著一層夾襖步出監(jiān)牢的瞬間辐脖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工皆愉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嗜价,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓幕庐,卻偏偏與公主長得像久锥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子异剥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 寫在前面融云是一個(gè)比較強(qiáng)大的第三方框架瑟由,為我們提供了即時(shí)通訊的基本組件,導(dǎo)入SDK冤寿,進(jìn)行一些簡單的配置就可以看到會...
    汪小喵閱讀 14,703評論 14 31
  • 相信大家在項(xiàng)目中會用到即時(shí)通訊功能,自己去寫的話會需要前后臺合作,會大大加大開發(fā)的周期,所以考慮使用第三方的即時(shí)通...
    ProgrammerChan閱讀 8,440評論 16 38
  • 點(diǎn)擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 13,766評論 0 15
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,156評論 25 707
  • 繼上一張上色的無奈之后歹苦,來一張黑白噠。這是一副督怜,我都數(shù)不清畫了多少小精靈的畫殴瘦。為了臨摹,仔細(xì)看了原作品的每一個(gè)部分...
    Hi彤彤閱讀 583評論 0 1