iOS集成融云SDK即時通訊

相信大家在項目中會用到即時通訊功能,自己去寫的話會需要前后臺合作,會大大加大開發(fā)的周期,所以考慮使用第三方的即時通訊平臺,比如現在有融云,環(huán)信....等等等!樓主在項目開發(fā)過程中使用到過環(huán)信和融云,今天就為大家寫下IOS端集成環(huán)信的方法和可能會遇到的問題。(融云提供聊天會話列表和聊天界面并且允許我們自定義,所以很方便的)。

一:準備工作
1.首先打開融云官網http://www.rongcloud.cn/,注冊自己的賬戶,并登陸。
2.點擊左邊創(chuàng)建應用,在打開的小窗口填寫你的項目的一些信息(如果正在開發(fā)階段可以選擇未運營商務用戶,如果項目上線后是需要提交申請審核,后面再講)。

Paste_Image.png

3.創(chuàng)建好項目過后點擊剛剛創(chuàng)建好的項目,并點擊左邊的"App Key",里面包含開發(fā)環(huán)境和生產環(huán)境,不同環(huán)境下的App Key是不一樣的,融云基本是免費的,但是他會提供給你一些付費的服務(視自己項目而定)。記錄好App Key,因為在后面工程中需要。融云開發(fā)環(huán)境允許100個測試用戶,如果超過了100個測試用戶,需要在后臺手動添加用戶,一次只能添加20個。
4.導入SDK到項目(需要什么功能就導入哪一個sdk模塊,樓主只需要簡單的聊天功能加聊天界面,所以導入融云 IM 通訊能力庫 - RongCloudIM/IMLib
融云 IM 界面組件 - RongCloudIM/IMKit),融云支持下載到本地手動導入,還有一種方式就是使用cocoapods導入,個人覺得使用cocapods導入是最方便的。cocoapods的簡介和使用方法轉自:http://www.itdecent.cn/p/b64b4fd08d3c
5.添加依賴庫,Xcode點擊左側項目名 - Build Phases - Link Binary With Libraies 點擊下面的加號添加下圖的依賴庫(Xcode7.0以上版本,相信沒人還會用Xcode7.0以下的版本做開發(fā)吧!)。
融云依賴庫:
Paste_Image.png

系統依賴庫:

AssetsLibrary.framework
AudioToolbox.framework
AVFoundation.framework
CFNetwork.framework
CoreAudio.framework
CoreGraphics.framework
CoreLocation.framework
CoreMedia.framework
CoreTelephony.framework
CoreVideo.framework
ImageIO.framework
libc++.tbd
libc++abi.tbd
libsqlite3.tbd
libstdc++.tbd
libxml2.tbd
libz.tbd
MapKit.framework
OpenGLES.framework
QuartzCore.framework
SystemConfiguration.framework
UIKit.framework
Photos.framework
SafariServices.framework

添加完成依賴庫后記得需要在 Xcode 項目 Build Settings - Other Linker Flags 中,點擊下方加號,增加 "-ObjC"。
如果上面的步驟都已經做完了,可以試著編譯以下自己項目,看會不會報錯(如果有報錯記得留言,我也會為盡我的努力為大家解答),準備工作就到這里了,下面我們開始集成。

二:開始集成回話列表
1.打開工程在Appdelegate里面連接融云服務器,使用融云開發(fā)者控制臺注冊得到的 App Key,通過 RCIM 的單例,傳入 initWithAppKey:方法,初始化 SDK。在使用融云 SDK 所有功能(包括顯示 SDK 中的 View 或者顯示繼承于 SDK 的 View )之前,您必須先調用此方法初始化 SDK。 在 App 的整個生命周期中,您只需要將 SDK 初始化一次。

[[RCIM sharedRCIM] initWithAppKey:@"后臺應用的AppKey"];

2.連接融云服務器。

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

連接融云服務器的時候需要傳給融云服務器一個token,相當于登錄融云的一個"用戶名",這個"用戶名"是你們后臺服務器集成的事情,所以你不用管,到時候后臺會在你需要的地方返回給你這個token。在測試的時候需要我們在融云控制臺獲取一個測試的token,用來登錄。方法如下

image.png

將token后面的復制下來。
貼上Appdelegate代碼

#import "AppDelegate.h"
#import <RongIMLib/RongIMLib.h>
#import <RongIMKit/RongIMKit.h>

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    //初始化融云SDK
    [[RCIM sharedRCIM] initWithAppKey:@"6tnym1br65di7"];
    
    //登錄融云服務器
    [[RCIM sharedRCIM] connectWithToken:@"0ABt7ILPEShS9stGR+AJgN3bHoP4ztV1ORxxRULm/FLmvyxeqth6/QrQGCuRGPBUkOFQ2cmYVi9C+B2yuDZfcA=="     success:^(NSString *userId) {
        NSLog(@"登陸成功。當前登錄的用戶ID:%@", userId);
    } error:^(RCConnectErrorCode status) {
        NSLog(@"登陸的錯誤碼為:%ld", (long)status);
    } tokenIncorrect:^{
        //token過期或者不正確。
        //如果設置了token有效期并且token過期,請重新請求您的服務器獲取新的token
        //如果沒有設置token有效期卻提示token錯誤,請檢查您客戶端和服務器的appkey是否匹配,還有檢查您獲取token的流程。
        NSLog(@"token錯誤");
    }];
    
    return YES;
}


- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}


- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}


- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}


- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}


- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}


@end

當登錄成功后,控制臺會打印出

...
登陸成功。當前登錄的用戶ID:123
...

這是代表你的用戶ID為123的賬號已經登錄到融云服務器成功,現在可以使用融云的服務了。
3.融云 IMKit 已經實現了一個默認的會話列表視圖控制器,您直接使用或繼承 RCConversationListViewController,即可快速啟動和使用會話列表界面。意思是融云已經給你寫好了一個回話列表的界面,我們如果對界面的要求不是很高的話,可以直接繼承這個ViewController,并且這個ViewController是可以支持界面的一些修改,所以是不是很方便呢。
首先,新建一個類繼承自RCConversationListViewController。

image.png

并在.m文件的- (void)viewDidLoad方法中設置需要顯示哪些類型的會話以及哪些類型的會話可以在會話列表頁面聚合顯示。附上.m文件代碼

#import "MyselfListViewController.h"

@interface MyselfListViewController ()

@end

@implementation MyselfListViewController

- (void)viewDidLoad {
    
    [super viewDidLoad];
    
    //設置需要顯示哪些類型的會話,由于樓主只需要單聊功能,所以只設置ConversationType_PRIVATE
    [self setDisplayConversationTypes:@[@(ConversationType_PRIVATE),
                                        ]];
    
    //設置需要將哪些類型的會話在會話列表中聚合顯示
    [self setCollectionConversationType:@[@(ConversationType_PRIVATE),
                                          ]];
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

這樣一個回話列表界面就已經集成完成,我們可以在融云控制著后臺發(fā)送一條測試消息,看一下回話列表能不能收到消息。

image.png

這樣你的會話列表就會收到一條消息。

image.png

這時候你會好奇了,為什么只有消息內容,而沒有用戶名以及頭像呢,這就是融云即時通訊的一個模式,他只負責做消息的轉發(fā)者,而不會負責管理好友的信息,融云這樣說:融云認為,每一個設計良好且功能健全的 App 都應該能夠在本地獲取、緩存并在合適的時機更新 App 中的用戶信息。所以,融云不維護和管理用戶基本信息(用戶ID、昵稱、頭像)的獲取、緩存、變更和同步。意思是用戶的頭像用戶的名稱,全都是保存在自己的服務器,融云只負責管理聊天內容有關的業(yè)務,所以現在就有一個問題,如何通過自己的服務器的用戶名和頭像對應到融云管理的相應的聊天信息呢,我們在后面用到時候在說。

三:開始集成聊天界面
下面我們開始集成聊天界面,融云為我們也準備了一個聊天界面RCConversationViewController,如果項目沒有特殊要求,這個聊天界面也能滿足我們很項目的需求,當然,融云也是給我們提供進行頁面的修改的接口的。
首先新建一個類繼承自RCConversationViewController。

image.png

創(chuàng)建好了之后我們需要在繼承自RCConversationListViewController的控制器中重寫一個方法:- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
conversationModel:(RCConversationModel *)model
atIndexPath:(NSIndexPath *)indexPath方法,來點擊會話列表進入相應的聊天界面,再次貼上繼承自RCConversationListViewController的會話列表界面.m實現代碼

#import "MyselfListViewController.h"
#import "MyselfConversationController.h"

@interface MyselfListViewController ()

@end

@implementation MyselfListViewController

- (void)viewDidLoad {
    
    [super viewDidLoad];
    
    //設置需要顯示哪些類型的會話,由于樓主只需要單聊功能,所以只設置ConversationType_PRIVATE
    [self setDisplayConversationTypes:@[@(ConversationType_PRIVATE),
                                        ]];
    
}

//重寫RCConversationListViewController的onSelectedTableRow事件
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
         conversationModel:(RCConversationModel *)model
               atIndexPath:(NSIndexPath *)indexPath {
    MyselfConversationController *conversationVC = [[MyselfConversationController alloc]init];

//聊天界面的聊天類型
    conversationVC.conversationType = model.conversationType;
//需要打開和誰聊天的會話界面,和誰聊天其實是通過TargetId來聯系的。
    conversationVC.targetId = model.targetId;
    conversationVC.title = @"想顯示的會話標題";
    [self presentViewController:conversationVC animated:YES completion:NULL];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

這樣再次運行項目,點擊屏幕的一個會話列表,查看聊天界面效果。

image.png

我一直用的[self presentViewController:conversationVC animated:YES completion:NULL];來打開新的頁面,所以沒有導航欄,也就沒有標題欄。

到了這里大致的融云就已經完成。是不是很簡單呢。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容