阿里百川即时通讯 梳理

1、YWAPI App初始化类

协议:IYWPushService,设置推送接收block
根据block中的字典获得app的启动状态和会话属性,从而做不同的操作

fetchIMKitForOpenIM 首次获取YWIMKit对象,并全局持有,如果获得该对象,则不用获取下面的对象了,该对象是openIM的UI接口,并自动持有一个YWIMCore对象
fetchNewIMCore 首次获得一个YWIMCore对象,并全局持有


2、YWIMKit 即时通讯UI层封装,遵循,是IM内部封装的UI操作,自定义要求不高可以直接使用

  • 小规模自定义:IYWUIService内部定义的一系列属性及block回调,用于自定义局部自定义控件
    openxxxxx 打开某个界面并进入(界面使用默认的)
    makexxxxx 获得某个界面(一般用来做自定义界面)
    dissmiss 关于IMUI界面,不会断开登录

  • 完全自定义:如果想要完全自定义控件,则UI层的代码都需要自己重新写,数据获取和通讯的连接使用IMCore属性

YWIMKit中的UI界面控制器,操作小规模自定义UI

1.YWConversationListViewController 会话列表界面
以下操作都是经过block来设置的,在用到的时候
(1)删除,点击某个会话的回调 可以设置
(2)无数据是的view可以自定义viewForNoData
(3)列表页左滑显示item,可以自定义,根据会话对象YWConversation
(4)自定义cell行高,根据会话对象YWConversation
(5)自定义cell,根据会话对象YWConversation
(6)自定义头像点击block(比如点击头像要进入个人空间,则需要定义这个)

自定义创建cell.png
自定义配置cell.png
自定义的cell

默认的cell

从上面的展示可以看出,自定义cell的实现只要设置如上图代码的两个回调即可
分析上下效果图,可以知道自定义cell还需要实现哪些功能和接口
(1)群聊和单聊conversation需要判断,并获得数据展示不同的效果,群聊需要获得群名
(2)表情的处理,还需要实现表情的富文本处理
相对来说,默认的cell功能比较全,界面清新,且使用简单,所以使用默认的cell即可,也可以对某种类型的conversation做自定义。

2.YWConversationViewController 单聊界面或群聊界面,即聊天界面
功能:各类自定义,发送消息(多种消息,在聊天页面不完全自定义,即不用自己的tableview和输入框的情况下,发送消息基本用不上,IM UI 已经封装到YWConversationViewController去了)
(1)自定义插件
普通的YWConversationViewController ,不带插件,需要自己添加,默认的插件有4个,也可以自己添加,自定义插件需要实现YWInputViewPluginProtocol协议,并实现协议方法,比如点击事件的回调、插件的名称、图标等等。用法可以参考上面的默认插件

在自定义聊天界面的情况下,不想自定义插件,只需要这些默认插件,则可以调用
addDefaultInputViewPluginsToMessagesListController方法来添加默认插件

插件名 作用
YWInputViewPluginTakePhoto 拍照并发送图片
YWInputViewPluginPhotoPicker 从相册选择并发送图片
YWInputViewPluginLocationPicker 选择地理位置并发送
YWInputViewPluginEmoticonPicker 表情

(2) 自定义表情
YW_TGZ_Emoitons.emo 文件是可以解压缩查看
可以自定义插件tab点击处理,发送按钮的处理,添加表情插件到指定位置等

(3)其他自定义

插件名 作用
customTopView 顶部自定义图片,bounds可以自己设置,位置默认居中,但意义不明~因为会挡住聊天界面
backgroundImage 聊天页面背景图片,可以做成用户自定义
messageCustomMenuItemsBlock 自定义消息长按功能,返回数组(元素是YWMoreActionItem)
viewForNoData 没数据的时候,显示的视图,bounds默认是整个页面
disableTitleOnlineDisplay 是否支持在线显示
disableTextShowInFullScreen 是否支持文字双击放大

