環信


即時通訊:
  • 兩人或多人實時的傳遞文字信息,文件、語音與視頻。

實現即時通訊(IM)的做法:
  • XMPP
    • 準備:客戶端需要用到xmppframework,服務器需要用到openfire
  • 環信
    • 準備:不需要自己搭建服務器。只需注冊成為開發者,創建App獲取key,下載SDK
  • 融云
  • 網易云信
  • 親加

XMPP
  • XMPP:The Extensible Messaging and Presence Protocol(可擴展通訊和表示協議)
  • XMPP是一種基于XML的即時通訊協議,包括登錄,退出,獲取好友,發送消息等等的XML數據傳輸協議
  • XMPP是一個典型的C/S架構,基本的網絡形式是客戶端通過TCP/IP連接到服務器,通過Socket建立連接,然后在之上傳輸XML流
  • XMPP是一種類似于HTTP協議的一種數據傳輸協議,其過程就如同“解包裝--〉包裝”的過程。只需要理解其接收的類型及返回的類型,便可以很好的利用XMPP來進行數據通訊
環信
  • 環信是一個第三平臺,提供即時通信(IM –Instant Messaging )的服務

XMPP和環信比較
  • XMPP是一種協議,而環信是在XMPP的基礎上進行開發的
  • 環信不用自己搭建服務器,省了搭建的成本,節約了開發的時間

即時通訊使用場景:
  • 微信、QQ
  • 電商中賣家和買家的溝通,買家與客服的溝通,賣家與客服的溝通。

(一)集成環信

1.注冊登錄環信

登錄官網


Snip20160902_259.png

注冊環信


Snip20160902_260.png

登錄環信


Snip20160902_261.png

2.創建應用

Snip20160902_262.png
Snip20160902_264.png
Snip20160902_265.png

3.下載SDK

Snip20160902_268.png
Snip20160902_269.png

4.查看環信開發文檔

Snip20160902_270.png
Snip20160902_272.png
Snip20160902_273.png
Snip20160902_274.png

5.創建xcode項目,劃分文件夾

Snip20160902_276.png

6.將SDK導入Xcode

Snip20160902_277.png

7.添加依賴庫

Snip20160902_278.png

8.添加-ObjC

Snip20160902_289.png

-ObjC如果寫錯了,運行程序將會提示如下錯誤

Snip20160902_284.png

9.編譯Xcode,無錯誤,進行下一步操作

Snip20160902_280.png

10.集成SDK的基礎功能

Snip20160902_282.png

11.在AppDelegate中添加以下方法

#import”EaseMob.h

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 //registerSDKWithAppKey: 注冊的AppKey,詳細見下面注釋。
 //apnsCertName: 推送證書名(不需要加后綴),詳細見下面注釋。
    [[EaseMob sharedInstance] registerSDKWithAppKey:@"douser#istore" apnsCertName:@"istore_dev"];
    [[EaseMob sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
    return YES;
}
 
// APP進入后臺
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[EaseMob sharedInstance] applicationDidEnterBackground:application];
}
 
// APP將要從后臺返回
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [[EaseMob sharedInstance] applicationWillEnterForeground:application];
}
 
// 申請處理時間
- (void)applicationWillTerminate:(UIApplication *)application
{
    [[EaseMob sharedInstance] applicationWillTerminate:application];
}

12.實現注冊

[[EaseMob sharedInstance].chatManager asyncRegisterNewAccount:@"8001" password:@"111111" withCompletion:^(NSString *username, NSString *password, EMError *error) {
    if (!error) {
        NSLog(@"注冊成功");
    }
} onQueue:nil];

運行xcode


Snip20160902_292.png

點擊IM用戶


Snip20160902_293.png

出現用戶名為8001的字段,但是未登錄


Snip20160902_294.png

13.實現登錄

[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@"8001" password:@"111111" completion:^(NSDictionary *loginInfo, EMError *error) {
    if (!error && loginInfo) {
        NSLog(@"登錄成功");
    }
} onQueue:nil];

運行xcode


Snip20160902_295.png

登錄成功,用戶名由灰色變為綠色


Snip20160902_297.png

(二)利用環信實現微信功能

  • 強烈注意1:測試階段時,在兩個xcode之間使用的應用的appkey一定要一致,這樣才能進行測試 添加好友,刪除好友,以及多終端使用同意賬號擠掉其中一個賬號。因為如果appkey不一樣,那就代表了這是兩款應用,例如一款是微信,一款是QQ,你用微信添加 QQ應用的好友,QQ好友能看到才怪呢。
  • 強烈注意2:
Snip20160903_298.png
  • 強烈注意3:隱藏系統底部的Bar。目的:這樣你就可以創建控件來自定義底部的內容
101.84.gif
  • 強烈注意4.點擊cell,push到聊天界面的時候,底部的View為什么會做下移的動畫?
101.86.gif

原因:細節問題

Snip20160903_5.png

解決辦法:將底部的約束 由之前的相對于底部tabbar改為相對于相對于屏幕底部

Snip20160903_5.png

效果


101.87.gif
  • 強烈注意5:一定不要在設置約束的時候,提前給UIImageView添加圖片,否則達到的效果不是你想要的效果

例如:


101.95.gif

解決辦法:

101.96.gif

  • 強烈注意6:
    1.綠色背景圖片不僅沒有跟隨UILabel中的文字的改變而改變(約束問題)
    2.而且綠色背景圖片還擋住了UILabel(解決辦法:綠色背景和UILabel在storyboard中的位置換過來,再換回去)
    3.綠色背景圖片沒有進行拉伸操作
    4.如果下面的做法遇到了問題,不要在UIImageView上添加圖片,最后一步再添加圖片。


    Snip20160903_9.png
  • 對UILabel只需要設置頂部和右部約束


    101.91.gif
  • 設置綠色背景圖片和UILabel上下左右間距相等


    101.92.gif
  • 拉伸綠色背景圖片

Snip20160904_15.png
  • 讓綠色背景圖片的上下左右各多出UILabel一些像素


    101.93.gif
  • 運行xcode,可以看到UILabel中的文字雖然設置了自動換行也沒效果


    101.94.gif
  • 修改面板中的屬性即可解決UILabel中的文字沒有自動換行的bug

步驟1:


Snip20160904_20.png

步驟2:


101.98.gif
  • 優化綠色背景圖片和UILabel中文字的間距
Snip20160904_16.png

  • 強烈注意7:計算每個cell的高度
Snip20160904_19.png
  • 強烈注意8:利用屬性傳值,實現 點擊cell就顯示和哪一個用戶聊天
101.99.gif

  • 強烈注意9:cell上的數據錯亂問題是由于cell的重用機制造成的
101.100.gif

  • 強烈注意10:


    Snip20160905_22.png

    解決辦法

Snip20160905_23.png

效果展示

  • 注冊和登錄
101.101.gif
  • 拒絕、同意添加好友
101.102.gif
  • 網絡斷開,自動重連


    101.103.gif
  • 退出賬號,多終端登錄一方賬號自動被擠掉
101.104.gif
  • 發送文本信息,語音信息,圖片信息
101.105.gif
  • 未讀消息
101.106.gif

[LS](https://pan.baidu.com/s/1eSukwOa 密碼 dtnq)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容