LeanCloud實(shí)時(shí)通信模塊iOS端快速接入指南(一)

應(yīng)該是最后一次更新

LeanCloud已針對(duì)UI推出了ChatKit庫,原來的LeanChatLib已不再更新
LeanCloud ChatKit文檔地址
建議各位同學(xué)移步官網(wǎng)使用最新的UI框架

更新

更新了最新版的LeanCloud的SDK
靜態(tài)庫的體積確實(shí)小了很多,但是有一些LeanCloud改了一小部分方法的名稱
如果按照我的攻略發(fā)現(xiàn)代碼有問題的,請(qǐng)把所有的Conv改為Conversation不管這個(gè)Conv是在開頭還是結(jié)尾還是方法名中間

比如老版的是

  [[CDChatManager manager] fetchConvWithOtherId:_textField.text callback:^(AVIMConversation *conversation, NSError *error) {
    }];

現(xiàn)在就是

[[CDChatManager manager]fetchConversationWithOtherId:@"78" callback:^(AVIMConversation *conversation, NSError *error) {
    }];

其他方法同上,如有其它發(fā)現(xiàn)我都會(huì)寫在這里

更新

最新版的LeanCloud已經(jīng)解決了靜態(tài)庫基礎(chǔ)模塊SDK過大問題,沒有更新的可以及時(shí)更新

LeanCloud 3.2.4.1版本

前言

現(xiàn)在市面上的APP,為了通過社交增加用戶粘性,實(shí)時(shí)通訊功能幾乎成了APP標(biāo)配。對(duì)于絕大多數(shù)開發(fā)者來說,自己從零開始難度太大,大家更多地是去選擇第三方IM服務(wù)商。
國(guó)內(nèi)用得比較多的IM服務(wù)商也就那么幾個(gè)。X云,X信見得最多,除了這個(gè)之外很多人還提到了leanCloud。leanCloud其實(shí)也是一個(gè)很好地選擇,但是比較坑爹的是網(wǎng)上關(guān)于他的攻略真的少之又少,官方文檔業(yè)務(wù)邏輯講的非常清楚,但是真做起來還是無從下手。所以我自己寫一篇接入指南,希望能拋磚引玉,并且?guī)椭胧褂胠eanCloud做IOS即時(shí)通訊的同學(xué)。


正文

注冊(cè)leanCloud

以上幾部是所有第三方SDK必要的步驟,在這里就不在贅述

接入LeanCloud

手動(dòng)接入

強(qiáng)烈建議使用cocoapods自動(dòng)導(dǎo)入,方便快捷。還不會(huì)cocoapods的同學(xué)你真的已經(jīng)Out了。這里提供一篇唐巧的技術(shù)博客供參考。[用CocoaPods做iOS程序的依賴管理 -- 唐巧]

如果你還是選擇手動(dòng)導(dǎo)入的話,請(qǐng)移步官方文檔[leanCloud的導(dǎo)入]

自動(dòng)接入

首先在你的podfile中加入下面幾句話

pod 'AVOSCloud' pod 'AVOSCloudIM'

如果使用動(dòng)態(tài)庫

use_frameworks! pod 'AVOSCloudDynamic' pod 'AVOSCloudIMDynamic'

然后在項(xiàng)目根目錄執(zhí)行 pod install 命令,就能將 LeanCloud SDK for iOS 集成到你的項(xiàng)目中。

  • 注意:使用動(dòng)態(tài)庫的條件是你的項(xiàng)目只支持iOS 8 以上版本。而且千萬不要忘了那句use_frameworks!

  • 這里順便提一句,如果使用靜態(tài)庫,你可能會(huì)發(fā)現(xiàn)SDK體積非常大,大概150MB左右,但是不必?fù)?dān)心,在你打包的時(shí)候Xcode會(huì)自動(dòng)strip掉不必要的代碼,因此實(shí)際安裝包體積不會(huì)變的很大。而且這里建議選取靜態(tài)庫,原因第二步會(huì)加以說明。

接入LeanChatLib

看到這里肯定有同學(xué)會(huì)問,臥槽?這是什么鬼?
在leanCloud的官方文檔上有這么一段

Paste_Image.png

這兩個(gè)Demo是leanCloud開源在github上的,大家有時(shí)間可以下載下來研究,常見的社交功能這里都實(shí)現(xiàn)了。

這里再多嘴一句,如果只是用leanCloud做社交,那么看LeanMssage對(duì)你比較有用。因?yàn)長(zhǎng)eanChat從前臺(tái)到后臺(tái)都是完全基于LeanCloud開發(fā)的,包括了LeanCloud的即時(shí)通訊,數(shù)據(jù)存儲(chǔ),關(guān)系管理和權(quán)限管理和關(guān)系管理等一系列模塊。除非你打算完全依靠LeanCloud做一個(gè)APP出來(其實(shí)完全可以),否則借鑒意義不是很大。

  • LeanChat已在App Store上線,搜索LeanChat就可以下載

好了,說了這么多廢話,還沒回答問題。LeanChatLib其實(shí)就是LeanCloud自己寫的一套聊天用的UI,而LeanChat 和 LeanMssage用的都是它。使用這套東西可以給我們省下很多力氣。

