服务端会话服务

服务端会话服务与本地最近会话不同,其提供了新的会话列表获取服务,需要从云端拉取,不支持同步到本地最近会话列表。

服务端最近会话对象原型为 RecentSession ,它记录了与用户最近有过会话的联系人信息,包括联系人帐号、最近一条消息的时间、扩展字段、消息内容等信息。

RecentSession接口说明

返回值 RecentSession 接口 说明
String getSessionId() 获取会话的ID(好友帐号,群ID等)
long getUpdateTime() 获取最近一条消息的时间戳
String getExt() 获取扩展字段
String getLastMsg() 获取最后一条消息的Json字符串
RevokeMsgNotification getRevokeNotification() 最后一条消息为撤回通知时,返回不是null
此时,可通过此接口获得一个RevokeMsgNotification实例,里面只有部分内容,或者为空
RecentContact toRecentContact 新建带有RecentSession信息的RecentContact
Pair<SessionTypeEnum, String> parseSessionId 从session中分离出会话id和会话类型
int getLastMsgType 最近一条消息的类型,0或者缺失表示普通消息,1表示消息撤回通知

服务端会话列表 RecentSessionList,记录了一页 RecentSession 数据,和是否有更早消息的提示。

RecentSessionList 接口说明:

返回值 RecentSessionList 接口 说明
boolean hasMore() 是否有更早的消息
List<RecentSession> getSessionList() 拉到的一页会话列表

获取会话列表

/**
 * 【会话服务】增量获取会话列表,增量+翻页
 *
 * @param minTimestamp 最小时间戳,作为请求参数时表示增量获取Session列表,传0表示全量获取
 * @param maxTimestamp 最大时间戳,翻页时使用
 * @param needLastMsg  是否需要lastMsg,0或者1,默认1
 * @param limit        结果集limit,最大100,默认100
 * @param hasMore      结果集是否完整,0或者1
 * @return InvocationFuture
 * @see com.netease.nimlib.biz.constant.ITalkService.SessionReqTag
 */
InvocationFuture<RecentSessionList> queryMySessionList(long minTimestamp, Long maxTimestamp, Integer needLastMsg, Integer limit, Integer hasMore);
参数 说明
minTimestamp 最小时间戳,增量获取Session列表,传0表示全量获取
maxTimestamp 最大时间戳,翻页时使用
needLastMsg 是否需要lastMsg,0或者1,默认1
limit 结果集limit,最大100,默认100
hasMore 结果是否完整,0或1
NIMClient.getService(MsgService.class).queryMySessionList(startTime, endTime, 1, queryAmount, 1).setCallback(new RequestMySessionListCallback(queryAmount, startTime, this::showSessionList));

获取指定会话

/**
 * 【会话服务】获取某一个会话
 *
 * @param sessionId 分为p2p/team/superTeam,格式分别是:p2p|accid、team|tid、super_team|tid
 * @return InvocationFuture
 * @see com.netease.nimlib.biz.constant.ITalkService.SessionTag
 */
InvocationFuture<RecentSession> queryMySession(@NonNull String sessionId);
参数 说明
sessionId 分为p2p/team/superTeam
NIMClient.getService(MsgService.class).queryMySession(sessionId).setCallback(new RequestCallback<RecentSession>() {
            @Override
            public void onSuccess(RecentSession param) {
                resultTV.setText(sessionToString(param));
            }

            @Override
            public void onFailed(int code) {
                Toast.makeText(SessionActivity2.this, "获取单条会话失败, code=" + code, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onException(Throwable exception) {
                exception.printStackTrace();
                Toast.makeText(SessionActivity2.this, "获取单条会话出现异常, msg=" + exception.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });

修改服务端会话扩展

/**
 * 【会话服务】更新某一个会话,主要是设置会话的ext字段,如果会话不存在,则会创建出来,此时会话没有lastMsg
 *
 * @param sessionId 分为p2p/team/superTeam,格式分别是:p2p|accid、team|tid、super_team|tid
 * @param ext       会话的扩展字段,仅自己可见
 * @return InvocationFuture
 * @see com.netease.nimlib.biz.constant.ITalkService.SessionTag
 */
InvocationFuture<Void> updateMySession(@NonNull String sessionId, @NonNull String ext);
参数 说明
sessionId 分为p2p/team/superTeam
ext 会话的扩展字段,仅自己可见
NIMClient.getService(MsgService.class).updateMySession(sessionIdET.getText().toString(), extET.getText().toString()).setCallback(new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void param) {
                Toast.makeText(SessionActivity2.this, "更新会话成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailed(int code) {
                Toast.makeText(SessionActivity2.this, "更新会话失败, code=" + code, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onException(Throwable exception) {
                Toast.makeText(SessionActivity2.this, "更新会话出现异常, msg=" + exception.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });

删除服务端会话

/**
* 【会话服务】删除会话
*
* @param sessionIdArr 每一项的格式:分为p2p/team/superTeam,格式分别是:p2p|accid、team|tid、super_team|tid
* @return InvocationFuture
* @see com.netease.nimlib.biz.constant.ITalkService.SessionTag
*/
InvocationFuture<Void> deleteMySession(@NonNull String[] sessionIdArr);
参数 说明
sessionIdArr 每一项:分别为p2p/team/superTeam
NIMClient.getService(MsgService.class).deleteMySession(selectedArr).setCallback(new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void param) {
                Toast.makeText(SessionActivity2.this, "删除会话成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailed(int code) {
                Toast.makeText(SessionActivity2.this, "删除会话失败, code=" + code, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onException(Throwable exception) {
                exception.printStackTrace();
                Toast.makeText(SessionActivity2.this, "删除会话出现异常, msg=" + exception.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });