iOS 環信集成項目應用

環信iOS端3.0版本集成記錄--聊天界面篇

 環信離線推送證書。。。

 

1,環信處在後臺的時候,消息的接收與推送css

離線發推送

配置屬性c++

EMCallOptions *options = [[EMClient sharedClient].callManager getCallOptions];
//當對方不在線時,是否給對方發送離線消息和推送,並等待對方迴應 options.isSendPushIfOffline = NO; [[EMClient sharedClient].callManager setCallOptions:options]; 

監聽回調web

[[EMClient sharedClient].callManager setBuilderDelegate:self]; 

處理回調sql

- (void)callRemoteOffline:(NSString *)aRemoteName { NSString *text = [[EMClient sharedClient].callManager getCallOptions].offlineMessageText; EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:text]; NSString *fromStr = [EMClient sharedClient].currentUsername; EMMessage *message = [[EMMessage alloc] initWithConversationID:aRemoteName from:fromStr to:aRemoteName body:body ext:@{@"em_apns_ext":@{@"em_push_title":text}}]; message.chatType = EMChatTypeChat; [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil]; }

 

 

前提:

觀看視屏,視頻地址以下: 
環信SDK集成:http://www.imgeek.org/video/40 
環信EaseUI集成:http://www.imgeek.org/video/39服務器

具體集成過程:

一: 添加依賴庫

  1. CoreMedia.framework
  2. AudioToolbox.framework
  3. AVFoundation.framework
  4. 4.MobileCoreServices.framework
  5. ImageIO.framework
  6. libc++.tbd
  7. libz,tbd
  8. libsqlite3.tbd
  9. libstdc++.6.0.9.tbd
  10. Foundation.framework
  11. libiconv.tbd (Xcode7以上)

最終效果如圖: 
這裏寫圖片描述app

二:一些設置

1.修改info.plist文件,適配iOS9以上系統,在info.plist中添加框架

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

2.修改info.plist文件,適配iOS10.0,在info.plist中添加異步

爲了調用相冊,地理位置,話筒,照相機,通信錄async

<key>NSPhotoLibraryUsageDescription</key> <string>中華人須要使用相冊服務獲取照片</string> <key>NSCameraUsageDescription</key> <string>中華人須要使用照相機服務進行拍照獲取照片</string> <key>NSContactsUsageDescription</key> <string>中華人須要使用通信錄服務進行好友邀請</string> <key>NSMicrophoneUsageDescription</key> <string>中華人須要使用話筒進行吐槽反饋信息</string> <key>NSLocationUsageDescription</key> <string>中華人須要使用定位服務來發送位置信息</string>

3.Bulid Setting 設置bitcode 爲NO,如圖: ide

這裏寫圖片描述
4.新建pch文件,如圖: 
這裏寫圖片描述
進行設置,如圖: 
這裏寫圖片描述

三:Appdelegate

#import "AppDelegate.h" #import "ChatViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // SDK的初始化 /** * EMOptions類是SDK的配置信息 * 能夠加入推送證書的名稱 */ EMOptions *options = [EMOptions optionsWithAppkey:@"luoxiaoyong#mingxin"]; options.apnsCertName = @"Push_dev"; // 初始化SDK EMError *error = [[EMClient sharedClient] initializeSDKWithOptions:options]; if (!error) { NSLog(@"初始化成功"); } // 登陸 error = [[EMClient sharedClient] loginWithUsername:@"xrdaly001" password:@"123456"]; if (!error) { NSLog(@"登陸成功"); } else { NSLog(@"登陸失敗"); } self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; ChatViewController *vc = [[ChatViewController alloc] initWithConversationChatter:@"xrdaly002" conversationType:EMConversationTypeChat]; UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc]; self.window.rootViewController = nav; [self.window makeKeyAndVisible]; return YES; }

四:添加鍵盤表情(說明)

在EaseMessageViewController.m的viewDidLoad方法結尾處加上

EaseEmotionManager * manager = [[EaseEmotionManager alloc] initWithType:EMEmotionDefault emotionRow:3 emotionCol:7 emotions:[EaseEmoji allEmoji]]; [self.faceView setEmotionManagers:@[manager]];

五:國際化文件亂碼問題

下載demo,直接把demo中的國際化文件拷貝到如今項目中,ok

 

1、解析環信

 對環信的使用:

1.聊天列表 信息來往判斷 (根據最後一次聊天記錄,是否有訂單記錄,訂單號、信息)

2.聊天界面 計時關閉會話功能,用戶能夠手動關閉會話,病例查看,不一樣醫務專家 看到簡歷目錄不一樣;處於後臺消息的推送;消息的點擊事件,透傳,消息擴展;

3.病例是由訂單記錄中的身份證得到的,在接收語音視頻時,得到身份證1uid+2uid 本地保存;發起的時候 經過通知得到

2.0—3.0變化

3.0 中的核心類爲 EMClient 類,經過 EMClient 類能夠獲取到 chatManager、groupManager、contactManager、roomManager對象。原來 2.0 版本的 SDK 不少方法提供了同步、異步回調、異步(block)三種方法,3.0 版只提供同步方法(async開頭的方法爲異步方法)。

代碼升級替換文檔、環信 SDK 3.0 升級文檔、使用升級替換腳本

 

1.若是須要離線推送,製做推送證書

2.環信主要框架 :SDK_Core:是核心的消息同步實現,完成於服務器之間的信息交換;SDK:基於核心協議實現完整的IM功能,實現了不一樣類型的消息的收發、會話管理、羣組、好友、聊天室等

