iOS 環(huán)信集成通過服務器實現(xiàn)頭像和昵稱的顯示

最近項目結束了很無聊,想起一直看別人的技術貼自己還不曾寫過什么東西,就打算寫篇文章。思前想后覺得本人沒啥技術(誒、、、這才是真正的碼農Y(^_^)Y)但是又想寫點什么。所以就把集成環(huán)信遇到的一些問題寫出來和大家分享。

下面開始 ?思路有點混亂(畢竟是菜雞、、、)大家見諒


1.聊天界面中不想要紅包、分享位置、視頻等功能怎辦?

在EaseChatBarMoreView.m中你就可以看到相關的代碼(命名很直白相信小伙伴們都能看的明白)

2.監(jiān)聽好友申請

EMContactManagerDelegate這個代理方法中有各種監(jiān)聽的方法即看即用(別忘了遵守協(xié)議0哦)。最好的跟控制器寫。

在獲取當前有幾個好友請求通知的時候可能或出現(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)信之后退到后臺三分鐘左右被殺死

解決很簡單就是在軟件進入后臺、進入前臺中不要操作環(huán)信的方法。目前我去掉沒什么影響

[[EMClient sharedClient] applicationDidEnterBackground:application];

當時我就是按照環(huán)信文檔寫的,這個比較坑。

4、統(tǒng)計消息未讀數(shù)

統(tǒng)計消息未讀數(shù)

for (EMConversation *conversation in conversations) {

unreadCount += conversation.unreadMessagesCount;

}

這個要和實時監(jiān)聽收到消息的監(jiān)聽方法一起用 是在EMChatManagerDelegate代理方法中

- (void)didReceiveMessages:(NSArray *)aMessages

{}

5、環(huán)信的推送

環(huán)信的推送分為倆種,本地推送、離線推送。集成環(huán)信后,當app推到后臺沒被殺死的時候,接收消息會走本地推送,很多開發(fā)者誤以為這時候走APNs,其實這時候app長連接未斷開,調用蘋果的本地通知即可。

本地推送方法傳送門

環(huán)信接收消息本地推送的實現(xiàn) - EaseMob.沈沖 - 博客頻道 - CSDN.NET

APNs參考開發(fā)文檔即可,

做好推送了你會發(fā)現(xiàn)收到的推送消息是”您有一條新消息“而不是我們想要顯示的消息內容,設置如下即可

EMPushOptions *pushOptions = [[EMClient sharedClient] pushOptions];

pushOptions.displayStyle = EMPushDisplayStyleMessageSummary;

[[EMClient sharedClient] updatePushOptionsToServer];

[[EMClient sharedClient] initializeSDKWithOptions:options];

6、利用環(huán)信做單點登錄

調用如下方法即可

/*!

*? \~chinese

*? 當前登錄賬號在其它設備登錄時會接收到該回調

*

*? \~english

*? Current login account to log in on other devices will receive the callback

*/

- (void)didLoginFromOtherDevice;

7、設置群組會話名稱

在創(chuàng)建群組后再會話列表看到的可能是此群組的ID并不是群組的名稱。

解決辦法是在EaseConversationListViewController.m文件中的tableViewDidTriggerHeaderRefresh方法中對model進行判斷賦值代碼如下

//設置群組的會話名稱

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、設置用戶的頭像、昵稱

環(huán)信并未保存用戶的頭像、昵稱所以這里要我們自己處理,相信支持各位看官看下來的動力(了解如何設置用戶頭像、昵稱)就是這個吧。

環(huán)信為我們提供了倆種解決方案并詳細的說明了各自的優(yōu)缺點。這里我使用的是方法一:從APP服務器獲取昵稱和頭像

昵稱和頭像的顯示與更新 [環(huán)信開發(fā)文檔]

使用這種辦法的必要條件是自己用戶體系的某個字段(可以標識用戶的唯一性)必須與環(huán)信的用戶id保持一致。這樣我們才能拿到該用戶存在在我們服務器上的昵稱、頭像及各種信息。

為了節(jié)省用戶的流量我們應該做一個本地數(shù)據庫,獲取環(huán)信用戶id現(xiàn)在本地數(shù)據庫查詢,有即使用、無即下載保存本地數(shù)據庫在使用。


說了辣么多廢話,下面我們來點實際的

a、設置會話列表單聊的頭像、名稱

與設置群組聊天的會話名稱一樣在EaseConversationListViewController.m文件中的tableViewDidTriggerHeaderRefresh方法中對model進行判斷賦值代碼如下

if (model.conversation.type == EMConversationTypeChat) {

//數(shù)據庫查詢數(shù)據賦值

[[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、設置聊天界面(單聊、群聊)的頭像、昵稱

在EaseBaseMessageCell.m文件中的- (void)setModel:(id)model方法中對model進行判斷賦值代碼如下

[super setModel:model];

//消息來自哪個人 用這個id查詢數(shù)據困

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號跟B號聊天? 什么都正常,但是換C號,D號跟B號聊天顯示的都是A號的名、聊天記錄都是A,B的話。極有可能就是用戶退出的時候在環(huán)信的服務上沒有正常的退出,在用戶退出的時候點用環(huán)信的退出即可

本人菜雞一個寫下這個:一是為了幫助像我這樣的小白。二是好記性不如爛筆頭(爛筆頭都買不起)就寫在這里。有什么不對的請指教!勿噴?。?!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容