本文介绍DPSError定义、错误信息分析和错误码查询。

DPSError

AIMSDK接口返回的错误信息统一使用DPSError结构体保存,要理解接口返回的错误信息首先要了解DPSError的定义。

下面分别给出C++、Objective-C、Java的定义:

  • C++
    /**
     * DPSError
     */
    struct DPSError final {
      DPSErrDomain domain = DPSErrDomain::DPS_ERR_DOMAIN_CLIENT;
      /**
       * 错误值
       * 如果domain为client,错误值来源于客户端SDK
       * 如果domain为server,错误值请咨询服务端
       */
      int32_t code = 0;
      std::string developer_message;
      /**
       * 以下成员只有在domain为server时有效
       */
      std::string reason;
      std::string extra_info;
      std::string scope;
    };
  • Objective-C
    /**
     * DPSError
     */
    @interface DPSError : NSObject
    @property(nonatomic) DPSErrDomain domain;
    
    /**
     * 错误值
     * 如果domain为client,错误值来源于客户端SDK
     * 如果domain为server,错误值请咨询服务端
     */
    @property(nonatomic) int32_t code;
    
    @property(nonatomic, nonnull) NSString *developerMessage;
    
    /**
     * 以下成员只有在domain为server时有效
     */
    @property(nonatomic, nonnull) NSString *reason;
    
    @property(nonatomic, nonnull) NSString *extraInfo;
    
    @property(nonatomic, nonnull) NSString *scope;
  • Java
    /**
     * DPSError
     */
    public final class DPSError implements java.io.Serializable {
      public DPSErrDomain domain = DPSErrDomain.DPS_ERR_DOMAIN_CLIENT;
      /**
       * 错误值
       * 如果domain为client,错误值来源于客户端SDK
       * 如果domain为server,错误值请咨询服务端
       */
      public int code = 0;
      public String developerMessage;
      /**
       * 以下成员只有在domain为server时有效
       */
      public String reason;
      public String extraInfo;
      public String scope;
    
      public DPSErrDomain getDomain() { return domain; }
    
      /**
       * 错误值
       * 如果domain为client,错误值请参考DPS_Err_ClientCode
       * 如果domain为server,错误值请咨询服务端
       */
      public int getCode() { return code; }
    
      public String getDeveloperMessage() { return developerMessage; }
    
      /**
       * 以下成员只有在domain为server时有效
       */
      public String getReason() { return reason; }
    
      public String getExtraInfo() { return extraInfo; }
    
      public String getScope() { return scope; }
    }

错误信息分析

首先我们通过domain字段判断这个错误是来自客户端还是来自服务端。
错误码字段描述见下表。
字段名 说明
scope 产生错误码的子模块,用于快速判断范围,提升效率,目前有如下scope。
服务端错误时:
  • IM:IM服务端产生的错误。
  • IMPaaSApp:业务服务端产生的错误。
客户端错误时:
  • IMSDK:IMSDK产生的错误。
  • IMBizClient:业务客户端产生的,一般由IMSDK回调业务客户端时产生。
  • 其他业务SDK错误。
code 错误码,在scope范围内唯一。
reason 错误的文本描述,可能会变化。
extra_info 错误更详细的信息。
developerMessage 开发者排查信息。

客户端基础错误码查询

