iOS環(huán)信2.0,非常簡單

一、準(zhǔn)備工作

1馋没、注冊環(huán)信帳號

注冊一個(gè)環(huán)信賬號之后呀潭,我們用注冊的帳號登陸钉迷。然后創(chuàng)建一個(gè)應(yīng)用,會得到一個(gè)對應(yīng)的AppKey,這個(gè)AppKey在初始化環(huán)信SDK的時(shí)候需要用到钠署。(這個(gè)去環(huán)信官網(wǎng)自己弄環(huán)信)

2糠聪、制作推送證書

如果需要做離線推送的功能,需要制作一個(gè)推送證書谐鼎。如果只是需要實(shí)現(xiàn)單聊舰蟆、群聊等功能,可以跳過此步驟狸棍。個(gè)人建議剛開始接觸環(huán)信的開發(fā)者可以忽略此步驟身害。制作證書

3、下載環(huán)信SDK

環(huán)信SDK.下的是2.0

二草戈、集成環(huán)信的SDK

1塌鸯、把環(huán)信SDK添加到工程中

從環(huán)信官網(wǎng)下載下來的是一個(gè)壓縮包,解壓之后猾瘸,把我們需要的環(huán)信SDK界赔,即EaseMobSDK這個(gè)文件夾丢习,整個(gè)的拖入到我們的工程中牵触。如下圖:

在lib文件夾下面有兩個(gè)靜態(tài)庫,只需要用到一個(gè)咐低,根據(jù)你的需求選擇揽思。

libEaseMobClientSDKLite.a不包含實(shí)時(shí)語音功能,libEaseMobClientSDK.a包含所有功能见擦。

2钉汗、添加對應(yīng)的依賴庫

向Build Phases → Link Binary With Libraries 中添加依賴庫

1、MobileCoreServices.framework

2鲤屡、CFNetwork.frame

3损痰、libsqlite3.tbd

4、libstdc++.6.0.9.tbd

5酒来、libz.tbd

6卢未、libiconv.tbd

7、libresolv.tbd

8、libxml2.tbd

溫馨提示:注意不要添加錯(cuò)了辽社,也不能添加少了伟墙,添加完畢之后,不要著急滴铅,先編譯一下戳葵。編譯成功,則說明沒有問題汉匙;如果編譯報(bào)錯(cuò)拱烁,則仔細(xì)對照上面例舉的靜態(tài)庫進(jìn)行添加,直到編譯成功噩翠,再進(jìn)行下一步邻梆。

3、配置工程

3.1 不包含語音靜態(tài)庫的配置方法

(1) 刪掉libEaseMobClientSDK.a绎秒,保留libEaseMobClientSDKLite.a浦妄;

(2) 在Build Settings -> Other Linker Flags 添加”fore_load”和”libEaseMobClientSDKLite.a”的相對路徑。

如下圖所示:

3.2 包含語音靜態(tài)庫的配置方法

(1) 刪掉libEaseMobClientSDKLite.a见芹,保留libEaseMobClientSDK.a剂娄;

(2) 在Build Settings -> Other Linker Flags 添加”-ObjC”。

如下圖所示:

4玄呛、驗(yàn)證SDK是否添加成功

在AppDelegate.m文件中添加環(huán)信SDK初始化的方法阅懦,記得添加頭文件”EaseMob.h”。下面提供了我用的測試AppKey徘铝,你可以替換成你自己申請的AppKey耳胎。編譯成功,則說明你已經(jīng)正確集成了環(huán)信的SDK了惕它。

如果編譯有問題怕午,可能存在的原因:

(1) 靜態(tài)庫沒有添加正確;

(2) 靜態(tài)庫工程配置不正確


三淹魄、添加UI文件到你的工程

集成環(huán)信2.0UI文件郁惜,需要添加的文件,如下圖所示:

添加完成之后甲锡,如下圖所示:

四兆蕉、設(shè)置pch文件的路徑

文件添加成功之后,編譯會報(bào)錯(cuò)缤沦,因?yàn)槟銢]有添加pch文件虎韵。自己手動添加pch文件(EaseUI-Prefix.pch),設(shè)置一下pch文件的加載路徑即可缸废。如下圖所示:

