前言

写这个组件是在几个月前,那时候是因为老大讲RN项目APP的通讯聊天部分后面有可能自己实现,让我那时候尝试着搞下Android通讯聊天UI实现的部分,在这期间,找了不少的Android原生项目:蘑菇街的TeamTalk,ChatDemo,EmojiChat,考虑到扩展性与改造复杂度,选择了学习融云 IM 界面组件。其实一直想写这个项目介绍,学习需要思考与总结,如果学了以后没有总结或者思考,慢慢地时间会磨平他们。

AuroraChat

AuroraChat 是个基于融云UI库的即时通讯(IM)RN UI组件。

本 UI 组件提供了消息列表、输入视图等常用组件,支持常见的消息类型:文字、图片、语音等。

支持 Android,暂不支持iOS 平台。

功能

可以基于本 UI 库实现的功能:

  • 消息列表的展示;

    • 支持多种消息类型;
    • 对每种消息类型的点击处理;
    • 支持用户头像。
  • 消息输入:
    • 支持多种消息类型;
    • 语音输入组件;
    • 相册照片选取组件;

当前支持展示与输入的消息类型:

  • 文字
  • 图片
  • 语音

使用

当前提供的组件:

Android

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)的更多相关文章

  1. 学问Chat UI(3)

    前言 上文学问Chat UI(2)分析了消息适配器的实现; 本文主要学习下插件功能如何实现的.并以图片插件功能作为例子详细说明,分析从具体代码入手; 概要 分析策略说明 "+"功能 ...

  2. 学问Chat UI(1)

    前言 由于项目需要,最近开始借鉴学习下开源的Android即时通信聊天UI框架,为此结合市面上加上本项目需求列了ChatUI要实现的基本功能与扩展功能. 融云聊天UI-Android SDK 2.8. ...

  3. 学问Chat UI(2)

    前言 上文讲了下要去做哪些事,重点分析了融云Sdk中RongExtension这个扩展控件,本文来学习下同样是融云Sdk中的AutoRefreshListView如何适配多种消息的实现方式,写的有不足 ...

  4. 77.Android之代码混淆

    转载:http://www.jianshu.com/p/7436a1a32891 简介 作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使 ...

  5. 【SignalR学习系列】5. SignalR WPF程序

    首先创建 WPF Server 端,新建一个 WPF 项目 安装 Nuget 包 替换 MainWindows 的Xaml代码 <Window x:Class="WPFServer.M ...

  6. 如何用ABP框架快速完成项目(8) - 用ABP一个人快速完成项目(4) - 能自动化就不要手动 - 使用自动化测试(BDD/TDD)

    做为一个程序员, 深深知道计算机自动化的速度是比人手动的速度快的, 所以”快速”完成项目的一个重要武器就是: 能自动化就不要手动.   BDD/TDD有很多优势, 其中之一就是自动化, 我们这节文章先 ...

  7. Android: apk反编译 及 AS代码混淆防反编译

    一.工具下载: 1.apktool(资源文件获取,如提取出图片文件和布局文件) 反编译apk:apktool d file.apk –o path 回编译apk:apktool b path –o f ...

  8. 带你彻底明白 Android Studio 打包混淆

    前言 在使用Android Studio混淆打包时,该IDE自身集成了Java语言的ProGuard作为压缩,优化和混淆工具,配合Gradle构建工具使用很简单.只需要在工程应用目录的gradle文件 ...

  9. “四核”驱动的“三维”导航 -- 淘宝新UI(需求分析篇)

    前言 孔子说:"软件是对客观世界的抽象". 首先声明,这里的"三维导航"和地图没一毛钱关系,"四核驱动"和硬件也没关系,而是为了复杂的应用而 ...

随机推荐

  1. Java基础总结--数组

    ---数组的定义---组织存储一组数据1.存放相同类型数据的集合--就是一种容器本质上变量也是一种容器--区别就是只存储了一个数据的容器--面对容器,而不是分散的数据eg.买一盘鸡蛋--蛋托其实就是容 ...

  2. MYSQL 子查询返回多列显示

    因工作需要,目前研究出一种mysql 技能,与大家分享一下. 需求:关联查询另一个大表数据的某些(一个以上)字段 方案:因关联查询的表数据太大.多表查询影响效率,单个子查询又有些多余.所以采用多列拼接 ...

  3. 算法改进 | java语言中判断素数

    参考文章:http://blog.csdn.net/kp_liu/article/details/37569507 http://blog.csdn.net/huang_miao_xin/articl ...

  4. 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路

    前言:“我们有一个订单列表,希望能够根据当前登陆的不同用户看到不同类型的订单数据”.“我们希望不同的用户能看到不同时间段的扫描报表数据”.“我们系统需要不同用户查看不同的生产报表列”.诸如此类,最近经 ...

  5. JS框架设计读书笔记之-核心模块

    随笔记录一下读书心得 1. 框架模块-核心模块 该模块是框架最先执行的部分,jQuery与vue中都有初始化的代码. 模块的功能主要是:对象扩展.数组化.类型判定.事件绑定和解绑.无冲突处理.模块加载 ...

  6. Ant 基本语法的使用示列

    ant -f build.xml  执行你的build.xml文件   <?xml version = "1.0"?> <project name = " ...

  7. 链表倒数第n个节点

    找到单链表倒数第n个节点,保证链表中节点的最少数量为n. 样例 给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1. /** * Definiti ...

  8. Milking Time

    Description Bessie is such a hard-working cow. In fact, she is so focused on maximizing her producti ...

  9. Luogu 2296 寻找道路

    https://www.luogu.org/problemnew/show/2296 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以 ...

  10. 原生addClass 方法 添加类函数

    function addClass(id,new_class){       var i,n=0;       new_class=new_class.split(",");   ...