最近項目需求,然后就要接im景埃,因為項目是swfit的媒至,然后很多坑都要自己踩,自己填谷徙,然后就遇到很多坑拒啰,然后看了好幾家的im,就先討論一下im的坑完慧,有騰訊谋旦,阿里,融云,然后順便看了leanclound的文檔册着,
先說一下im的大致流程拴孤,一般都是初始化sdk,然后注冊指蚜,登錄乞巧,監(jiān)聽會話,收發(fā)消息摊鸡,退出登錄
然后這我只接了前三家绽媒,這里面最難接的是騰訊的,文檔也看的頭疼免猾,最好接的是融云是辕,就幾句代碼就搞定了,阿里百川的文檔感覺就是純粹是為了寫文檔而寫的文檔猎提,感覺就只有個簡化版的文檔获三,
現(xiàn)在就先說說騰訊,騰訊真的是接的頭大锨苏,坑很多疙教,而且官方的demo也寫的很亂,他們的框架有登錄注冊的一體化界面伞租,但是沒有會話列表和會話界面贞谓,所以如果要寫的話就要自己監(jiān)聽會話,解析會話列表葵诈,解析會話裸弦,也有可能是因為我們項目是swift的,所以也用不了他的demo上的代碼作喘。oc的項目可能會好接一點理疙,但是對于swift的來說,真的是很難接的泞坦,
然后我接的第二個是融云的窖贤,很方便,對于swift的來說贰锁,下面是我寫的融云的demo視圖控制器里面的代碼
import UIKit
var strMsg:String = ""
class ViewController: RCConversationListViewController{
override func viewDidLoad() {
super.viewDidLoad()
initSdk()
loginRCIM()
self.setDisplayConversationTypes([RCConversationType.ConversationType_PRIVATE.rawValue, RCConversationType.ConversationType_GROUP.rawValue,RCConversationType.ConversationType_DISCUSSION.rawValue])
// Do any additional setup after loading the view, typically from a nib.
}
func initSdk(){
RCIM.shared().initWithAppKey("你自己的appkey")
}
func loginRCIM(){
//v0tbKdy6d56FLTz70/NuUv83QwmF6X8F1GOlJSqqcbOwmWMGcNoJFZQM4zwOUo4Hb6OachOiHkXSKwII6Z3pxA==
RCIM.shared().connect(withToken: "(這個token是調(diào)用融云的后臺服務(wù)器利用userid主之,username,用戶頭像李根,生成的token槽奕,如果是自己用的話,可以調(diào)自己的后臺訪問融云房轿,然后返回到前端)", success: { (userId) in
print("\(userId!)")
}, error: { (err_code) in
print("\(err_code)")
}) {
print("token wrong")
}
}
override func onSelectedTableRow(_ conversationModelType: RCConversationModelType, conversationModel model: RCConversationModel!, at indexPath: IndexPath!) {
let conversationVC = RCConversationViewController()
conversationVC.conversationType = model.conversationType
conversationVC.targetId = model.targetId
conversationVC.title = "message"
self.navigationController?.pushViewController(conversationVC, animated: true)
}
}
這里就要說生成會話列表之后的點擊事件粤攒,因為會話列表的父類都是tableview所森,然后騰訊和融云都是直接把點擊的那個didselectrowat這個方法暴露或者可以重寫的,你要添加點擊事件或者生成會話界面就直接在這里面實現(xiàn)就可以了夯接,融云的坑還好吧焕济,我用swift接的時候,沒咋發(fā)現(xiàn)有什么坑盔几,
然后要說最好一個阿里百川的了晴弃,我接的時候有兩個問題,一個是會話列表不出來逊拍,一個是點擊了之后沒反應(yīng)上鞠,阿里百川的接入方式和融云,騰訊都不一樣芯丧,然后和leanclound是差不多的芍阎,然后阿里的那個技術(shù)論壇基本是沒人的,然后后面老大吧我拉了一個釘釘?shù)娜汉退麄兡沁叺娜私涣饔Ш悖蝗f項目是swift的谴咸,那邊找了個技術(shù)人員是不懂swift的,然后問了一些問題基本都沒解決的骗露,后來還是在靠的我自己解決的岭佳,先說會話列表的問題,最開始的時候萧锉,我的會話界面是用的viewcontroller自己的導(dǎo)航控制區(qū)push的珊随,然后沒東西出來,也不知道什么問題驹暑,然后后面我用present方式,然后就出來了辨赐。第二個問題是點擊的优俘,就這個東西卡了我2天吧,周五到周一掀序,周末沒想過這些問題帆焕,阿里的tableview的點擊事件沒有暴露出來,然后我也不能重寫不恭,是通過block的方式實現(xiàn)的叶雹,我這邊要實現(xiàn)點擊就只能給這個block賦值,我之前賦值的時候是塊不對换吧,swift的閉包和oc有區(qū)別折晦,swift自己能識別類型,在傳值的時候就不用定義類型沾瓦,然后里面塊寫完之后也不用as满着!轉(zhuǎn)成他的YWConversationsListDidSelectItemBlock谦炒,我之前是寫了轉(zhuǎn)換,所以里面的代碼跑不了风喇,然后這是一個宁改,還有一個坑是,阿里的界面都是基于uinavigationcontroller進(jìn)行跳轉(zhuǎn)的魂莫,我之前是這么跳轉(zhuǎn)的还蹲,然后就開始崩潰,說我的一個array里面的值是nil耙考,我在想哪里有array谜喊?
SPKitExample.sharedInstance().exampleOpenConversationViewController(with: aConversation, from: nil)
然后我后面看控制器的崩潰代碼里面說了一個導(dǎo)航欄控制器的那個array里面沒東西,所以跳轉(zhuǎn)的時候他就找不到東西琳骡,后面我就機(jī)制的自己定義了一個導(dǎo)航欄控制器锅论,然后在那個控制器里面添加會話列表界面,然后跳轉(zhuǎn)的時候后面的from就寫成self了楣号,然后就解決了困惑我兩天的東西最易,基本就這些吧,demo寫的太粗糙就不上傳了炫狱,有什么問題的話聯(lián)系我就可以了藻懒,我們一起填坑