在EaseUI-Prefix.pch中添加頭文件”EaseUI.h”包蓝,如下圖:

最后缩多,編譯一下,編譯成功則說明添加集成UI文件成功养晋。

五,搭建基本框架

1衬吆、新建三個(gè)UIViewController

新建三個(gè)ViewController,繼承UIViewController,分別命名為:FirstViewController,SecondViewController绳泉,ThirdViewController逊抡。如下圖所示

2、添加登陸方法

在AppDelegate.m中添加如下代碼:

#define APPKEY? ? ? @"1101#testrongyun"? ? //環(huán)信APPKEY

#define APNSCert? ? @"TestHuanXin"? ? ? ? ? //環(huán)信推送證書名稱

#import "AppDelegate.h"

#import "EaseMob.h"

#import "FirstViewController.h"

#import "SecondViewController.h"

#import "ThirdViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

//初始化環(huán)信SDK

[[EaseMob sharedInstance] registerSDKWithAppKey:APPKEY apnsCertName:APNSCert];

//異步登陸的方法(這里的賬號密碼要去環(huán)信后臺自己注冊)

[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@"賬號" password:@"密碼" completion:^(NSDictionary *loginInfo, EMError *error) {

if (!error && loginInfo) {

NSLog(@"登陸成功");

[self setUpNav];

}

} onQueue:nil];

return YES;

}

- (void)setUpNav

{

FirstViewController *firstVC = [[FirstViewController alloc] init];

SecondViewController *secondVC = [[SecondViewController alloc] init];

ThirdViewController *thirdVC = [[ThirdViewController alloc] init];

firstVC.title = @"會話列表";

secondVC.title = @"通訊錄";

thirdVC.title = @"設(shè)置";

UITabBarController *tabBar = [[UITabBarController alloc] init];

tabBar.viewControllers = @[[[UINavigationController alloc] initWithRootViewController:firstVC],

[[UINavigationController alloc] initWithRootViewController:secondVC],

[[UINavigationController alloc] initWithRootViewController:thirdVC]];

self.window.rootViewController = tabBar;

self.window.backgroundColor = [UIColor whiteColor];

}

@end

編譯一下零酪,看下效果冒嫡。

六、添加與聊天有關(guān)的文件

1四苇、添加GifImage文件2孝凌、添加chat文件

添加完成之后,編譯一下月腋,把報(bào)錯(cuò)的地方全部注釋掉蟀架,有很多地方需要注釋掉,這些地方是因?yàn)橛行┪覀儾恍枰奈募]有添加進(jìn)來榆骚。(自己注釋比較麻煩)

注釋好的GifImage和chat文件片拍,下載后無需注釋無關(guān)代碼,可直接使用注釋好的文件,

八妓肢、實(shí)現(xiàn)單聊

在SecondViewController.m中添加如下代碼:

#import "SecondViewController.h"#import "ChatViewController.h"@interface SecondViewController (){

NSArray *arrSystem;

NSArray *arrFriends;

}

@property (retain, nonatomic)? UITableView *tableView;

@end

@implementation SecondViewController

- (void)viewDidLoad {

[super viewDidLoad];

arrSystem = @[@"申請與通知",@"群聊",@"聊天室"];

_tableView = [[UITableView alloc] initWithFrame:self.view.frame];

_tableView.delegate = self;

_tableView.dataSource = self;

[self.view addSubview:_tableView];

//獲取好友列表

[[EaseMob sharedInstance].chatManager asyncFetchBuddyListWithCompletion:^(NSArray *buddyList, EMError *error) {

if (!error) {

NSLog(@"獲取成功 -- %@",buddyList);

arrFriends = [NSArray arrayWithArray:buddyList];

[_tableView reloadData];

}

} onQueue:nil];

}

#pragma mark - UITableViewDelegate & UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

return 2;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

if (section == 0) {

return arrSystem.count;

} else {

return arrFriends.count;

}

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *identifier = @"CELL";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

if (cell == nil) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];

}

