家校通业务中的角色有四种:管理员、教师、家长、学生。 考虑到本产品的目标用户集中在小学校,因此学生角色不能登录客户端。
教师、家长主要登录客户端使用业务。 管理员主要使用 web 端发布通知。
- 教室可以发布通知
- 布置作业
- 交流**(正在做)**
- 公布成绩
待讨论:
- 学生安全签到系统
jpush(极光推送)
推送限制为 1K,因此想要靠推送实现发送消息的想法不能实现。
为了解决该问题,我们使用推送来告诉客户端有新消息通知,当然这个消息可能是聊天消息、好友添加消息、通知消息等。
推送中包含该消息的id,凭借此 id,客户端可以从接口获取到具体的 Message
。然后判断该消息类型,进一步处理该消息。
客户端数据库保存好友列表、历史聊天记录,暂时不保存公告,想要查看公告,需要使用服务端提供的接口获取
- ChatMessageDao 用于获取保存历史聊天记录
- 数据库中角色的设计。
我们的系统中存在 学生、家长、老师 三种角色。其中 学生是不能登录的,只是连接老师与家长的媒介。
经过商定,决定仅仅使用 Person 类, person 类中有个 type 标志,指明了是学生还是老师或者是家长。
极光推送消息的最长等待时间为 10 天,也就是说超过这个时间,即使客户端上线,也不会推送消息。
解决方案:
讨论中
为了能够实现添加好友的功能,服务端必须有一个消息队列。
** 讨论中**
老师与家长采用的是一种订阅关系,家长可以根据学生来订阅老师。
当订阅成功后,家长就会成功进入到老师的圈子中。
本设计以老师为中心,每个老师一个圈子,如果老师教多个班级,则多个班级都会在同一个圈子。
老师可以统一发给所有家长,也可以给统一发给指定班级,更甚者,可以指定发给具体家长。
当发送消息给指定家长,老师与家长的关系就变成了同等级的聊天。
家长不可以在圈子中发送消息,只可以私信老师,如果老师觉得之前的通知有不妥,可以补充发送。
目前想要的设计是,注销后,删除android 客户端所在的 jpush alias,但是如果找不到 alias时,server调用jpush sdk发送message 会报错。
**讨论中**
在一台 android 机上测试, 2 发给3, 因为使用2发,所以3不在线,导致消息发送不到3,即使再使用3登录(详见问题 4) 但为什么能显示聊天记录呢,因为 2发送给3时保存了一份,由于使用 fromAccount和 toAccount 的 or 方法查询,因此换另一个号也能查询到。
**讨论中**
决定每次更新会话 listview 时,在 adapter 中从数据库加载 nick 等信息。
为了效率,只有在第一次创建历史会话时,加载好友 nick等信息,而之后不会变。 如果需要更新,需要更新客户端中的 RecentChat 数据库。
由于本应用的特殊性,不需要加好友就可以直接发送消息这时:
接受方: nick 设置为帐号, 其他的信息就是空
发送方: 发送前需要保证对方的信息已经获取