3.可以自定义设置头像的填充模式和圆角半径
4.自定义IM服务器显示用户profile的来源fetchProfileForPersonBlock(一般用我方服务器根据personID查询用户信息,然后把头像,昵称等发送到IM服务器,发送成功后会在本地缓存一定时间,这个时间也可以自定义profileCacheExpireTime),当用户修改了昵称和头像后需要删除本地缓存,并自动调用fetchProfileForPersonBlock
5.自定义用户行为回调
(1)点击网址的回调 YWOpenURLBlock
(2)点击预览大图的回调 YWUIPreviewImageMessageBlockV3
(3)点击打开地理位置的回调 YWUIPreviewLocationBlock
(4)点击用户头像的回调 YWOpenProfileBlock,一般用来进入个人空间啥的
6.显示通知设置
YWIMKit内部处理通知的样式在YWShowNotificationBlock里设置,可以用SVProgressHud设置
7.全局颜色和气泡自定义
对于默认YMUIKit的的颜色操作,在CustomizedUIResources.bundle下的OpenIM-Theme.plist中,可以修改自己想要的颜色,上图的cell,昵称是红色的,就是由下图中Tableview-CellTitle这个字段对应的value#ff0000决定的。


自定义颜色.png

CustomizedUIResources.bundle下还有一个wxo_bubble_customize.plist以及许多图片资源,这些就是用来设置气泡外观的,找到对应的名称,修改图片即可完成自定义

自定义气泡聊天框

两个边缘结构体的说明
cap_insets:图片拉伸参数,对于形状较复杂的图片,我们的UI设计师给图的时候要加尺寸,如下图设计
edge_insets:内容适应背景的边缘间距

cap_insets

edge_insets

3、 YWIMCore OpenIM核心数据层对象

  • YWIMCore是数据层的封装
  • YWIMCore对象代表了使用OpenIM账号的上下文信息,可以从该对象中获得IM的各种服务。例如,您调用YWIMCore对象的登录服务登录成功后,可以调用- YWIMCore对象的会话服务获取会话并发送消息。
    YWIMCore包含多个服务属性,每个服务属性遵循一个服务协议,每个服务协议中定义个各自能够完成的功能

下面罗列一些较为常用的服务,其他服务使用不多
每个Service都有对应的Def,会定义一些宏,常量,枚举,block等

协议 包括 内容
IYWLoginService
登录与长连接服务
(1)获取当前登录用户的信息,id,显示名称等
(2)设置登录能力,用户名,密码等。输入不正确,则无法登录
(3)预登陆
(4)登录,登出
IYWConversationService
会话
(1)异步查看所有会话(包括群聊和单聊)
(2)异步删除会话
(3)给某个会话添加收到消息的通知
(4)为自己的消息添加生命周期代理,可以在消息发送前,改变消息内容或者取消发送
(5)获得某个会话的所有消息,单个消息(消息model是IYWMessage)
IYWTribeService
群组
(1)返回所有已加入群
(2)获得指定群的信息
(3)创建群 YWTribeDescriptionParam 创建参数
(4)加入群
(5)退出群
(6)解散群
(7)邀请人加入
(8)踢出某人
(9)设置成员为管理员或普通成员
(10)修改群成员昵称
(11)上述操作的一系列回调,和移除回调操作
(12)获取成员列表
IYWContactService
联系人
(1)黑名单
(2)好友的全部功能(增,删,改,接收他人添加请求的回调处理)
(3)分组操作
IYWSettingService
设置
(1)设置是否推送
(2)设置是否接收消息(对单聊对象或群)
(3)开关@消息功能

4、IYWMessage

YWConversation 根据会话id先获得一个会话对象YWConversation
用该对象的 asyncSendMessageBody:progress:completion 异步发送消息IYWMessage对象
当你接收到消息时,总是可以从messageBody中获取到对应的数据。
当你需要发送消息时,总是需要先构造对应的messageBody,将数据放入body中。
messageBody的类型有
YWMessageBodyText
YWMessageBodyImage
YWMessageBodyCustomize,还有语音,地理位置消息等


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,674评论 0 15
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,024评论 4 62
  • 2017.02.22 可以练习,每当这个时候,脑袋就犯困,我这脑袋真是神奇呀,一说让你做事情,你就犯困,你可不要太...
    Carden阅读 1,328评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,504评论 25 707
  • 慌 晨起席凉若玉床, 被暖身冷愈心慌。 夏末未至秋尚远, 天云诡谲翻彷徨。
    陈言著诗随云飞阅读 232评论 0 1