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服務器
最終效果如圖: 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文件,如圖:
進行設置,如圖:
#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"}; // 擴展消息部分