switch (indexPath.section) {

case 0:

{

cell.textLabel.text = [arrSystem objectAtIndex:indexPath.row];

cell.imageView.image = [UIImage imageNamed:@"groupPublicHeader"];

break;

}

case 1:

{

EMBuddy *eMBuddy = [arrFriends objectAtIndex:indexPath.row];

cell.textLabel.text = eMBuddy.username;

cell.imageView.image = [UIImage imageNamed:@"chatListCellHead"];

break;

}

default:

break;

}

return cell;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

EMBuddy *buddy = [arrFriends objectAtIndex:indexPath.row];

ChatViewController *chatVC = [[ChatViewController alloc] initWithConversationChatter:buddy.username conversationType:eConversationTypeChat];

chatVC.title = buddy.username; //好友的名字

chatVC.hidesBottomBarWhenPushed = YES;

[self.navigationController pushViewController:chatVC animated:YES];

}

編譯,效果

真機(jī)運(yùn)行一下捌省,可能會報(bào)錯(cuò),

解決方案:

把這個(gè)值設(shè)置成no
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碉钠,隨后出現(xiàn)的幾起案子纲缓,更是在濱河造成了極大的恐慌,老刑警劉巖喊废,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祝高,死亡現(xiàn)場離奇詭異,居然都是意外死亡操禀,警方通過查閱死者的電腦和手機(jī)褂策,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門横腿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颓屑,“玉大人,你說我怎么就攤上這事耿焊【镜耄” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵罗侯,是天一觀的道長器腋。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么纫塌? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任诊县,我火速辦了婚禮,結(jié)果婚禮上措左,老公的妹妹穿的比我還像新娘依痊。我一直安慰自己,他們只是感情好怎披,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布胸嘁。 她就那樣靜靜地躺著,像睡著了一般凉逛。 火紅的嫁衣襯著肌膚如雪性宏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天状飞,我揣著相機(jī)與錄音毫胜,去河邊找鬼。 笑死诬辈,一個(gè)胖子當(dāng)著我的面吹牛指蚁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播自晰,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼凝化,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酬荞?” 一聲冷哼從身側(cè)響起搓劫,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎混巧,沒想到半個(gè)月后枪向,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咧党,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年秘蛔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傍衡。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡深员,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蛙埂,到底是詐尸還是另有隱情倦畅,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布绣的,位于F島的核電站叠赐,受9級特大地震影響欲账,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芭概,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一赛不、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧罢洲,春花似錦俄删、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸽粉,卻和暖如春斜脂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背触机。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工帚戳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人儡首。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓片任,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔬胯。 傳聞我的和親對象是個(gè)殘疾皇子对供,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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

  • 一、準(zhǔn)備工作 1氛濒、注冊環(huán)信帳號注冊一個(gè)環(huán)信賬號之后产场,我們用注冊的帳號登陸。然后創(chuàng)建一個(gè)應(yīng)用舞竿,會得到一個(gè)對應(yīng)的App...
    niceSYT閱讀 409評論 1 2
  • 第一次集成環(huán)信SDK應(yīng)該是在去年吧京景,那個(gè)時(shí)候還是2.0的版本,沒想到后面做的幾個(gè)APP都用到了環(huán)信的及時(shí)聊天骗奖,用過...
    imGeek閱讀 1,607評論 4 16
  • 上官網(wǎng)注冊賬號 首先來到環(huán)信的官網(wǎng),然后登陸.沒有賬號先注冊一個(gè). 進(jìn)去之后創(chuàng)建應(yīng)用,如圖 創(chuàng)建應(yīng)用界面 點(diǎn)擊確定...
    loneWolf01閱讀 500評論 0 0
  • 六.集成SDK基礎(chǔ)功能 (仔細(xì)研習(xí),結(jié)合實(shí)際操作) 由于環(huán)信官方文檔比較詳細(xì),因此,根據(jù)項(xiàng)目需求,把用到的方法記錄...
    夜空已沉寂閱讀 2,140評論 0 7
  • (十一)倩倩的變節(jié) 在烈士陵園待了一會确徙,實(shí)在覺得無聊,常毛建議我們?nèi)タ翠浵裰醋馈:芫枚紱]有過錄像癮了鄙皇,我們在對此提議的...
    兒和女閱讀 199評論 0 0