iOS:融雲即時通訊快速集成


一、介紹

   即時通訊在眾多社交軟件、生活軟件以及教育軟件中已經是必備的功能了,在當前國內,即時通訊SDK做的比較不錯的有那么幾家,例如環信SDK、融雲SDK...,這兩家做的都很不錯,各有千秋吧,要是真讓說出個不同,就我個人感覺融雲的集成要更簡單一些,就那么幾步,有點開發基礎都會,我之前在項目中集成過環信,解決了不少的坑才集成好。他們共同的特點就是,都只負責進行聊天,不管理好友之間的關系和用戶的信息,它們都是在代理方法中設置用戶的信息,包括姓名、昵稱、頭像等,環信中是通過IMessageModel模型直接設置,融雲則是通過將RCUserInfo模型作為block的參數進行回調設置。

如果需要集成環信,可以看看我的集成過程:http://www.cnblogs.com/XYQ-208910/p/5396635.html

 

二、准備

(1)注冊融雲開發者賬號:https://developer.rongcloud.cn/signup

(2)登錄賬號,在控制台創建應用獲取AppKey和AppScrete

(3)找到調試API接口,手動獲取token(這個融雲最終要求是開發者從自己的服務器獲取),此處只是在為開發環境測試所用

(4)在plist設置iOS9需要的https網絡請求字段NAAppTransportSecurity

(5)如果對界面沒有更高的定制要求,融雲本身提供的所有聊天等界面已經足夠使用,此時集成IMKit框架使用即可,推薦使用CocoaPods自動集成

 

三、集成 

(1)生成Podfile文件,選擇IM框架

platform :ios, '8.0'
target 'RongCloudKit' do
    pod 'RongCloudIM/IMLib', '2.8.0' //需要自己去定制UI界面
    pod 'RongCloudIM/IMKit', '2.8.0' //融雲提供完善的UI界面
end

(2)安裝后導入頭文件即可使用

 

四、使用(RCIM是一個單例類,幾乎很多重要的操作都是由這個類來完成的)

 (1)注冊融雲APPKey

//注冊融雲APPKEY
[[RCIM sharedRCIM] initWithAppKey:APPKEY];

 (2)登錄融雲服務器

//使用手動生成的token連接融雲服務器進行登錄
    [[RCIM sharedRCIM] connectWithToken:TOKEN success:^(NSString *userId) {
        NSLog(@"登陸成功。當前登錄的用戶ID:%@", userId);
        
    } error:^(RCConnectErrorCode status) {
        NSLog(@"登陸的錯誤碼為:%ld", status);
    } tokenIncorrect:^{
        //token過期或者不正確。
        //如果設置了token有效期並且token過期,請重新請求您的服務器獲取新的token
        //如果沒有設置token有效期卻提示token錯誤,請檢查您客戶端和服務器的appkey是否匹配,還有檢查您獲取token的流程。
        NSLog(@"token錯誤");
    }];

 (3)顯示聊天界面代碼如下(此處我繼承了原生會話類RCConversationViewController)

//  RongCloudConversationViewController.h
//  RongCloudKit
//
//  Created by 夏遠全 on 16/12/17.
//  Copyright © 2016年 廣州市東德網絡科技有限公司. All rights reserved.
//

#import <RongIMKit/RongIMKit.h>

@interface SystemConversationViewController : RCConversationViewController

@end
//  RongCloudConversationViewController.m
//  RongCloudKit
//
//  Created by 夏遠全 on 16/12/17.
//  Copyright © 2016年 廣州市東德網絡科技有限公司. All rights reserved.
//

#import "SystemConversationViewController.h"

@interface SystemConversationViewController ()<RCIMUserInfoDataSource>

@end

@implementation SystemConversationViewController

-(instancetype)init{
    self = [super init];
    
    //設置會話的類型,如單聊、討論組、群聊、聊天室、客服、公眾服務會話等
    self.conversationType = ConversationType_PRIVATE;
    
    //設置會話的目標會話ID。(單聊、客服、公眾服務會話為對方的ID,討論組、群聊、聊天室為會話的ID)
    self.targetId = OTHERID;
    
    //設置聊天會話界面要顯示的標題
    self.title = OTHERID;
    
    return self;
}

-(void)viewDidLoad{
    [super viewDidLoad];
    
    //用戶信息提供者
    [RCIM sharedRCIM].userInfoDataSource = self;

}


#pragma mark - <RCIMUserInfoDataSource>
/*!
 獲取用戶信息
 @param userId      用戶ID
 @param completion  獲取用戶信息完成之后需要執行的Block [userInfo:該用戶ID對應的用戶信息]
 @discussion SDK通過此方法獲取用戶信息並顯示,請在completion中返回該用戶ID對應的用戶信息。
 在您設置了用戶信息提供者之后,SDK在需要顯示用戶信息的時候,會調用此方法,向您請求用戶信息用於顯示。
 */
