一个简单的社交软件解决方案应该解决的问题:

通信/共享/空间(朋友圈)/用户/好友/动态/聊天记录.

社交主要是交流、朋友圈(空间)。通信又分为文本、表情、语音、视频。朋友圈主要包含自己和好友动态,有些还包含系统推荐的信息。

这是我使用Bmob提供的解决方案案例:

通信:建立Bmob推送服务基础上,有消息需要将通知或者信息推送到参与者端,文本可以直接推送,对于视频,语音推送的是存储连接地址,当参与者收到推送消息,根据地址下载该消息。对于表情来说有两种方法,一种是在本地存储表情包,另一种是和视频,语音一样,由对应的消息类型来标识。其中这里视频,语音,如果表情使用和视频以及语音一样的方式,使用bmob文件服务存储。聊天记录使用bmob表结构存储。

用户管理:用户是整个社交过程的对象,好友、交流、动态、朋友圈、记录查询、评论动态等等都是在用户的基础上建立的。使用Bmob提供的服务能很好的解决用户之间的联系。间图:

用户表:每一个应用仅有一个用户表,由Bmob服务自动生成,用于管理使用该应用的用户:

用户好友表:使用该应用某个用户的好友信息表,每一个用户表中的一项应该对应一个好友表,开发者根据当用户表中插入一条新记录时就创建,用于管理该用户的所有好友,如根据上面的用户表,将需要创建WindWorld_friends和Rainworld_friends表.

如图是Rainworld好友表;

用户动态表:该用户的所有动态存储表,同样是每一个用户表中的一项应该对应一个动态表,用于管理该用户发表的动态(朋友圈动态);根据上面的用户表中的内容,应该创建Rainworld_dynamic和WindWorld_dynamic表.

如图是Rainworld的动态表;

聊天记录表:该用户参与会话的纪录表,当创建一个新的会话时,就创建一个会话表,里面存储了会话内容,建议使用会话双方的ID创建会话表;


如图是Rainworld和WindWorld的聊天记录表:

定时任务存储表:存储了定时任务执行的结果(注:定时任务主要是获取和更新好友动态,当获取好友动态的时候只需要读取这个定时任务表即可);

注:除了用户表,其他数据表Bmob不进行创建,必须由开发者根据需要创建。如:当用户注册时,应该根据注册的信息创建对应的用户好友表以及动态信息表;当有会话时则创建与该会话相关的会话表,用于存储会记录;当需要上传多媒体信息时,需要创建对应文件信息存储表(主要存储多媒体文件的路径),创建这些表均可用使用Bmob服务对象直接创建,这对应的是对象存储,可以查看:http://docs.bmob.cn/android/developdoc/index.html?menukey=develop_doc&key=develop_android#index_添加数据。


聊天记录使用表结构云存储。由统一的结构来标识信息是否是多媒体类型,如果是就采用不同的方式呈现。通过自定义的数据结构来进行本地分发(当客户接受到消息以后,解析消息结构,根据自定义消息的类型来决定下面要做的事情,是直接显示文本消息,或是显示图像,或者是显示视频,或者是显示音频信息)。通信过程:

上面是具体的社交软件通信方式,其中简单的叙述了使用bmob服务实现简单的社交解决方案。其中的A、B代表的是通信的两个客户端,其中可以是Android、也可以是iOS。在这里A、B可以上传多媒体信息和下载多媒体信息。推送和消息通信不是直接推送图像、语音、视频,这些推送的仅仅是存储地址。如:当A像B发送消息的时候,由A将消息推送到B,在这个过程当中如果有语音、视频、或者图像则将其同步上传到bmob服务的文件服务存储。当B收到推送的消息以后,根据类型进行对应的处理,如果是视频、音频、图像则下载。


如发送图像的方式:

1:获取要发送的图像;

2.0:将发送图像的消息推送到B;

2.1:与2.0同步将图像文件保存到Bmob文件服务器中;

3.0 :接收推送的图像消息;

3.1:接收到图像消息以后,从Bmob文件服务器下载图像文件;

上面几个过程实现A与B之间的通信。

注:语音、视频等多媒体信息的通信过程和图像类似。文本的话不需要使用文件存储。

上面的操作就需要讲文件上传到Bmob云服务,同样的需要创建会话纪录表,需要更新文件存储表

空间(朋友圈):这里以微信朋友圈为模版,可以查看所有好友动态,同时可以单独查看个人动态,也可单独查看某个好友动态,这些动态均以时间先后的顺序查看,由最近的开始。这里采用独立的存储方式,一个好友一个动态信息表。朋友圈使用bmob提供的云端代码结合实现。当请求朋友圈的同时,调用云端代码从bmob云上查询好友朋友圈,当然朋友圈包含的应该有好友动态以及评论。使用云端代码将动态组织成html形式或返回自定义的数据结构列表(如json数据),将其返回给请求者。


这里有两种解决方案,一种是每次请求根据好友信息表来获取;一种是使用定时任务的方式来动态的更新定时任务表,当需要查看动态(朋友圈)的时候则直接读取对应的定时任务存储表即可。

由于朋友圈还包含了自己的动态以及好友动态,对好友动态应该可以评论,同样可以查看自己的动态纪录以及被评论记录,查看自己的动态则直接获取自己的动态表即可;当需要对好友动态进行评论时,则评论的内容将会根据好友表找到对应的动态表更项将该动态更新。