会话服务

会话服务提供对会话的查询、删除和更新操作,SDK只提供接口,需要开发人员手动调用。会话列表与最近会话之间不相互影响。

会话RecentSession ,也可称作会话列表或者最近联系人列表,它记录了与用户最近有过会话的联系人信息,包括联系人帐号、最近一条消息的时间、扩展字段、消息内容等信息。

RecentSession 接口说明:

返回值 RecentSession 接口 说明
String getSessionId() 获取会话的ID(好友帐号,群ID等)
long getUpdateTime() 获取最近一条消息的时间戳
String getExt() 获取扩展字段
String getLastMsg() 获取最后一条消息的Json字符串

会话列表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);
参数 说明
account 最小时间戳,增量获取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();
            }
        });