EaseUI:是IM相關的UI控件,能夠快速的集成環信功能

3.SDK 採用模塊化設計,每一模塊的功能相對獨立和完善,用戶能夠根據本身的需求選擇使用下面的模塊:

EMClient: 是 SDK 的入口,主要完成登陸、退出、鏈接管理等功能。也是獲取其餘模塊的入口。

EMChatManager: 管理消息的收發,完成會話管理等功能。

EMContactManager: 負責好友的添加刪除,黑名單的管理。

EMGroupManager: 負責羣組的管理,建立、刪除羣組,管理羣組成員等功能。

EMChatroomManager: 負責聊天室的管理。

注意:若是您是從 SDK2.x 升級到 3.0,能夠參考環信 SDK 2.x到3.0升級文檔。

 

4.第三方庫介紹

EaseUI 中用到的第三方庫:

MWPhotoBrowser: 圖片處理庫,瀏覽顯示

MJRefresh: 用於頁面刷新

MBProgressHUD: 用於提示加載刷新

libopencore-amrnb.a,libopencore-amrwb.a: 用於 amr 與 wav 之間的轉換

Demo 中用到的第三方庫:

Parse.framework、Bolts.framework: Demo 中的用戶信息存儲在 Parse,這兩個庫是 Parse 所須要的庫,開發者若是沒用 Parse 存儲,不要複製到本身項目中

libMobClickLibrary.a: 友盟相關的庫,用於環信 Demo 基本信息的統計,開發者不用或者已有別的版本的庫不要複製到本身項目

 

5.集成動態庫上傳AppStore

因爲 iOS 編譯的特殊性,爲了方便開發者使用,咱們將 i386 x86_64 armv7 arm64 幾個平臺都合併到了一塊兒,因此使用動態庫上傳appstore時須要將i386 x86_64兩個平臺刪除後,才能正常提交審覈

在SDK當前路徑下執行如下命令刪除i386 x86_64兩個平臺

實時音視頻版本Hyphenate.framework

 

lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7

lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64

lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate

mv Hyphenate Hyphenate.framework/

不包含實時音視頻版本HyphenateLite.framework

 

lipo HyphenateLite.framework/HyphenateLite -thin armv7 -output HyphenateLite_armv7

lipo HyphenateLite.framework/HyphenateLite -thin arm64 -output HyphenateLite_arm64

lipo -create HyphenateLite_armv7 HyphenateLite_arm64 -output HyphenateLite

mv HyphenateLite HyphenateLite.framework/

 

6.SDK 同步/異步方法區分

SDK 中,大部分接口都提供了同步和異步方法(注:同步方法會阻塞主線程,須要用戶本身建立異步線程執行;帶有 block 的方法爲異步方法。)

 

7.自動登陸在如下幾種狀況下會被取消:

 

用戶調用了 SDK 的登出動做;

用戶在別的設備上更改了密碼,致使此設備上自動登陸失敗;

用戶的帳號被從服務器端刪除;

用戶從另外一個設備登陸,把當前設備上登陸的用戶踢出。

因此,在您調用登陸方法前,應該先判斷是否設置了自動登陸,若是設置了,則不須要您再調用。

 

8.初始化單聊、羣聊、聊天室頁面:文字、圖片、語音、視頻、位置

EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"要發送的消息"];

NSString *from = [[EMClient sharedClient] currentUsername];

 

//生成Message

EMMessage *message = [[EMMessage alloc] initWithConversationID:@"6001" from:from to:@"6001" body:body ext:messageExt];

message.chatType = EMChatTypeChat;// 設置爲單聊消息

//message.chatType = EMChatTypeGroupChat;// 設置爲羣聊消息

//message.chatType = EMChatTypeChatRoom;// 設置爲聊天室消息

 

構造透傳消息

SDK 提供的一種特殊類型的消息,即 CMD,不會存 db,也不會走 APNS 推送,相似一種指令型的消息。好比您的服務器要通知客戶端作某些操做,您能夠服務器和客戶端提早約定好某個字段,當客戶端收到約定好的字段時,執行某種特殊操做。

 

EMCmdMessageBody *body = [[EMCmdMessageBody alloc] initWithAction:action];

NSString *from = [[EMClient sharedClient] currentUsername];

 

// 生成message

EMMessage *message = [[EMMessage alloc] initWithConversationID:@"6001" from:from to:@"6001" body:body ext:messageExt];

message.chatType = EMChatTypeChat;// 設置爲單聊消息

//message.chatType = EMChatTypeGroupChat;// 設置爲羣聊消息

//message.chatType = EMChatTypeChatRoom;// 設置爲聊天室消息

 

構造擴展消息

當 SDK 提供的消息類型不知足需求時,開發者能夠經過擴展自 SDK 提供的文本、語音、圖片、位置等消息類型,從而生成本身須要的消息類型。

這裏是擴展自文本消息,若是這個自定義的消息須要用到語音或者圖片等,能夠擴展自語音、圖片消息,亦或是位置消息。

// 以單聊消息舉例

EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"要發送的消息"];

NSString *from = [[EMClient sharedClient] currentUsername];

 

//生成Message

EMMessage *message = [[EMMessage alloc] initWithConversationID:@"6001" from:from to:@"6001" body:body ext:messageExt];

message.chatType = EMChatTypeChat;// 設置爲單聊消息

//message.chatType = EMChatTypeGroupChat;// 設置爲羣聊消息

//message.chatType = EMChatTypeChatRoom;// 設置爲聊天室消息

message.ext = @{@"key":@"value"}; // 擴展消息部分

相關文章
相關標籤/搜索