学问Chat UI(4)
前言
写这个组件是在几个月前,那时候是因为老大讲RN项目APP的通讯聊天部分后面有可能自己实现,让我那时候尝试着搞下Android通讯聊天UI实现的部分,在这期间,找了不少的Android原生项目:蘑菇街的TeamTalk,ChatDemo,EmojiChat,考虑到扩展性与改造复杂度,选择了学习融云 IM 界面组件。其实一直想写这个项目介绍,学习需要思考与总结,如果学了以后没有总结或者思考,慢慢地时间会磨平他们。
AuroraChat
AuroraChat 是个基于融云UI库的即时通讯(IM)RN UI组件。
本 UI 组件提供了消息列表、输入视图等常用组件,支持常见的消息类型:文字、图片、语音等。
支持 Android,暂不支持iOS 平台。
功能
可以基于本 UI 库实现的功能:
- 消息列表的展示;
- 支持多种消息类型;
- 对每种消息类型的点击处理;
- 支持用户头像。
- 消息输入:
- 支持多种消息类型;
- 语音输入组件;
- 相册照片选取组件;
当前支持展示与输入的消息类型:
- 文字
- 图片
- 语音
使用
当前提供的组件:
Android
- EditExtension (关于输入组件的布局)
- AutoRefreshListView (关于消息如何适配ListView)
React Native
ChatView for React Native
配置
用法
import {DeviceEventEmitter} from "react-native";
import ChatView from "../rychatview";
数据格式
加载消息列表UI,需要传递一定格式的消息对象
message对象格式:
message = { // text message
"type": "text",
"own": false,//是否为当前用户
"content": "发送文本内容",
"ts": "发送时间",
"uid": "当前用户id",
"msgid": "消息uid",
"senduserinfo": "发送者信息"
}
message = { // image message
"type": "image",
"own": false,//是否为当前用户
"content": "图片URL",
"ts": "发送时间",
"uid": "当前用户id",
"msgid": "消息uid",
"senduserinfo": "发送者信息"
}
message = { // voice message
"type": "voice",
"own": false,//是否为当前用户
"duration": "50",//时长 单位:秒
"content": "语音URL",
"ts": "发送时间",
"uid": "当前用户id",
"msgid": "消息uid",
"senduserinfo": "发送者信息"
}
message = { // chatInfo message
"userid": "用户id",
"name": "昵称",
"portraitUri": "头像URL",
"chattype": "聊天类型",//群组 私聊
"targetid": "目标id"
}
ChatView介绍
Props 属性
chatInfo
PropTypes.object:登录聊天服务器后设置初始化
curChatInfo: {
"userid": "1001",
"name": "golike",
"portraitUri":"http://img0.imgtn.bdimg.com/it/u=651843754,4204488972&fm=213&gp=0.jpg",
"chattype": "priv",
"targetid": "1002"
}
isOnRefresh
PropTypes.bool:下拉刷新的标识符
OnRefresh
PropTypes.function: () => {//重新网络请求 }
DeviceEventEmitter监听 uploadMsg事件
监听来自原生的不同消息
componentDidMount() {
//设置来自原生的消息的监听
this.subscription = DeviceEventEmitter.addListener('uploadMsg', this.onUpdateMessage);
}
componentWillUnmount() {
//移除监听器
this.subscription.remove();
}
组件内的方法
getHistoryMessage
PropTypes.function:加载历史消息
historyMsgs = [ 前面消息类型中的消息,*,...]
(historyMsgs) => {//连接消息服务器成功后获取的历史消息列表,发送给原生};
sendTextMsg
PropTypes.function:
(msg) => {//从js构造文本数据发送给原生};
sendRichTextMsg
PropTypes.function:未实现
(msg) => {//从js构造富文本数据发送给原生};
sendPicMsg
PropTypes.function:
(msg) => {//从js构造图片数据发送给原生};
sendVoiceMsg
PropTypes.function:
(msg) => {//从js构造语音数据发送给原生};
学问Chat UI(4)的更多相关文章
- 学问Chat UI(3)
前言 上文学问Chat UI(2)分析了消息适配器的实现; 本文主要学习下插件功能如何实现的.并以图片插件功能作为例子详细说明,分析从具体代码入手; 概要 分析策略说明 "+"功能 ...
- 学问Chat UI(1)
前言 由于项目需要,最近开始借鉴学习下开源的Android即时通信聊天UI框架,为此结合市面上加上本项目需求列了ChatUI要实现的基本功能与扩展功能. 融云聊天UI-Android SDK 2.8. ...
- 学问Chat UI(2)
前言 上文讲了下要去做哪些事,重点分析了融云Sdk中RongExtension这个扩展控件,本文来学习下同样是融云Sdk中的AutoRefreshListView如何适配多种消息的实现方式,写的有不足 ...
- 77.Android之代码混淆
转载:http://www.jianshu.com/p/7436a1a32891 简介 作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使 ...
- 【SignalR学习系列】5. SignalR WPF程序
首先创建 WPF Server 端,新建一个 WPF 项目 安装 Nuget 包 替换 MainWindows 的Xaml代码 <Window x:Class="WPFServer.M ...
- 如何用ABP框架快速完成项目(8) - 用ABP一个人快速完成项目(4) - 能自动化就不要手动 - 使用自动化测试(BDD/TDD)
做为一个程序员, 深深知道计算机自动化的速度是比人手动的速度快的, 所以”快速”完成项目的一个重要武器就是: 能自动化就不要手动. BDD/TDD有很多优势, 其中之一就是自动化, 我们这节文章先 ...
- Android: apk反编译 及 AS代码混淆防反编译
一.工具下载: 1.apktool(资源文件获取,如提取出图片文件和布局文件) 反编译apk:apktool d file.apk –o path 回编译apk:apktool b path –o f ...
- 带你彻底明白 Android Studio 打包混淆
前言 在使用Android Studio混淆打包时,该IDE自身集成了Java语言的ProGuard作为压缩,优化和混淆工具,配合Gradle构建工具使用很简单.只需要在工程应用目录的gradle文件 ...
- “四核”驱动的“三维”导航 -- 淘宝新UI(需求分析篇)
前言 孔子说:"软件是对客观世界的抽象". 首先声明,这里的"三维导航"和地图没一毛钱关系,"四核驱动"和硬件也没关系,而是为了复杂的应用而 ...
随机推荐
- 网页授权——扫二维码获取openid
最近做微信公众平台开发项目时遇到这样一个功能需求:生成一个特定url的二维码,用户扫描二维码后跳转到这个url指定的页面,并在这个页面获得用户的openid.这个功能主要涉及到两方面的技术:生成二维码 ...
- Linux系统挂载操作mount详解
在Linux系统中,文件系统不挂载是无法使用的.挂载,即是让文件系统在操作系统中可用.在Linux中使用mount命令来挂载文件系统,有永久性挂载和临时性挂载两种挂载方式. 1. 永久性挂载: 修改配 ...
- Linux系统用户管理
一.Linux账户 广义上讲,Linux的账户包括用户账户和组账户两种. Linux系统下的用户账户有两种,普通用户和超级用户.普通用户在系统中的任务就是普通工作,管理员在系统上的任务就是对普通用户和 ...
- Bootstrap的核心——栅格系统的使用
前 言 絮叨絮叨 Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. 而栅格系统是Bootstrap中的核心,正是因为栅格系统的 ...
- 《HelloGitHub》第 19 期
前言 最近很少写博客了,工作上的事情太多(在做一些数据分析方面的工作,之前是 Web 开发),时间捉襟见肘.更多的时间都花在工作上,没有精力.时间积累整理知识.说来还是能力太差.效率有问题. 后面会好 ...
- How to change your password of your mysql account in WampServer
#1. use phpmyadmin to login mysql and click the account menu, and then click "Change the passwo ...
- Crazy Calendar (阶梯博弈变形)
2011 was a crazy year. Many people all over the world proposed on 11-11-11, married on 11-11-11, som ...
- Jimmychoo商城系统总结
一.需求 1.游戏模块 ①在进入H5之前,首先有一个动态的探照灯的动效,然后由"淡出"效果到H5首页. ②在点击"开始游戏"之后会有一段动画演示游戏内容,然后滑 ...
- Spring IOC容器分析(2) -- BeanDefinition
上文对Spring IOC容器的核心BeanFactory接口分析发现:在默认Bean工厂DefaultListableBeanFactory中对象不是以Object形成存储,而是以BeanDefin ...
- 用cmd命令创建oracle 数据库、用户和表空间
Win+R调查运行窗口,输入cmd回车 连接到本地oracle库 创建名为"SXSJ"的表空间,其初始大小为512M,支持自动扩展,每次增量为32M: create tablesp ...