错误值 错误类型 说明 其他
0 DPS_ERR_SUCCESS [DPS]成功 通用错误
1 DPS_ERR_NOTENABLED [DPS]禁止调用
2 DPS_ERR_NOTSUPPORT [DPS]功能不支持
3 DPS_ERR_INVALIDARG [DPS]参数错误
10 DPS_ENGINE_IS_NULL [DPS]DPSEngine实例不存在 引擎模块
11 DPS_ENGINE_ALREADY_EXIST [DPS]DPSEngine重复创建
12 DPS_ENGINE_NOT_START [DPS]DPSEngine未启动
13 DPS_SETTING_NOT_READY [DPS]DPSSettingService有必填值未填写
14 DPS_CREATE_MANAGER_FAILED [DPS]DPSManager创建失败
15 DPS_MANAGER_INIT_FAILED [DPS]DPSManager初始化失败
16 DPS_MANAGER_NOT_EXIST [DPS]DPSManager实例不存在
17 DPS_AUTH_IS_NULL [DPS]DPSAuthService实例不存在
18 DPS_SYNC_IS_NULL [DPS]DPSSyncService实例不存在
19 DPS_UT_IS_NULL [DPS]DPSUtService实例不存在
20 DPS_RPC_IS_NULL [DPS]DPSRpcService实例不存在
50 AUTH_AUTH_IS_NULL [AUTH]实例不存在 登录模块
51 AUTH_UA_IS_NULL [AUTH]网络实例不存在
52 AUTH_GET_TOKEN_CB_IS_NULL [AUTH]AuthTokenCallback回调为空
53 AUTH_GET_TOKEN_FAILED [AUTH]AuthTokenCallback回调方法返回错误
54 AUTH_GET_TOKEN_TOO_FREQUENTLY [AUTH]AuthTokenCallback调用太频繁被流控
55 AUTH_TOKEN_EMPTY [AUTH]token为空
56 AUTH_TOKEN_EXPIRED [AUTH]token已过期
57 AUTH_NOT_INIT [AUTH]未初始化
58 AUTH_NOT_AUTH_YET [AUTH]未登录
100 DB_MANAGER_NOT_EXIST [DB]实例不存在 数据库模块
101 DB_GET_VERSION_FAILED [DB]获取数据库版本异常
102 DB_ASYNC_EXEC_TIMEOUT [DB]异步执行超时
103 DB_SQL_ERROR [DB]SQL执行失败
104 DB_OPEN_MALFORMED [DB]数据库文件损坏
105 DB_FULL [DB]磁盘已满,数据写入失败
106 DB_MAILFORMED [DB]数据库损坏且无法自动恢复
107 DB_NO_MEMORY [DB]数据库运行期间内存不足
108 DB_ENCRYPTION_KEY_ERROR [DB]数据库密钥错误
150 RESET_USER_DATA_INVALID_PARAM [USERDATA]清理用户数据参数错误 数据缓存模块
151 RESET_USER_DATA_USER_IS_RUNNING [USERDATA]账号正在使用
152 RESET_USER_DATA_FAILED_TO_RESET [USERDATA]用户目录删除失败,可能被占用或无法删除
100001 NET_ERR_INVALID_PARAM [NET]网络参数错误 网络模块
100002 NET_ERR_INVALID_OPERATION [NET]网络操作异常
100003 NET_ERR_TIMEOUT [NET]网络超时
100004 NET_ERR_NETWORK_EXCEPTION [NET]网络异常
100005 NET_ERR_NO_AUTHTOKEN [NET]找不到token
100006 NET_ERR_NOT_CONNECTED [NET]网络未连接
100007 NET_ERR_IS_AUTHING [NET]正在登录
100008 NET_ERR_IS_AUTHED [NET]已经登录
100009 NET_ERR_TOKEN_EMPTY [NET]token为空
100010 NET_ERR_UNKNOWN [NET]未知错误
100011 NET_ERR_UNPACK_EXCEPTION [NET]网络包错误
100012 NET_ERR_CODE_REASON_NOT_SET [NET]服务端未指定错误原因
100013 NET_ERR_LOGOUT [NET]账号已退出
100014 NET_ERR_NETWORK_UNAVAILABLE [NET]当前网络不可用
100015 NET_ERR_SEND_ERROR [NET]发送请求失败
200000 SQLITE_OK 成功 sqllite错误(SDK透传)
200001 SQLITE_ERROR SQL错误或丢失数据库
200002 SQLITE_INTERNAL SQLite内部逻辑错误
200003 SQLITE_PERM
200004 SQLITE_ABORT
200005 SQLITE_BUSY
200006 SQLITE_LOCKED
200007 SQLITE_NOMEM
200008 SQLITE_READONLY
200009 SQLITE_INTERRUPT
200010 SQLITE_IOERR
200011 SQLITE_CORRUPT
200012 SQLITE_NOTFOUND
200013 SQLITE_FULL
200014 SQLITE_CANTOPEN
200015 SQLITE_PROTOCOL
200016 SQLITE_EMPTY
200017 SQLITE_SCHEMA
200018 SQLITE_TOOBIG
200019 SQLITE_CONSTRAINT
200020 SQLITE_MISMATCH
200021 SQLITE_MISUSE
200022 SQLITE_NOLFS
200023 SQLITE_AUTH
200024 SQLITE_FORMAT
200025 SQLITE_RANGE
200026 SQLITE_NOTADB
200027 SQLITE_NOTICE
200028 SQLITE_WARNING
200100 SQLITE_ROW
200101 SQLITE_DONE

客户端IM错误码查询

错误值 错误类型 说明
300 AIM_CONV_IS_NULL AIMConvService实例不存在
301 AIM_SEARCH_IS_NULL AIMSearchService实例不存在
302 AIM_MSG_IS_NULL AIMMsgService实例不存在
303 AIM_TRACE_IS_NULL AIMTraceService实例不存在
304 IM_MSG_IS_NULL 消息实例不存在
305 IM_LIST_MSG_FAILED 拉取消息失败
306 IM_SYNC_READ_FAILED 消息已读状态写入失败
307 IM_SYNC_EXT_FAILED 写入消息扩展失败
308 IM_MSG_MERGE_FAILED 合并消息失败
309 IM_MSG_TEXT_EMPTY 消息内容为空
310 IM_CONV_IS_NULL 会话实例不存在
311 IM_GET_CONV_FAILED 找不到会话
312 IM_RECALL_MSG_FAILED 撤回消息失败
313 IM_MSG_HOOK_FAILED 外部消息Hook回调发生错误
314 IM_UNPCAK_FAILED 数据unpack失败
500 SEARCH_DB_FAILED 搜索数据库操作失败
501 SEARCH_FTS_FAILED FTS引擎操作失败
502 SEARCH_PARAMS_FAILED 搜索参数错误
503 SEARCH_FTS_NOT_INITIALIZED FTS引擎未初始化

IM业务服务端错误码查询

code reason 含义
500100001 system error 系统错误
400100001 parameter error 参数错误
400200001 not conversation owner 不是群主
400200002 conversation not exist 会话不存在
400200003 not in conversation 不在会话中
400300001 message not exist 消息不存在
400300002 not message sender 当前用户不是消息的发送方
400300003 recall overtime message 撤回超时
400300004 uuid repeated uuid重复
400300005 message has been recalled 消息被撤回
400400001 group chat dismissed 群聊已解散
400400002 group members exceed limit 群成员满
400400003 too many members of join group 加群成员过多
400600001 The request has been flow controled 触发限流
500000 default security code 默认安全错误码