最近項(xiàng)目結(jié)束了很無聊嗦篱,想起一直看別人的技術(shù)貼自己還不曾寫過什么東西,就打算寫篇文章幌缝。思前想后覺得本人沒啥技術(shù)(誒灸促、、涵卵、這才是真正的碼農(nóng)Y(^_^)Y)但是又想寫點(diǎn)什么浴栽。所以就把集成環(huán)信遇到的一些問題寫出來和大家分享。
下面開始 ?思路有點(diǎn)混亂(畢竟是菜雞轿偎、典鸡、、)大家見諒
1.聊天界面中不想要紅包坏晦、分享位置椿每、視頻等功能怎辦伊者?
在EaseChatBarMoreView.m中你就可以看到相關(guān)的代碼(命名很直白相信小伙伴們都能看的明白)
2.監(jiān)聽好友申請(qǐng)
EMContactManagerDelegate這個(gè)代理方法中有各種監(jiān)聽的方法即看即用(別忘了遵守協(xié)議0哦)。最好的跟控制器寫间护。
在獲取當(dāng)前有幾個(gè)好友請(qǐng)求通知的時(shí)候可能或出現(xiàn)問題如下方法即可()
- (void)didReceiveFriendInvitationFromUsername:(NSString *)aUsername
message:(NSString *)aMessage{
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:@{@"title":aUsername, @"username":aUsername, @"applyMessage":aMessage, @"applyStyle":[NSNumber numberWithInteger:ApplyStyleFriend]}];
[[ApplyViewController shareController] addNewApply:dic];
[self reloadApplyView];
}
3亦渗、軟件集成環(huán)信之后退到后臺(tái)三分鐘左右被殺死
解決很簡(jiǎn)單就是在軟件進(jìn)入后臺(tái)、進(jìn)入前臺(tái)中不要操作環(huán)信的方法汁尺。目前我去掉沒什么影響
[[EMClient sharedClient] applicationDidEnterBackground:application];
當(dāng)時(shí)我就是按照環(huán)信文檔寫的法精,這個(gè)比較坑。
4痴突、統(tǒng)計(jì)消息未讀數(shù)
統(tǒng)計(jì)消息未讀數(shù)
for (EMConversation *conversation in conversations) {
unreadCount += conversation.unreadMessagesCount;
}
這個(gè)要和實(shí)時(shí)監(jiān)聽收到消息的監(jiān)聽方法一起用 是在EMChatManagerDelegate代理方法中
- (void)didReceiveMessages:(NSArray *)aMessages
{}
5搂蜓、環(huán)信的推送
環(huán)信的推送分為倆種,本地推送辽装、離線推送帮碰。集成環(huán)信后,當(dāng)app推到后臺(tái)沒被殺死的時(shí)候拾积,接收消息會(huì)走本地推送殉挽,很多開發(fā)者誤以為這時(shí)候走APNs,其實(shí)這時(shí)候app長(zhǎng)連接未斷開拓巧,調(diào)用蘋果的本地通知即可斯碌。
本地推送方法傳送門
環(huán)信接收消息本地推送的實(shí)現(xiàn) - EaseMob.沈沖 - 博客頻道 - CSDN.NET
APNs參考開發(fā)文檔即可,
做好推送了你會(huì)發(fā)現(xiàn)收到的推送消息是”您有一條新消息“而不是我們想要顯示的消息內(nèi)容肛度,設(shè)置如下即可
EMPushOptions *pushOptions = [[EMClient sharedClient] pushOptions];
pushOptions.displayStyle = EMPushDisplayStyleMessageSummary;
[[EMClient sharedClient] updatePushOptionsToServer];
[[EMClient sharedClient] initializeSDKWithOptions:options];
6傻唾、利用環(huán)信做單點(diǎn)登錄
調(diào)用如下方法即可
/*!
*? \~chinese
*? 當(dāng)前登錄賬號(hào)在其它設(shè)備登錄時(shí)會(huì)接收到該回調(diào)
*
*? \~english
*? Current login account to log in on other devices will receive the callback
*/
- (void)didLoginFromOtherDevice;
7、設(shè)置群組會(huì)話名稱
在創(chuàng)建群組后再會(huì)話列表看到的可能是此群組的ID并不是群組的名稱承耿。
解決辦法是在EaseConversationListViewController.m文件中的tableViewDidTriggerHeaderRefresh方法中對(duì)model進(jìn)行判斷賦值代碼如下
//設(shè)置群組的會(huì)話名稱
if (model.conversation.type == EMConversationTypeGroupChat) {
NSArray *groupArray = [[EMClient sharedClient].groupManager getAllGroups];
for (EMGroup *group in groupArray) {
if ([group.groupId isEqualToString:converstion.conversationId]) {
model.title = group.subject;
}
}
}
8冠骄、設(shè)置用戶的頭像、昵稱
環(huán)信并未保存用戶的頭像加袋、昵稱所以這里要我們自己處理凛辣,相信支持各位看官看下來的動(dòng)力(了解如何設(shè)置用戶頭像、昵稱)就是這個(gè)吧锁荔。
環(huán)信為我們提供了倆種解決方案并詳細(xì)的說明了各自的優(yōu)缺點(diǎn)。這里我使用的是方法一:從APP服務(wù)器獲取昵稱和頭像
昵稱和頭像的顯示與更新 [環(huán)信開發(fā)文檔]
使用這種辦法的必要條件是自己用戶體系的某個(gè)字段(可以標(biāo)識(shí)用戶的唯一性)必須與環(huán)信的用戶id保持一致蝙砌。這樣我們才能拿到該用戶存在在我們服務(wù)器上的昵稱阳堕、頭像及各種信息。
為了節(jié)省用戶的流量我們應(yīng)該做一個(gè)本地?cái)?shù)據(jù)庫(kù)择克,獲取環(huán)信用戶id現(xiàn)在本地?cái)?shù)據(jù)庫(kù)查詢恬总,有即使用、無即下載保存本地?cái)?shù)據(jù)庫(kù)在使用肚邢。
說了辣么多廢話壹堰,下面我們來點(diǎn)實(shí)際的
a拭卿、設(shè)置會(huì)話列表單聊的頭像、名稱
與設(shè)置群組聊天的會(huì)話名稱一樣在EaseConversationListViewController.m文件中的tableViewDidTriggerHeaderRefresh方法中對(duì)model進(jìn)行判斷賦值代碼如下
if (model.conversation.type == EMConversationTypeChat) {
//數(shù)據(jù)庫(kù)查詢數(shù)據(jù)賦值
[[BGFMDB intance]queryWithTableName:TableName keys:nil where:@[@"loginName",@"=",String(converstion.conversationId)] complete:^(NSArray *array) {
model.title = array[0][@"nickName"];
model.avatarURLPath =[NSString stringWithFormat:@"%@%@",PhotoUrl,array[0][@"iconUrl"]];
}];
}
b贱纠、設(shè)置聊天界面(單聊峻厚、群聊)的頭像、昵稱
在EaseBaseMessageCell.m文件中的- (void)setModel:(id)model方法中對(duì)model進(jìn)行判斷賦值代碼如下
[super setModel:model];
//消息來自哪個(gè)人 用這個(gè)id查詢數(shù)據(jù)困
NSLog(@"%@",model.message.from);
[[BGFMDB intance] queryWithTableName:TableName keys:nil where:@[@"loginName",@"=",String(model.message.from)] complete:^(NSArray *array) {
if (array[0][@"iconUrl"]) {
[self.avatarView sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",PhotoUrl,array[0][@"iconUrl"]]] placeholderImage:model.avatarImage];
} else {
self.avatarView.image = model.avatarImage;
}
_nameLabel.text = array[0][@"nickName"];
if (self.model.isSender) {
注:如果完成后如果出現(xiàn)用A號(hào)跟B號(hào)聊天? 什么都正常谆焊,但是換C號(hào)惠桃,D號(hào)跟B號(hào)聊天顯示的都是A號(hào)的名、聊天記錄都是A辖试,B的話辜王。極有可能就是用戶退出的時(shí)候在環(huán)信的服務(wù)上沒有正常的退出,在用戶退出的時(shí)候點(diǎn)用環(huán)信的退出即可
本人菜雞一個(gè)寫下這個(gè):一是為了幫助像我這樣的小白罐孝。二是好記性不如爛筆頭(爛筆頭都買不起)就寫在這里呐馆。有什么不對(duì)的請(qǐng)指教!勿噴AぁP诶础!