第三方im系统集成设计方案

date: 2016-06-27 14:51:04
tags: im系统,环信,集成,聊天,即时聊天系统

一、前言

本次app改版,需要在原有的基础之上增加即时通讯(im)功能,通过一段时间的技术选型,最终确定集成环信。环信是一家专注即时通讯的第三方平台。使用过程中,只需在环形服务器中维护用户体系,以及调用环信提供的系列sdk即可实现即时通讯功能。


从上图可以看出,首先在本地服务端维护了一套用户体系,我们需要在环信系统中维护一套对应的用户体系,在环信系统中,用户id即代表着他在这套用户环境中的唯一身份表示。服务端通过环信提供的系列rest api来维护用户体系,具体管理操作有(用户的注册,修改,删除等)。服务端还可以将环信的历史聊天记录同步到本地,这些历史记录可以提供app端的历史消息查询(因为环信不会对消息做长时间的保存)
客户端首次登陆需要登陆环信系统,这一步相当于告诉环信我已经上线了。如果选择了自动登陆模式,那么下次登陆的时候环信sdk就会自动登陆(但是在以下情况下需要重新登录:1、主动退出 2、更换密码 3、用户被删除)。app在聊天过程中只需调用sdk的接口直接与环信服务器对接,消息的发送方和接收方都会将消息保存到本地db中(注意:webim端sdk不提供消息存储功能,如果有必要的话,需要调用app服务器来获取聊天记录),用户可以调用sdk提供的接口获取本地聊天记录,但是要注意,这些本地记录是绑定手机端的,如果更换了手机或者清空了历史记录,那么就需要调用app服务端提供的历史消息查询接口来获取历史消息。

二、im集成功能设计图

下面我将详细介绍im系统的集成方案。首先整套系统分为前端和后端,前端包括android,ios和web网页端。android和ios的所有功能设计几乎一致,因此这里合为一起来讲解。而web网页端有所不同,他所能实现的功能相对于app会弱化很多,因此就单独介绍。服务端的功能比较重要,主要是维护im用户体系,以及维护平台用户的聊天记录。
下图是我对整个系统的功能设计图,分为前端和后端,这里每一个功能模块对应sdk中一系列的api。在实际开发中需要开发者对应环信的api文档进行,具体问题具体对待! 请看 API文档 请注意!本文是对系统功能的描述,具体实现以API文档为准!

集成方案设计图

三、服务端集成

四、APP端集成

1.登陆

用户在第一次登陆app的时候,登陆成功以后,系统会返回用户信息,其中包括 uid和hash后的密码,app通过这两个参数调用sdk的登陆接口。

2.自动登陆

即首次登录成功后,不需要再次调用登录方法,在下次 APP 启动时,SDK 会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息(以上情况是在未调用登出的情况下实现的)。
自动登录在以下几种情况下会被取消:

  • 用户调用了 SDK 的登出动作;
  • 用户在别的设备上更改了密码,导致此设备上自动登录失败;
  • 用户的账号被从服务器端删除;
  • 用户从另一个设备登录,把当前设备上登录的用户踢出。
3.自动重连

通过注册链接状态监听,在掉线时,sdk会自动重连

4.退出登陆

当用户在退出app的以后,紧接着调用sdk的退出操作。

5.注册监听

APP需要通过注册消息监听来接收消息。

6.发送消息

目前系统只需要发送文字,图片两种类型的消息即可。

7.接收消息

目前系统只需要接收两种类型的消息,即文章与图片,但后续有可能加上语音,文件等类型,希望做好相应的扩展。

8.消息管理

第一、获取未读消息数量
第二、未读消息清零
第三、对消息设置已读
第四、获取聊天记录,这里需要注意,sdk或默认把聊天记录保存到本地,app可以直接在本地读取,但是当用户更换手机,或者第一次登陆app的时候,app需要根据具体情况去服务端获取聊天记录。
第五、删除聊天记录

9.自定义扩展消息

当SDK 提供的消息类型不满足需求时,开发者可以通过扩展自 SDK 提供的文本、语音、图片、位置等消息类型,从而生成自己需要的消息类型。

五、WebIm端集成

1.登陆

在web端登陆以后,返回uid和hash后的密码,登陆环信。

2.退出登陆

在web端退出登陆以后,需要退出环信。

3.发送消息

和app端一样,支持发送文字类型和图片类型的消息。

4.消息接收

需要在初始化的时候注册接收消息,对应的有文字类型和图片类型。

5.新消息提示

接收到新消息以后,需要有相应的提示,环信提供的demo中有相关实现,可参考。

#债券学习笔记

1.债券分为:贴现债券,零息债券,附息债权,固定利率债券,浮动利率债券。

贴现债券:贴现债券又称贴水债券是指在票面上不规定利率,发行时按某一折扣率,以低于票面金额的价格发行,到期时仍按面额偿还本息的债券。即指,以低于面值发行,发行价与票面金额之差额相当于预先支付的利息,债券期满时按面值偿付的债券。
零息债券:零息债券是指以贴现方式发行,不附息票,而于到期日时按面值一次性支付本利的债券。
附息债券:又称分期付息债券和息票债券,是指在债券券面上附有息票的债券,或是按照债券票面载明的利率及支付方式支付利息的债券。息票上标有利息额、支付利息的期限和债券号码等内容。持有人可从债券上剪下息票,并据此领取利息。附息债券的利息支付方式一般会在偿还期内按期付息,如每半年或一年付息一次。

相关数学知识整理:
线性规划:
一般地,求线性目标函数在线性约束条件下的最大值或最小值的问题,统称为线性规划问题。

非线性规划:
非线性规划由是求解由一系列未知实函数组成的组方程和不等式(统称为约束)定义的最优化问题,伴随着一个要被最大化或最小化的目标函数,只是一些约束或目标函数是非线性的。

逆矩阵:
设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=I。 则我们称B是A的逆矩阵,而A则被称为可逆矩阵。

转置居正:
把矩阵A的行换成相应的列,得到的新矩阵称为A的转置矩阵,记作AT或A。通常矩阵的第一列作为转置矩阵的第一行,第一行作为转置矩阵的第一列。

矩阵乘法:
矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义[1] 。一般单指矩阵乘积时,指的便是一般矩阵乘积。

参考资料:
实验数据与曲线拟合

phoneGap

date: 2016-04-28 10:42:48
tags: phoneGapo, html5, android

一. 开发准备

  1. nodejs, phonegap, eclipse android开发环境, apache ant

通过第三方IM系统,改造私信功能

date: 2016-04-08 10:05:55
tags: 私信 环信 Im系统 聊天

一 项目背景

不论是SNS社交系统,还是电商网站,私信都是必不可少的一项功能。一般私信对实时性要求并不高,在web端通常的做法是通过定时任务,定时从服务端读取私信消息。这样的开发模式优点是开发比较简单,缺点也显而易见,当用户量上来的时候,对服务器造成的压力也会很大。因此我通过第三方的IM系统对私信进行改造,上一篇博文中已经详细做了第三方Im系统的调用报告,最终选用环信。

Read More