這里我們依然使用cocoapods導(dǎo)入
在podfile中添加

pod 'LeanChatLib'

然后在項(xiàng)目根目錄執(zhí)行 pod install 命令,就能將 LeanChatLib 集成到你的項(xiàng)目中。

  • 在上一步使用cocoapods導(dǎo)入LeanCloud的時(shí)候,如果你使用了靜態(tài)庫,導(dǎo)入完LeanChatLib后再編譯會(huì)報(bào)錯(cuò),錯(cuò)誤原因應(yīng)該就是因?yàn)長(zhǎng)eanChatLib不支持動(dòng)態(tài)庫,所以在如果你使用LeanChatLib來搭建UI,那么SDK最好選擇靜態(tài)庫

實(shí)現(xiàn)簡(jiǎn)單的聊天界面

setp 1

使用Xcode創(chuàng)建一個(gè)新項(xiàng)目,取個(gè)你喜歡的名字。

Paste_Image.png
step 2

使用cocoapods導(dǎo)入相應(yīng)的三方庫
Podfile的內(nèi)容以及導(dǎo)入完成后的目錄如下


Paste_Image.png
step3

項(xiàng)目中注冊(cè)LeanCloud
在AppDelegate中導(dǎo)入頭文件
#import <AVOSCloud/AVOSCloud.h>
#import <AVOSCloudIM/AVOSCloudIM.h>
添加如下代碼
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. .... [AVOSCloud setApplicationId:@"你的App Id" clientKey:@"你的App Key"]; .... return YES; }
運(yùn)行項(xiàng)目,稍等幾秒,如果出現(xiàn)下列信息,說明設(shè)置成功

Paste_Image.png
step 4

創(chuàng)建一個(gè)ViewControler繼承于CDChatRoomVC

Paste_Image.png

在ViewController.m中引入頭文件
#import <CDChatManager.h>
#import "ChatViewController.h"

在main.storyboard中為它添加一個(gè)按鈕并添加點(diǎn)擊事件

Paste_Image.png

事件中這么寫
[[CDChatManager manager]openWithClientId:@"Tom" callback:^(BOOL succeeded, NSError *error) { [[CDChatManager manager]fetchConvWithOtherId:@"Jerry" callback:^(AVIMConversation *conversation, NSError *error) { ChatViewController * chat = [[ChatViewController alloc]initWithConv:conversation]; [self presentViewController:chat animated:YES completion:nil] ;}] ;}];
運(yùn)行項(xiàng)目,點(diǎn)擊開始聊天。就能打開Tom和Jerry的會(huì)話了。

Paste_Image.png

這里解釋一下原理
[CDChatManager manager] openWithClientId:@"Tom" callback:^(BOOL succeeded, NSError *error) {}];
*獲取聊天管理類的單例并根據(jù)client id打開一個(gè)聊天客戶端

這個(gè)client id是隨意指定的,這里我們用的是Tom,你也可以用jack ,rose或者數(shù)字等等。打開客戶端你可以理解為登陸了Tom的QQ。

[[CDChatManager manager] fetchConvWithOtherId:@"Jerry" callback:^(AVIMConversation *conversation, NSError *error) {}];
*根據(jù)目標(biāo)id獲取一個(gè)聊天會(huì)話。

使用這個(gè)方法的前提是你已經(jīng)有了一個(gè)已知id,換句話說就是你已經(jīng)登陸了一個(gè)client。LeanCloud的聊天原理就是根據(jù)id創(chuàng)建會(huì)話,你換個(gè)id就回進(jìn)入新的會(huì)話,你換回來就回回到原來的會(huì)話,聊天記錄也會(huì)保留。而且最贊的是這一系列方法都是帶了回調(diào)Block的,使用起來十分方便,且使用形式非常多。

ChatViewController * chat = [[ChatViewController alloc]initWithConv:conversation]; [self presentViewController:chat animated:YES completion:nil]
*創(chuàng)建一個(gè)聊天用的視圖控制器并跳轉(zhuǎn)過去

我們剛才已經(jīng)讓ChatViewController繼承了CDChatRoomVC,所以它也有了帶有會(huì)話參數(shù)的構(gòu)造方法。
我們將這兩句寫在獲取會(huì)話的回調(diào)方法里,將回調(diào)方法中的conversation參數(shù)穿進(jìn)去,然后跳轉(zhuǎn)到這個(gè)視圖控制器。這樣就完成了一次進(jìn)入聊天的操作。
這里解釋一下conversation,他是AVIMConversation類的一個(gè)對(duì)象(這TM是廢話)AVIMConversation是LeanCloud的實(shí)時(shí)通訊的核心類之一,代表一個(gè)會(huì)話,里面包含了會(huì)話的標(biāo)題,成員列表,未讀消息數(shù)等很多實(shí)用的屬性。之后我們會(huì)經(jīng)常用到它。


結(jié)束語

到此為止,我們已經(jīng)實(shí)現(xiàn)了最簡(jiǎn)單的聊天。下一節(jié),我們來實(shí)現(xiàn)真正的兩個(gè)人之間的聊天,以及會(huì)話和用戶屬性的自定義。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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