获取设备信息,生成设备唯一码,注册推送服务获取pushToken
避免应用权限等问题,
设备唯一码
使用自主生成,本地缓存的方式处理。sdk初始化时,读取
设备唯一码
缓存,如果存在则直接使用,如果不存在则重新生成并且保存。
获取设备信息,获取唯一码。目的区分登录设备。
客户端用户登录之后,使用
userId
调用sdk注册接口,获取account
以及IM服务器信息
。然后订阅该account
对应的消息通道这一步,可以定义一些非必传信息,比如
userName
一类,后续用户数据展示的时候方便一些。
服务端根据设备类型(type)、唯一码(uuid)、userId等信息,生成对应account。
1.
type
和uuid
都一样,但是userId
不同,代表用户同一设备切换了登录用户。重新生成account,之前的account需要废除。2.
userId
相同,type
或uuid
不同,代表同一用户,在不同设备登录。这时需要发送异地登录消息。
移动端注册服务时,需要配置是否需要互踢,(同类型设备互踢、所有设备互踢)-----这个配置放在哪里比较合适?
这配置主要用来服务端注销推送服务,互踢的情况下,后登录的app端可以收到推送,前面登录的收不到。
真实的互踢功能,需要客户端根据
异地登录消息
自行开发。
客户端调用sdk发消息的api。sdk封装消息体,与服务端交互。
单聊
:直接转发;群聊
:服务端改变消息体结构,轮询转发。服务端对消息做转发处理。
存档
、屏蔽词
等在这里处理。
推送相关操作在这里进行
如果存在需要改变状态的消息,可以发送自定义消息,自定义消息体,判断id是否相同。
sdk收到消息后,app端存表,之后发出消息到达通知,其它端直接发送通知。
通知需携带消息内容
需要考虑,推送机制,聊天消息,是否每条都要发送推送。
或者考虑sdk开放配置,客户端决定自己的推送时机
这一类消息大多是第三方服务直接构建消息体,调用服务端api发送。
服务端需要做应用维护,分发appId,做autoToken生成机制,用来调用接口
这一类消息产生的需求,单人推送和群推送,需要服务端暴漏接口,用来做群组,成员标签相关的处理。
应用消息和通知类,是需要做推送的。
需要用户定义消息栏点击操作,打开应用,跳转指定页面,打开网页等。
历史消息是一个时间段查询,随意定义开始结束时间,可以选择指定成员。
离线消息,是截至某一时间之后的所有新消息,需要前端维护这个差分时间。
使用场景大多为,用户退出登录、客户端切换账号等。
切换账号客户端需要维护,但是服务端需要判断设备唯一码与userId的关系,避免一台机器同时收到两个用户的消息。
考虑一个场景,用户想要主动关闭推送的话,给一个配置。
延伸出一个场景,免打扰模式,定义时间段内不接受推送。
日志部分,可以使用im直接传输到服务端。
app端sdk,考虑集成数据库模块,提高相应速率,增加容错率。
比如用户单聊,打开页面直接就可以看到数据。省区调用接口的时间。
使用声网sdk完成,做成独立模块,后续如果需要更换,可以直接拔插。
以单聊举例:
a对b发起视频聊天,sdk所做的事情为:生成一个声网房间号,a用户加入该房间,发送im邀请通知。
b用户收到通知后,弹出邀请界面,如果接通,则直接进入消息携带的房间号,完成通话。
拒绝,超时等场景,根据实际情况设计。
考虑选择图片、选择文件、音视频通话,sdk定义一套基础页面,客户端可以选择直接使用,或者自定义UI界面。
应用自启,后台进程锁引导等