-(void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion
{
    //設置用戶信息
    NSString *avatarURL = @"http://xxxxxx.com/static/avatar/137180371639017.jpeg";
    RCUserInfo *userInfo = [[RCUserInfo alloc] initWithUserId:userId name:userId portrait:avatarURL];
    
    //block回調設置用戶信息
    completion(userInfo);
}

@end
//聊天界面
-(void)conversationStart{
    
    //新建一個聊天會話View Controller對象、顯示聊天會話界面
    SystemConversationViewController *chat = [[SystemConversationViewController alloc]init];
    [self.navigationController pushViewController:chat animated:YES];
}

 (4)顯示會話列表界面代碼如下(此處我繼承了原生會話列表類RCConversationListViewController)

//  ConversationListViewController.h
//  RongCloudKit
//
//  Created by 夏遠全 on 16/12/17.
//  Copyright © 2016年 廣州市東德網絡科技有限公司. All rights reserved.
//

#import <RongIMKit/RongIMKit.h>

@interface SystemConversationListViewController : RCConversationListViewController

@end
//  ConversationListViewController.m
//  RongCloudKit
//
//  Created by 夏遠全 on 16/12/17.
//  Copyright © 2016年 廣州市東德網絡科技有限公司. All rights reserved.
//

#import "SystemConversationListViewController.h"
#import "SystemConversationViewController.h"

@interface SystemConversationListViewController ()<RCIMUserInfoDataSource>

@end

@implementation SystemConversationListViewController

- (void)viewDidLoad {
    
    //重寫顯示相關的接口,必須先調用super,否則會屏蔽SDK默認的處理
    [super viewDidLoad];
    self.conversationListTableView.tableFooterView = [[UIView alloc] init];
    
    //設置需要顯示哪些類型的會話
    [self setDisplayConversationTypes:@[@(ConversationType_PRIVATE),
                                        @(ConversationType_DISCUSSION),
                                        @(ConversationType_CHATROOM),
                                        @(ConversationType_GROUP),
                                        @(ConversationType_APPSERVICE),
                                        @(ConversationType_SYSTEM)]];
    
    //設置需要將哪些類型的會話在會話列表中聚合顯示
    [self setCollectionConversationType:@[@(ConversationType_DISCUSSION),
                                          @(ConversationType_GROUP)]];
    
    
    //用戶信息提供者
    [RCIM sharedRCIM].userInfoDataSource = self;
}

//重寫RCConversationListViewController的onSelectedTableRow事件
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
         conversationModel:(RCConversationModel *)model
               atIndexPath:(NSIndexPath *)indexPath {
    
    SystemConversationViewController *conversationVC = [[SystemConversationViewController alloc]init];
    conversationVC.conversationType = model.conversationType;
    conversationVC.targetId = model.targetId;
    conversationVC.title = model.targetId;
    [self.navigationController pushViewController:conversationVC animated:YES];
}


#pragma mark - <RCIMUserInfoDataSource>
/*!
 獲取用戶信息
 @param userId      用戶ID
 @param completion  獲取用戶信息完成之后需要執行的Block [userInfo:該用戶ID對應的用戶信息]
 @discussion SDK通過此方法獲取用戶信息並顯示,請在completion中返回該用戶ID對應的用戶信息。
 在您設置了用戶信息提供者之后,SDK在需要顯示用戶信息的時候,會調用此方法,向您請求用戶信息用於顯示。
 */
-(void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion
{
    //設置用戶信息
    NSString *avatarURL = @"http://xxxxxx.com/static/avatar/137180371639017.jpeg";
    RCUserInfo *userInfo = [[RCUserInfo alloc] initWithUserId:userId name:userId portrait:avatarURL];
    
    //block回調設置用戶信息
    completion(userInfo);
}

@end
//會話列表
-(void)chatViewList{
    
    //新建一個會話列表界面類,顯示所有的會話聯系人
    SystemConversationListViewController *chatList = [[SystemConversationListViewController alloc] init];
    [self.navigationController pushViewController:chatList animated:YES];
}

 

五、演示截圖

     

        

 

六、提示一下

 融雲的開發文檔些的相當詳細,我這兒寫一下純屬閑來無事,自娛自樂,有這方面需要的還是去看官方的文檔吧,那文檔的詳細,厲害了我的哥~~~😆

  歡迎關注我的博客:http://www.cnblogs.com/XYQ-208910和github:https://github.com/xiayuanquan


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM