Ye Plugins

介绍

注:不是聊天项目!不是聊天项目!不是聊天项目! YeIM-Uni-SDK 只是SDK,通过使用SDK里的一系列接口可实现聊天,跟环信、融云、腾讯云即时通信等等类似的一种可实现聊天的IMSDK。

YeIM-Uni-SDK是可以私有化部署全开源即时通讯js-sdk,仅需集成 SDK 即可轻松实现聊天能力,支持Web、uni-app接入使用,满足通信需要。

支持私聊和群聊,支持发送的消息类型:文字消息、图片消息、语音消息、视频消息、位置消息、自定义消息。

必须搭配YeIM-Uni-Server服务端,开箱即用。

支持哪些端?

@version 1.2.0 开始支持非uni编译的Web端

YeIM-Uni-SDKJavaScript构建,支持Web端、uni-app端的项目接入使用。

当项目在uni环境打包,SDK将使用uni-app API,否则使用JS相关API,详情可查看源码。

作为通用JSSDK,YeIM-Uni-SDK支持包括不限于H5(uni和非uni环境均可)、Android APP、iOS APP、微信小程序、字节小程序、支付宝小程序、百度小程序(仅限uni环境)等平台项目。

反馈与共建

YeIM-Uni-Server

简介

YeIM-Uni-ServerYeIM-Uni-SDK的服务端,其由SpringBoot框架编写,MySQL作为数据库,使用MyBatis-Plus持久层框架简化开发。

源代码

Github:https://github.com/wzJun1/YeIM-Uni-Server

Gitee:https://gitee.com/wzJun1/YeIM-Uni-Server

启动服务端

本地测试启动

  • 下载或克隆YeIM-Uni-Server到本地
  • 安装并创建MySQL数据库(开发环境5.7),导入database.sql
  • 安装Redis
  • 导入项目到IntelliJ IDEA
  • 根据application.properties提示,找到开发环境配置文件(dev),修改MySQL、Redis、Storage相关参数,如果需要发送图片等媒体消息,需要配置上传仓库(Storage)相关的参数,详情看下方配置文件
  • 启动项目

启动完成后,根据实际情况可获得Http和WebSocket的url:

http://你的IP地址:10010
ws://你的IP地址:10010/im

YeIM-Uni-SDK将使用这两个url进行初始化。

打包成jar放到服务器启动

  • 下载或克隆YeIM-Uni-Server到本地
  • 导入项目到开发工具IntelliJ IDEA
  • 在服务器中创建MySQL数据库(开发环境5.7),导入database.sql
  • 服务器中安装Redis
  • 根据application.properties提示,找到开发环境配置文件(prod),修改MySQL、Redis、Storage相关参数,如果需要发送图片等媒体消息,需要配置上传仓库(Storage)相关的参数,详情看下方配置文件
  • 使用Maven打包成jar包,如下图
  • 得到jar包,在项目根目录的target目录下,如:target/yeimServer-1.1.3.jar
  • 将得到的jar包上传到服务器上运行,运行命令:java -jar yeimServer-1.1.3.jar

application.properties

注:如编辑器打开后注释中文乱码,请修改编辑器打开当前文件时的编码。如IDEA可在 Settings -> Editor -> File-Encodings -> 勾选 Transparent native-to-ascii conversion,选择 Default Encoding 为 UTF-8 后保存

服务端部分配置参数说明

1. server.port

必填

项目端口号。Http和WebSocket均为此端口

2. spring.datasource.driver-class-name

必填

数据源驱动类名。默认:com.p6spy.engine.spy.P6SpyDriver,项目使用p6spy实时调试SQL,如果上线了不需要可以修改为:com.mysql.cj.jdbc.Driver

3. spring.datasource.url

必填

JDBC URL,数据库URL配置。默认:jdbc:p6spy:mysql://localhost:3306/yeim,项目使用p6spy实时调试SQL,如果上线了不需要可以修改为:jdbc:mysql://localhost:3306/yeim

其中yeim为数据库名称

4. spring.datasource.username

必填

数据库用户名

5. spring.datasource.password

必填

数据库密码

6. yeim.redis.prefix

必填

Redis缓存前缀

7. yeim.secret.key

必填

类似salt,盐。作用是密文拼接后再次加密存储,使存储在数据库中的密码更加安全,可自行修改。

8. yeim.file.storage.type

必填

上传存储库类型

如果项目需要使用到发送图片等媒体消息接口,则需要填入相关参数。

目前支持本地存储、腾讯云对象存储COS、阿里云对象存储OSS

可选项

类型说明
local本地存储
cos腾讯云对象存储
腾讯云COS媒体处理需开启万象功能,否则无法正常使用媒体消息接口:https://cloud.tencent.com/document/product/460/10511
oss阿里云对象存储

9. yeim.file.storage.customDomain

非必填

资源访问(对象存储/仓库)自定义域名。例如:https://www.baidu.com

10. yeim.file.storage.bucket

非必填

公有云对象存储空间名称

11. yeim.file.storage.region

非必填

存储空间所在地区简称。例如腾讯云COS选择的是广州,则简称为:ap-guangzhou

腾讯云COS地域通览:https://cloud.tencent.com/document/product/436/6224

阿里云OSS地域通览:https://help.aliyun.com/document_detail/31837.htm?spm=a2c4g.11186623.0.0.15c67e34tDuIEr#concept-zt4-cvy-5db

12. yeim.file.storage.baseDir

type为local时必填

存储仓库文件保存的根目录

如果上传仓库类型为本地(local),请填写且必须填写上传文件保存的根目录。例如:/root/resource (Linux) 或 C:\Users\Administrator\Desktop\im\resource (Windows)

如果是公有云对象存储,请填写或不填写对象存储的保存目录,例如:/im/resource 或 im/resource

文件保存的实际路径将会根据所填写的baseDir + 文件类型 + 日期 + 文件名称

举例:上传仓库为阿里云OSS,baseDir填写为:/im/resource,上传了一张图片,则此图片的保存路径为:/im/resource/image/20221206/图片.JPG

12. yeim.file.storage.secretId

非必填

云API密钥

腾讯云查看:https://console.cloud.tencent.com/cam/capi

阿里云查看:https://ram.console.aliyun.com/manage/ak

13. yeim.file.storage.secretKey

非必填

云API密钥

腾讯云查看:https://console.cloud.tencent.com/cam/capi

阿里云查看:https://ram.console.aliyun.com/manage/ak

14. yeim.generator.workId

必填

分布式ID生成器节点ID,数字类型。详情查看:https://github.com/yitter/IdGenerator

15. yeim.push.enable

是否开启离线消息推送,可选值:true和false

16. yeim.push.type

推送SDK类型,目前仅支持个推。请填写:getui

17. yeim.push.gt.appId

appId,可在Dcloud开发者后台查询

18. yeim.push.gt.appKey

appKey,可在Dcloud开发者后台查询

19. yeim.push.gt.masterSecret

masterSecret,可在Dcloud开发者后台查询

20. yeim.push.oppoChannelId

OPPO私信推送渠道ID,详情查看:https://open.oppomobile.com/new/developmentDoc/info?id=11227

21. yeim.push.xiaomiChannelId

小米重要类别推送渠道ID,一般情况下申请成功后,默认为:high_system

22. yeim.friend.enable

是否开启好友关系检查,开启后发送消息将检查是否是好友关系,不是好友关系无法发送消息。默认值:false

wss加密协议

YeIM-Uni-Server启动后,会同时启动WebSocket服务,YeIM-Uni-SDK也将使用WebSocket进行连接收发消息,为了避免安全问题以及适配微信小程序端(微信小程序WebSocket必须使用wss协议),我们可以使用 nginx 来套一层SSL。

WebSocket使用 ws 或 wss 的统一资源标志符,类似于 HTTP 或 HTTPS,其中 wss 表示在 TLS 之上的 WebSocket,相当于 HTTPS。

Nginx 配置域名支持 WSS

此处/im为单独设置WebSocket路径,如果和http放在一起,可以直接写/,如下完整的conf

location /im {
proxy_pass http://本地IP:10010;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

重要的就是以下两句代码,将http请求提升为WebSocket。

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

完整的conf

server
{
listen 80;
listen 443 ssl http2;
server_name 你的域名;
index index.html index.htm default.htm default.html;
root /www/wwwroot/yeimServer-1;
#SSL-START SSL相关配置
#error_page 404/404.html;
ssl_certificate /www/server/panel/vhost/cert/yeimServer-1/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/yeimServer-1/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页相关配置
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#REWRITE-START 伪静态相关配置
include /www/server/panel/vhost/rewrite/java_yeimServer-1.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md|package.json|package-lock.json|\.env) {
return 404;
}
#一键申请SSL证书验证目录相关设置
location /.well-known/ {
root /www/wwwroot/java_node_ssl;
}
#禁止在证书验证目录放入敏感文件
if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
return 403;
}
# HTTP反向代理相关配置开始 >>>
location ~ /purge(/.*) {
proxy_cache_purge cache_one $Host$request_uri$is_args$args;
}
location / {
proxy_pass http://127.0.0.1:10010;
proxy_set_header Host $Host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
proxy_set_header X-Host $host:$server_port;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 30s;
proxy_read_timeout 86400s;
proxy_send_timeout 30s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# HTTP反向代理相关配置结束 <<<
access_log /www/wwwlogs/yeimServer-1.log;
error_log /www/wwwlogs/yeimServer-1.error.log;
}

如果你的服务器有宝塔面板,并且安装了Nginx,有更加简单的做法:将YeIM-Uni-Server打包为jar,在宝塔面板中选择Java项目->添加Java项目,创建完成后点配置,申请SSL,完成。此操作会自动添加SSL,并且宝塔的Nginx配置会自动提升Upgrade。

关于Nginx中Http转WebSocket,更具体文档详见 Nginx 官方文档:http://nginx.org/en/docs/http/websocket.html

服务端接口调试

注:使用YeIM-Uni-SDK时,因为安全等问题,有一部分接口不被客户端SDK提供,由此我们提供服务端HTTP API进行多系统交互,或有能力的开发者可将自身系统与YeIM-Uni-Server打通。

下面使用PostMan调试服务端YeIM-Uni-Server相关接口,实际项目中可根据情况进行本地http调用

PostMan API JSON:点此查看PostMan接口文档,可使用PostMan导入此JSON文件查看详细后端API,不定时更新

http - 注册用户

用户必须注册才能登陆。

接口地址:

http://你的server地址:你的server端口/user/register

请求方式:POST

请求头:

Content-Type:application/json

请求参数:

参数名类型是否必传说明平台差异
userIdString请求注册的用户ID字符串,IM系统内唯一
nicknameString请求注册的用户昵称
avatarUrlString请求注册的用户头像网络地址
genderNumber性别
  • 0:未知
  • 1:男性
  • 2:女性
  • 1.2.2
    mobileNumber电话1.2.2
    emailString邮箱1.2.2
    birthdayString生日1.2.2
    mottoString个性签名1.2.2
    extendString用户自定义扩展字段1.2.2
    addFriendTypeNumber好友添加的方式
  • 1:允许任何人添加自己为好友
  • 2:需要经过自己确认才能添加自己为好友
  • 3:拒绝加好友
  • 1.2.0

    请求例子:

    POST /user/register HTTP/1.1
    Host: 你的server地址:你的server端口/user/register
    Date: GMT Date
    Content-Type: application/json
    Content-Length: Content Length
    {
    "userId":"user_123456789",
    "nickname":"小明",
    "avatarUrl":"https://api.multiavatar.com/Starcrasher.png"
    }

    响应:

    {
    "code": 200,
    "message": "success",
    "data": null
    }

    PostMan截图:

    http - 换取登陆token

    注:已注册用户才可以使用此接口换取登陆token。

    在客户端YeIM-Uni-SDK中使用connect接口传入登陆token进行用户登陆操作。

    接口地址:

    http://你的server地址:你的server端口/user/token/get

    请求方式:POST

    请求头:

    Content-Type: application/json

    请求参数:

    参数名类型是否必传说明平台差异
    userIdString已注册的用户ID字符串
    timestampNumberToken过期时间戳,毫秒级
    signString加密签名,使用userId、timestamp、yeim.secret.key拼接的字符串进行MD5加密,例:md5(userId+timestamp+yeim.secret.key)

    请求例子:

    POST /user/token/get HTTP/1.1
    Host: 你的server地址:你的server端口/user/token/get
    Date: GMT Date
    Content-Type: application/json
    Content-Length: Content Length
    {
    "userId":"user_123456789",
    "timestamp":1671429749000,
    "sign":"14b978ad88894af7b9c5071d55b5e0cb"
    }

    响应:

    {
    "code": 200,
    "message": "success",
    "data": {
    "token": "3896c6e9eb4e5f18601a83fc624455e5"
    }
    }

    PostMan截图:

    http - 更新用户资料

    更新用户资料,请求头中需包含登陆token

    客户端YeIM-Uni-SDKupdateUserInfo同样使用此接口。

    接口地址:

    http://你的server地址:你的server端口/user/update

    请求方式:POST

    请求头:

    Content-Type: application/json
    Token:3896c6e9eb4e5f18601a83fc624455e5

    请求参数:

    参数名类型是否必传说明平台差异
    nicknameString用户昵称
    avatarUrlString用户头像网络地址
    genderNumber性别
  • 0:未知
  • 1:男性
  • 2:女性
  • 1.2.2
    mobileNumber电话1.2.2
    emailString邮箱1.2.2
    birthdayString生日1.2.2
    mottoString个性签名1.2.2
    extendString用户自定义扩展字段1.2.2
    addFriendTypeNumber好友添加的方式
  • 1:允许任何人添加自己为好友
  • 2:需要经过自己确认才能添加自己为好友
  • 3:拒绝加好友
  • 1.2.0

    请求例子:

    POST /user/update HTTP/1.1
    Host: 你的server地址:你的server端口/user/update
    Date: GMT Date
    Token:3896c6e9eb4e5f18601a83fc624455e5
    Content-Type: application/json
    Content-Length: Content Length
    {
    "nickname":"小红",
    "avatarUrl":"https://api.multiavatar.com/Starcrasher.png"
    }

    响应:

    {
    "code": 200,
    "message": "success",
    "data": null
    }

    http - 更多接口

    更多PostMan API JSON:点此查看PostMan接口文档,可使用PostMan导入此JSON文件查看详细后端API,不定时更新

    YeIM-Uni-SDK

    @version 1.2.0 开始提供了完整的@types定义文件

    安装

    1. NPM安装

    uni-app项目根目录下终端执行以下命令:

    # 首次安装
    npm i yeim-uni-sdk
    # 更新
    npm update yeim-uni-sdk
    2. Hbuilder X 导入

    使用Hbuilder X开发的用户,可以在uni-app插件市场通过uni_modules的形式进行安装。

    https://ext.dcloud.net.cn/plugin?id=10148

    3. 源代码导入

    GitHub:https://github.com/wzJun1/YeIM-Uni-SDK

    Gitee:https://gitee.com/wzJun1/YeIM-Uni-SDK

    代码内引用

    // npm方式导入SDK
    import {
    YeIMUniSDK, // SDK
    YeIMUniSDKDefines // 预定义常量
    } from 'yeim-uni-sdk'
    //uni_modules方式导入SDK
    import {
    YeIMUniSDK, // SDK
    YeIMUniSDKDefines // 预定义常量
    } from './uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'

    初始化SDK

    init(options) -> Object

    静态方法,初始化YeIM-Uni-SDK,返回SDK实例,通过此实例调用SDK内一系列API。

    参数:

    字段类型必填默认说明
    baseURLStringYeIM-Uni-Server Http Url
  • 服务端Http请求URL
  • socketURLStringYeIM-Uni-Server WebSocket Url
  • 服务端WebSocket URL
  • logLevelNumber0SDK日志等级
  • 0:打印全部日志
  • 1:打印重要日志
  • 2:不打印日志
  • reConnectTotalNumber15最大重连次数,为0则不限制一直重连
    reConnectIntervalString3000断线重连时间间隔,单位:毫秒
    heartIntervalNumber30000Socket心跳时间间隔,单位:毫秒
    notificationObjectNotificationAPP离线通知配置
    Notification
    字段类型必填默认说明
    autoPermissionBooleanfalseIM登录后是否自动检测通知权限
    oppoChannelIdStringDefaultOPPO手机安卓8.0以上的通知渠道ID(需要申请,一般默认为Default)
    xiaomiChannelIdStringhigh_system小米手机重要级别消息通知渠道ID(需要申请,一般默认为high_system)

    演示:

    // main.js
    // npm方式导入SDK
    // import {
    // YeIMUniSDK, // SDK
    // YeIMUniSDKDefines // 预定义常量
    // } from 'yeim-uni-sdk'
    //uni_modules方式导入SDK
    import {
    YeIMUniSDK, // SDK
    YeIMUniSDKDefines // 预定义常量
    } from './uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'
    YeIMUniSDK.init({
    baseURL: 'http://192.168.110.101:10010', // YeIMServer http url (如无特殊需求,服务端启动后仅需修改ip或者域名即可)
    socketURL: 'ws://192.168.110.101:10010/im', // YeIMServer socket url(如无特殊需求,服务端启动后仅需修改ip或者域名即可)
    logLevel: 0, // SDK日志等级,0 = 打印全部日志, 1 = 打印重要日志,2 = 不打印日志
    reConnectInterval: 3000, // 断线重连时间间隔(遇到网络波动,IM服务端可能会断线,此时需要重新连接到服务端),单位:毫秒
    reConnectTotal: 0, // 最大重连次数,0不限制一直重连
    heartInterval: 30000, //心跳时间间隔(默认30秒),单位:毫秒
    notification: {
    autoPermission: true //IM登录后是否自动检测通知权限
    }
    });

    获取SDK实例

    getInstance() -> Object?

    静态方法,返回SDK实例。如未调用init初始化SDK,此方法将返回null。

    演示:

    // main.js
    // npm方式导入SDK
    // import {
    // YeIMUniSDK, // SDK
    // YeIMUniSDKDefines // 预定义常量
    // } from 'yeim-uni-sdk'
    //uni_modules方式导入SDK
    import {
    YeIMUniSDK, // SDK
    YeIMUniSDKDefines // 预定义常量
    } from './uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'
    let YeIM = YeIMUniSDK.getInstance();

    预定义常量

    YeIMUniSDKDefines

    // main.js
    // npm方式导入SDK
    // import {
    // YeIMUniSDK, // SDK
    // YeIMUniSDKDefines // 预定义常量
    // } from 'yeim-uni-sdk'
    //uni_modules方式导入SDK
    import {
    YeIMUniSDK, // SDK
    YeIMUniSDKDefines // 预定义常量
    } from './uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'
    //举例:
    let conversationType = YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE; //私聊会话类型

    1. EVENT(事件名称)

    1.1 NET_CHANGED

    网络状态变化

    1.2 CONVERSATION_LIST_CHANGED

    全量会话列表更新

    1.3 MESSAGE_RECEIVED

    收到WebSocket推送的新消息

    1.4 KICKED_OUT

    用户被踢下线,有相同且在线的userId使用connect接口登陆时触发

    1.5 PRIVATE_READ_RECEIPT

    私聊会话已读回执,对端调用 clearConversationUnread 接口 清除未读数上报已读状态,分发事件 PRIVATE_READ_RECEIPT

    1.6 MESSAGE_REVOKED

    撤回消息

    2. CONVERSATION_TYPE(会话类型)

    2.1 PRIVATE

    私聊

    YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE
    2.2 GROUP

    群聊

    YeIMUniSDKDefines.CONVERSATION_TYPE.GROUP

    3. MESSAGE_TYPE(消息类型)

    3.1 TEXT

    文本消息

    YeIMUniSDKDefines.MESSAGE_TYPE.TEXT
    3.2 IMAGE

    图片消息

    YeIMUniSDKDefines.MESSAGE_TYPE.IMAGE
    3.3 AUDIO

    语音消息

    YeIMUniSDKDefines.MESSAGE_TYPE.AUDIO
    3.4 VIDEO

    小视频消息

    YeIMUniSDKDefines.MESSAGE_TYPE.VIDEO
    3.5 LOCATION

    位置消息

    YeIMUniSDKDefines.MESSAGE_TYPE.LOCATION
    3.6 CUSTOM

    自定义消息

    YeIMUniSDKDefines.MESSAGE_TYPE.CUSTOM
    3.7 GROUP_SYS_NOTICE

    群聊系统通知

    YeIMUniSDKDefines.MESSAGE_TYPE.GROUP_SYS_NOTICE
    3.8 TEXT_AT

    群聊文本@消息

    YeIMUniSDKDefines.MESSAGE_TYPE.TEXT
    3.9 SYS_NOTICE

    私聊系统通知

    YeIMUniSDKDefines.MESSAGE_TYPE.SYS_NOTICE

    4. GROUP.JOINMODE 群组:入群申请处理方式

    4.1 FREE

    自有加入,不需要申请和审核,不需要被邀请人允许

    YeIMUniSDKDefines.GROUP.JOINMODE.FREE
    4.2 CHECK

    验证加入,需要申请,以及群主或管理员的同意才能入群

    YeIMUniSDKDefines.GROUP.JOINMODE.CHECK
    4.3 FORBIDDEN

    禁止加入

    YeIMUniSDKDefines.GROUP.JOINMODE.FORBIDDEN

    5. GROUP.JOINMODE 群组:入群申请处理结果

    5.1 PENDING

    待处理

    YeIMUniSDKDefines.GROUP.JOINMODE.PENDING
    5.2 AGREE

    同意

    YeIMUniSDKDefines.GROUP.JOINMODE.AGREE
    5.3 REFUSE

    拒绝

    YeIMUniSDKDefines.GROUP.JOINMODE.REFUSE

    5. USER.ADDFRIEND 用户:加好友验证方式

    5.1 ALLOW

    允许任何人添加自己为好友

    YeIMUniSDKDefines.USER.ADDFRIEND.ALLOW
    5.2 CONFIRM

    需要经过自己确认才能添加自己为好友

    YeIMUniSDKDefines.USER.ADDFRIEND.CONFIRM
    5.3 DENY

    拒绝加好友

    YeIMUniSDKDefines.USER.ADDFRIEND.DENY

    设置监听器

    // npm方式导入SDK
    // import {
    // YeIMUniSDK, // SDK
    // YeIMUniSDKDefines // 预定义常量
    // } from 'yeim-uni-sdk'
    //uni_modules方式导入SDK
    import {
    YeIMUniSDK, // SDK
    YeIMUniSDKDefines // 预定义常量
    } from '@/uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'
    //设置监听,建议使用具名函数
    //监听会话列表更新
    YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.CONVERSATION_LIST_CHANGED, (list) => {
    console.log("监听会话列表更新:")
    console.log(list)
    });
    //监听新消息接收
    YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.MESSAGE_RECEIVED, (list) => {
    console.log("收到新消息:")
    console.log(list)
    });
    //监听私聊会话已读回执,对端调用 clearConversationUnread 接口时触发
    YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.PRIVATE_READ_RECEIPT, (res) => {
    console.log("收到私聊会话已读回执:")
    console.log(res)
    });
    //监听消息撤回事件
    YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.MESSAGE_REVOKED, (res) => {
    console.log("收到消息撤回事件:")
    console.log(res)
    });
    //好友列表变化
    YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.FRIEND_LIST_CHANGED, (res) => {
    console.log("收到好友列表变化事件:")
    console.log(res)
    });
    //好友申请列表变化
    YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.FRIEND_APPLY_LIST_CHANGED, (res) => {
    console.log("收到好友申请列表变化事件:")
    console.log(res)
    });
    //好友申请被拒
    YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.FRIEND_APPLY_REFUSE, (res) => {
    console.log("收到好友申请被拒事件:")
    console.log(res)
    });
    //监听SDK网络连接状态
    YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.NET_CHANGED, (res) => {
    console.log("网络状态变化:" + res)
    });
    //监听登陆互踢,当同一用户重复登录时触发
    YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.KICKED_OUT, () => {
    console.log("用户被踢下线")
    });
    //添加一个网络状态变化的监听器
    YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.NET_CHANGED, this.netChanged);
    //移除了这个网络状态变化的监听器
    YeIMUniSDK.getInstance().removeEventListener(YeIMUniSDKDefines.EVENT.NET_CHANGED, this.netChanged);
    var netChanged = function(res){
    console.log("网络状态变化:" + res);
    }

    登陆和连接

    connect(options) -> Void

    实例方法,通过登录token连接YeIM-Uni-Server服务端,登陆IM。

    参数:

    字段类型必填默认说明
    userIdString已注册的用户ID字符串
    tokenString登录token,由请求服务端Http接口换取
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    // npm方式导入SDK
    // import {
    // YeIMUniSDK, // SDK
    // YeIMUniSDKDefines // 预定义常量
    // } from 'yeim-uni-sdk'
    //uni_modules方式导入SDK
    import {
    YeIMUniSDK, // SDK
    YeIMUniSDKDefines // 预定义常量
    } from '@/uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'
    YeIMUniSDK.getInstance().connect({
    userId: "已注册的用户ID字符串",
    token: "上述说明中通过http接口换取到的登陆token",
    success: (response) => {
    if (response.code === 200) {
    uni.showToast({
    title: "登录成功"
    })
    //TODO 根据项目实际情况 用户信息存到状态、缓存
    } else {
    uni.showToast({
    icon: "error",
    title: "登录失败:" + response.code
    })
    }
    },
    fail: (err) => {
    console.log(err);
    }
    });

    退出登陆和断开连接

    disConnect() -> Void

    YeIMUniSDK.getInstance().disConnect();

    获取连接状态 1.0.3

    readyState() -> Number

    返回值:

    字段类型说明
    codeNumber
  • 0:连接中
  • 1:连接打开
  • 2:连接关闭中
  • 3:连接关闭
  • 演示:

    let code = YeIMUniSDK.getInstance().readyState();

    更新用户资料

    updateUserInfo(options) -> Void

    更新已登录用户昵称和头像。

    参数:

    字段类型必填默认说明
    nicknameString用户昵称
    avatarUrlString用户头像网络地址URL
    genderNumber性别
  • 0:未知
  • 1:男性
  • 2:女性
  • mobileNumber电话
    emailString邮箱
    birthdayString生日
    mottoString个性签名
    extendString用户自定义扩展字段
    addFriendTypeNumber好友添加的方式
  • 1:允许任何人添加自己为好友
  • 2:需要经过自己确认才能添加自己为好友
  • 3:拒绝加好友
  • successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示

    YeIMUniSDK.getInstance().updateUserInfo({
    nickname: "修改后的用户昵称",
    avatarUrl: "修改后的用户头像网络地址",
    success: (response) => {
    console.log(response);
    },
    fail: (err) => {
    console.log(err);
    }
    });

    查询用户资料 1.0.4

    getUserInfo(options) -> Void

    根据传入的用户ID查询出对应的用户资料。

    参数:

    字段类型必填默认说明
    userIdString用户ID
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    其中 data 返回参数说明:

    字段类型说明
    userIdString用户ID
    nicknameString用户昵称
    avatarUrlString头像

    演示:

    YeIMUniSDK.getInstance().getUserInfo({
    userId: e.value,
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    获取黑名单列表 1.1.6

    getBlackUserList(options) -> Void

    根据传入的用户ID查询出对应的用户资料。

    参数:

    字段类型必填默认说明
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    其中 data 返回参数说明:

    字段类型说明
    userIdString用户ID
    coverUserIdString被拉黑用户ID
    coverUserUser被拉黑用户信息

    演示:

    YeIMUniSDK.getInstance().getBlackUserList({
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    添加黑名单 1.1.6

    addToBlackUserList(options) -> Void

    被加入黑名单的用户,将无法给加入者发送消息

    参数:

    字段类型必填默认说明
    membersArray<String>用户ID列表
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().addToBlackUserList({
    members: ["user1", "user2"],
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    移出黑名单 1.1.6

    removeFromBlacklist(options) -> Void

    参数:

    字段类型必填默认说明
    membersArray<String>用户ID列表
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().removeFromBlacklist({
    members: ["user1", "user2"],
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建文本消息

    createTextMessage(options) -> Message

    参数:

    字段类型必填默认说明
    toIdString接收者用户ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型
    bodyObject消息容器
    extraString拓展的消息自定义数据

    body参数:

    字段类型必填默认说明
    textString文字消息内容

    返回参数说明:

    Message

    演示:

    //创建文字消息
    let message = YeIMUniSDK.getInstance().createTextMessage({
    toId: '接收者用户ID', //接收者用户ID字符串
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
    body: {
    text: "你好" //文本消息内容字符串
    },
    extra: "这是拓展的自定义的内容"
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建文本@消息 1.2.0

    createTextAtMessage(options) -> Message

    参数:

    字段类型必填默认说明
    toIdString群ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型,仅支持群聊
    bodyObject消息容器
    extraString拓展的消息自定义数据

    body参数:

    字段类型必填默认说明
    textString文字消息内容
    atUserIdListArray<String>需要 @ 的用户ID列表

    返回参数说明:

    Message

    演示:

    //创建群聊文字@消息
    let message = YeIMUniSDK.getInstance().createTextAtMessage({
    toId: '群ID',
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE
    .GROUP, //会话类型:群聊
    body: {
    text: "@user1 @user2 各位,下班开会",
    atUserIdList: ["user1", "user2"]
    },
    extra: "这是拓展的自定义的内容"
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建图片消息

    createImageMessage(options) -> Message

    注:图片、语音、视频等媒体消息,需要YeIM-Uni-Server配置上传仓库

    参数:

    字段类型必填默认说明
    toIdString接收者用户ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型
    bodyObject消息容器
    extraString拓展的消息自定义数据
    onProgressFunction上传进度回调函数

    body.file参数:

    字段类型必填默认说明
    tempFilePathString本地图片临时路径
    widthNumber图片宽度
    heightNumber图片高度

    返回参数说明:

    Message

    演示:

    uni.chooseImage({
    count: 1,
    sizeType: ['original', 'compressed'],
    sourceType: ['album'],
    success: async (res) => {
    //获取图片信息
    let imageInfo = await uni.getImageInfo({
    src: res.tempFilePaths[0]
    })
    //创建图片消息
    let message = YeIMUniSDK.getInstance().createImageMessage({
    toId: '接收者用户ID', //接收者用户ID字符串
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
    body: {
    file: {
    tempFilePath: res.tempFilePaths[0], //本地图片临时路径
    width: imageInfo[1].width, //图片宽度
    height: imageInfo[1].height //图片高度
    }
    },
    extra: "这是拓展的自定义的内容",
    onProgress: (progress) => {
    console.log('上传进度' + progress.progress);
    console.log('已经上传的数据长度' + progress.totalBytesSent);
    console.log('预期需要上传的数据总长度' + progress.totalBytesExpectedToSend);
    }
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res);
    },
    fail: (err) => {
    console.log(err)
    }
    });
    }
    });

    创建图片直发消息 1.2.0

    createImageMessageFromUrl(options) -> Message

    注:媒体直发消息,不需要额外配置,仅需接口传入相关的网络URL即可发送。

    参数:

    字段类型必填默认说明
    toIdString接收者用户ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型
    bodyObject消息容器
    extraString拓展的消息自定义数据

    body参数:

    字段类型必填默认说明
    originalUrlString原图网络Url
    originalWidthNumber原图宽度
    originalHeightNumber原图高度
    thumbnailUrlString缩略图网络Url
    thumbnailWidthNumber缩略图宽度
    thumbnailHeightNumber缩略图高度

    返回参数说明:

    Message

    演示:

    //创建图片直发消息
    let message = YeIMUniSDK.getInstance().createImageMessageFromUrl({
    toId: '接收者用户ID', //接收者用户ID字符串
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
    body: {
    originalUrl: "http://xxx.com/xxx.jpg", //原图网络Url
    originalWidth: 500, //原图宽度
    originalHeight: 500, //原图高度
    thumbnailUrl: "http://xxx.com/xxx.jpg", //缩略图网络Url
    thumbnailWidth: 200, //缩略图宽度
    thumbnailHeight: 200, //缩略图高度
    },
    extra: "这是拓展的自定义的内容"
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res);
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建语音消息

    createAudioMessage(options) -> Message

    注:图片、语音、视频等媒体消息,需要YeIM-Uni-Server配置上传仓库

    参数:

    字段类型必填默认说明
    toIdString接收者用户ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型
    bodyObject消息容器
    extraString拓展的消息自定义数据
    onProgressFunction上传进度回调函数

    body.file参数:

    字段类型必填默认说明
    tempFilePathString本地录音临时文件,仅支持AAC格式
    durationNumber录音时长,单位:秒

    返回参数说明:

    Message

    演示:

    //创建语音消息
    let message = YeIMUniSDK.getInstance().createAudioMessage({
    toId: '接收者用户ID', //接收者用户ID字符串
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
    body: {
    file: {
    tempFilePath: '', //本地录音临时文件,仅支持AAC
    duration: 0, // 录音时长,单位:秒
    }
    },
    extra: "这是拓展的自定义的内容",
    onProgress: (progress) => {
    console.log('上传进度' + progress.progress);
    console.log('已经上传的数据长度' + progress.totalBytesSent);
    console.log('预期需要上传的数据总长度' + progress.totalBytesExpectedToSend);
    }
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res);
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建语音直发消息 1.2.0

    createAudioMessageFromUrl(options) -> Message

    注:媒体直发消息,不需要额外配置,仅需接口传入相关的网络URL即可发送。

    参数:

    字段类型必填默认说明
    toIdString接收者用户ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型
    bodyObject消息容器
    extraString拓展的消息自定义数据

    body参数:

    字段类型必填默认说明
    audioUrlString音频网络Url
    durationNumber音频时长,单位:秒

    返回参数说明:

    Message

    演示:

    //创建语音直发消息
    let message = YeIMUniSDK.getInstance().createAudioMessageFromUrl({
    toId: '接收者用户ID', //接收者用户ID字符串
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
    body: {
    audioUrl: "http://xxx.com/xxx.aac", //音频网络Url
    duration: 5, //音频时长,单位:秒
    },
    extra: "这是拓展的自定义的内容"
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res);
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建小视频消息

    createVideoMessage(options) -> Message

    注:图片、语音、视频等媒体消息,需要YeIM-Uni-Server配置上传仓库

    参数:

    字段类型必填默认说明
    toIdString接收者用户ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型
    bodyObject消息容器
    extraString拓展的消息自定义数据
    onProgressFunction上传进度回调函数

    body.file参数:

    字段类型必填默认说明
    tempFilePathString本地小视频文件临时路径
    widthNumber视频宽度
    heightNumber视频高度
    durationNumber视频时长,单位:秒

    返回参数说明:

    Message

    演示:

    //创建小视频消息
    let message = YeIMUniSDK.getInstance().createVideoMessage({
    toId: '接收者用户ID', //接收者用户ID字符串
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
    body: {
    file: {
    tempFilePath: '', //本地小视频文件临时路径
    width: 0, //视频宽度
    height: 0, //视频高度
    duration: 1 // 视频时长,单位:秒
    }
    },
    extra: "这是拓展的自定义的内容",
    //文件上传进度
    onProgress: (progress) => {
    console.log('上传进度' + progress.progress);
    console.log('已经上传的数据长度' + progress.totalBytesSent);
    console.log('预期需要上传的数据总长度' + progress.totalBytesExpectedToSend);
    }
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res);
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建小视频直发消息 1.2.0

    createVideoMessageFromUrl(options) -> Message

    注:媒体直发消息,不需要额外配置,仅需接口传入相关的网络URL即可发送。

    参数:

    字段类型必填默认说明
    toIdString接收者用户ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型
    bodyObject消息容器
    extraString拓展的消息自定义数据

    body参数:

    字段类型必填默认说明
    videoUrlString小视频网络Url
    thumbnailUrlString小视频缩略图网络Url
    durationNumber视频时长,单位:秒
    widthNumber视频宽度
    heightNumber视频高度

    返回参数说明:

    Message

    演示:

    //创建小视频直发消息
    let message = YeIMUniSDK.getInstance().createVideoMessageFromUrl({
    toId: '接收者用户ID', //接收者用户ID字符串
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
    body: {
    videoUrl: "http://xxx.com/xxx.aac", //小视频网络Url
    thumbnailUrl: "http://xxx.com/xxx.aac", //小视频缩略图网络Url
    duration: 5, //视频时长,单位:秒
    width: 5, //视频宽度
    height: 5, //视频高度
    },
    extra: "这是拓展的自定义的内容"
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res);
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建位置消息 1.0.3

    createLocationMessage(options) -> Message

    参数:

    字段类型必填默认说明
    toIdString接收者用户ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型
    bodyObject消息容器
    extraString拓展的消息自定义数据

    body参数:

    字段类型必填默认说明
    addressString地址名称
    descriptionNumber地址详细描述
    longitudeDouble经度
    latitudeDouble纬度

    返回参数说明:

    Message

    演示:

    //创建位置消息
    let message = YeIMUniSDK.getInstance().createLocationMessage({
    toId: '接收者用户ID', //接收者用户ID字符串
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
    body: {
    address: '', //地址名称
    description: '', //地址详细描述
    longitude: 0.00000, //经度
    latitude: 0.00000 //纬度
    },
    extra: "这是拓展的自定义的内容",
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res);
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建自定义消息

    createCustomMessage(options) -> Message

    参数:

    字段类型必填默认说明
    toIdString接收者用户ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型
    bodyBody消息容器
    extraString拓展的消息自定义数据

    Body:

    字段类型必填默认说明
    customString Object自定义消息内容

    返回参数说明:

    Message

    演示:

    //创建自定义消息
    let message = YeIMUniSDK.getInstance().createCustomMessage({
    toId: '接收者用户ID', //接收者用户ID字符串
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
    body: { //消息容器
    custom: "这是自定义消息体" //自定义消息内容,可传入String或JSON Object
    },
    extra: "这是拓展的自定义的内容",
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res);
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建合并消息 1.2.0

    createMergerMessage(options) -> Message

    参数:

    字段类型必填默认说明
    toIdString接收者用户ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型
    bodyObject消息容器
    extraString拓展的消息自定义数据

    body参数:

    字段类型必填默认说明
    titleString合并消息的标题
    messageListArray<Message>合并的消息列表
    summaryListArray<String>合并的消息摘要列表

    返回参数说明:

    Message

    演示:

    //创建合并消息
    let message = YeIMUniSDK.getInstance().createMergerMessage({
    toId: '接收者用户ID',
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE
    .PRIVATE, //会话类型:私聊
    body: {
    title: "与老婆的聊天记录",
    messageList:[message1, message2],
    summaryList: ["我:[图片]", "老婆:你早饭吃了吗?"]
    },
    extra: "这是拓展的自定义的内容"
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建转发消息 1.2.0

    createForwardMessage(options) -> Message

    参数:

    字段类型必填默认说明
    toIdString接收者用户ID
    conversationTypeYeIMUniSDKDefines.CONVERSATION_TYPE会话类型
    bodyObject消息容器
    extraString拓展的消息自定义数据

    body参数:

    字段类型必填默认说明
    messageMessage要转发的消息

    返回参数说明:

    Message

    演示:

    //创建合并消息
    let message = YeIMUniSDK.getInstance().createForwardMessage({
    toId: '接收者用户ID',
    conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE
    .PRIVATE, //会话类型:私聊
    body: {
    message: message,
    },
    extra: "这是拓展的自定义的内容"
    });
    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    发送消息

    sendMessage(options) -> Void

    参数:

    字段类型必填默认说明
    messageMessage消息体
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    //发送消息
    YeIMUniSDK.getInstance().sendMessage({
    message: message,
    success: (res) => {
    console.log(res);
    },
    fail: (err) => {
    console.log(err)
    }
    });

    获取会话详情 1.1.0

    getConversation(conversationId) -> Object

    参数:

    字段类型必填默认说明
    conversationIdString会话ID

    返回参数:

    详见下方

    其中 data 返回参数说明:

    字段类型说明
    dataConversation会话

    演示:

    let result = YeIMUniSDK.getInstance().getConversation("会话ID");
    let conversation = result.data;

    获取本地会话列表

    getConversationList(options) -> Void

    参数:

    字段类型必填默认说明
    pageNumber页码
    limitNumber每页会话数量
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    其中 data 返回参数说明:

    字段类型说明
    dataArray<Conversation>会话列表

    演示:

    YeIMUniSDK.getInstance().getConversationList({
    page: 1, //页码
    limit: 20, //每页数量
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    清除会话消息未读数 1.0.5

    getConversationList(conversationId) -> Void

    参数:

    字段类型必填默认说明
    conversationIdString会话ID

    演示

    //清除指定会话未读数,并给对方发送已读回执
    YeIMUniSDK.getInstance().clearConversationUnread("会话ID");

    删除会话及聊天记录 1.0.5

    deleteConversation(conversationId) -> Void

    参数:

    字段类型必填默认说明
    conversationIdString会话ID

    演示

    //删除指定会话和会话内聊天记录
    YeIMUniSDK.getInstance().deleteConversation("会话ID");

    获取历史消息记录(弃用)

    getMessageList(options) -> Void

    v1.1.7版本开始已弃用此方法,预计v1.2.0将从SDK中删除。请使用getHistoryMessageList
    注:SDK仅将每个会话的最新20条聊天记录存入本地,所以获取的历史记录第一页从本地拉取,更早的聊天记录将从服务端拉取。

    参数:

    字段类型必填默认说明
    pageNumber页码
    conversationIdString会话ID
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    其中 data 返回参数说明:

    字段类型说明
    dataArray<Message>消息列表

    演示:

    YeIMUniSDK.getInstance().getMessageList({
    page: 1,
    conversationId: "会话ID",
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    获取历史消息记录 1.1.7

    getHistoryMessageList(options) -> Void

    注:SDK仅将每个会话的最新20条聊天记录存入本地,更早的聊天记录将从服务端拉取。

    参数:

    字段类型必填默认说明
    conversationIdString会话ID
    nextMessageIdString下一次续拉的消息ID,第一次拉取时不要传入
    limitNumber20每次拉取的数量
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    其中 data 返回参数说明:

    字段类型说明
    listArray<Message>消息列表
    nextMessageIdString下一次续拉的消息ID

    演示:

    YeIMUniSDK.getInstance().getHistoryMessageList({
    nextMessageId: "下一次续拉的消息ID,第一次拉取时不要传入",
    conversationId: "会话ID",
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    撤回消息 1.0.5

    revokeMessage(options) -> Void

    参数:

    字段类型必填默认说明
    messageMessage要撤回的完整消息
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().revokeMessage({
    message: message, //要撤回的消息
    success: (res) => {
    console.log("success");
    },
    fail: (err) => {
    console.log(err)
    }
    });

    删除消息 1.1.4

    deleteMessage(options) -> Void

    参数:

    字段类型必填默认说明
    messageMessage要删除的完整消息
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().deleteMessage({
    message: message, //要删除的消息
    success: (res) => {
    console.log("success");
    },
    fail: (err) => {
    console.log(err)
    }
    });

    通用上传接口 1.0.3

    upload(options) -> Void

    参数:

    字段类型必填默认说明
    filenameString文件名称,需要携带文件后缀
    filepathString要上传的文件临时路径
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    其中 data 返回参数说明:

    字段类型说明
    urlString上传完成的资源Url

    演示:

    YeIMUniSDK.getInstance().upload({
    filename: "a.png", //文件名称,需带后缀
    filepath: "/sdcard/temp/a.png", //文件临时路径
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    创建群组 1.1.0

    createGroup(options) -> Void

    参数:

    字段类型必填默认说明
    nameString群名称
    avatarUrlString群头像网络地址URL
    groupIdString群ID,未填写时系统自动生成
    joinModeYeIMUniSDKDefines.GROUP.JOINMODE群申请处理方式
    introductionString群简介
    notificationString群公告
    membersArray<String>创建群聊初始化成员(用户ID数组)
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().createGroup({
    name: "",
    avatarUrl: "",
    success: (res) => {
    uni.showToast({
    title: "创建成功"
    });
    },
    fail: (err) => {
    console.loh(err);
    }
    });

    解散群组 1.1.0

    dissolveGroup(options) -> Void

    参数:

    字段类型必填默认说明
    groupIdString群ID
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().dissolveGroup({
    groupId: "group_363712804290629",
    success: (res) => {
    uni.showToast({
    title: "解散成功"
    })
    },
    fail: (err) => {
    console.log(err)
    }
    });

    转让群主 1.1.0

    transferLeader(options) -> Void

    参数:

    字段类型必填默认说明
    groupIdString群ID
    userIdString转让的用户ID
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().transferLeader({
    groupId: "group_363712804290629",
    userId: "",
    success: (res) => {
    console.log(res);
    },
    fail: (err) => {
    console.log(err);
    }
    });

    更新群组资料 1.1.0

    updateGroup(options) -> Void

    参数:

    字段类型必填默认说明
    groupIdString群ID
    nameString群名称
    avatarUrlString群头像网络地址URL
    joinModeYeIMUniSDKDefines.GROUP.JOINMODE群申请处理方式
    introductionString群简介
    notificationString群公告
    isMuteNumber0全体禁言,1 = 全体禁言 0 = 取消全体禁言
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().updateGroup({
    groupId: "group_363712804290629",
    name:"",
    avatarUrl:"",
    joinMode:"",
    introduction:"",
    notification:"",
    isMute:0,
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    uni.hideLoading();
    }
    });

    获取群组资料 1.1.0

    getGroup(options) -> Void

    参数:

    字段类型必填默认说明
    groupIdString群ID
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().getGroup({
    groupId: "group_363712804290629",
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    uni.hideLoading();
    }
    });

    获取我的群组列表 1.1.0

    getGroupList(options) -> Void

    参数:

    字段类型必填默认说明
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().getGroupList({
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    uni.hideLoading();
    }
    });

    申请入群 1.1.0

    joinGroup(options) -> Void

    参数:

    字段类型必填默认说明
    groupIdString群ID
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().joinGroup({
    groupId: "group_8",
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    退出群组 1.1.0

    leaveGroup(options) -> Void

    参数:

    字段类型必填默认说明
    groupIdString群ID
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().leaveGroup({
    groupId: "group_8",
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    添加群成员 1.1.0

    addGroupUsers(options) -> Void

    参数:

    字段类型必填默认说明
    groupIdString群ID
    membersArray<String>用户ID列表
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().addGroupUsers({
    groupId: "group_8",
    members: ["user1", "user2"],
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    移除群成员 1.1.0

    removeGroupUsers(options) -> Void

    参数:

    字段类型必填默认说明
    groupIdString群ID
    membersArray<String>用户ID列表
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().removeGroupUsers({
    groupId: "group_8",
    members:["user1", "user2"],
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    获取群成员列表

    1.1.0

    getGroupUserList(options) -> Void

    参数:

    字段类型必填默认说明
    groupIdString群ID
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().getGroupUserList({
    groupId: "group_8",
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    设置群管理员 1.1.0

    setAdminstrator(options) -> Void

    参数:

    字段类型必填默认说明
    groupIdString群ID
    userIdString要设置的用户ID
    isAdminString是否设置管理员
  • 0:取消
  • 1:设置
  • successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().setAdminstrator({
    groupId: "",
    userId: "",
    isAdmin: 1,
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    获取入群申请列表 1.1.0

    getGroupApplyList(options) -> Void

    参数:

    字段类型必填默认说明
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().getGroupApplyList({
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    处理入群申请 1.1.0

    handleApply(options) -> Void

    参数:

    字段类型必填默认说明
    idNumber申请ID
    statusYeIMUniSDKDefines.GROUP.APPLYSTATUS处理结果
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().handleApply({
    id: 1,
    status: YeIMUniSDKDefines.GROUP.APPLYSTATUS.AGREE, //同意
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    禁言群成员 1.1.0

    setMute(options) -> Void

    参数:

    字段类型必填默认说明
    groupIdString群ID
    userIdString禁言用户ID
    timeNumber禁言时间,分钟
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().setMute({
    groupId: "",
    userId: "",
    time: 10,
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    添加好友 1.2.2

    注:如需开启好友关系检查,请在配置文件中设置[yeim.friend.enable]为true

    addFriend(options) -> Void

    参数:

    字段类型必填默认说明
    userIdString用户ID
    remarkString好友备注
    extraMessageString附言
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().addFriend({
    userId: "用户ID",
    remark: "李先生",
    extraMessage: "您好,我是在百度上搜索到您的联系方式,有些问题想要咨询,请通过一下,谢谢。",
    success: (res) => {
    console.log(res)
    //当返回的状态码为:20020,表示对方开启了好友申请验证,需等待对方处理同意或拒绝。并且触发事件:YeIMUniSDKDefines.EVENT.FRIEND_APPLY_LIST_CHANGED
    },
    fail: (err) => {
    console.log(err)
    }
    });

    获取好友列表 1.2.2

    SDK登录后将触发好友列表更新事件,事件携带数据为全部好友列表并持久化缓存

    getFriendList(options) -> Void

    参数:

    字段类型必填默认说明
    cloudBooleanfalse是否从云端拉取
    profileNumber0资料类型
  • 0:简略资料
  • 1:详细资料
  • (云端拉取有效)
  • pageNumber1页码
    limitNumber20每页数量
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().getFriendList({
    page: 1,
    limit: 20,
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    获取好友申请列表 1.2.2

    SDK登录后将触发好友申请列表更新事件,事件携带数据为全部好友申请列表并持久化缓存

    getFriendApplyList(options) -> Void

    参数:

    字段类型必填默认说明
    cloudBooleanfalse是否从云端拉取
    typeNumber0资料类型
  • 0:我收到的申请
  • 1:我发出去的申请
  • (云端拉取有效)
  • pageNumber1页码
    limitNumber20每页数量
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().getFriendApplyList({
    page: 1,
    limit: 20,
    success: (res) => {
    console.log(res)
    },
    fail: (err) => {
    console.log(err)
    }
    });

    好友申请已读 1.2.2

    setApplyListRead(options) -> Void

    参数:

    字段类型必填默认说明
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    //将全部好友申请设置为已读状态
    YeIMUniSDK.getInstance().setApplyListRead();

    同意好友申请 1.2.2

    acceptApply(options) -> Void

    参数:

    字段类型必填默认说明
    idNumber申请ID
    remarkNumber好友备注
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().acceptApply({
    id: '好友申请记录的ID',
    remark: '好友备注',
    success: (res) => {
    console.log(res);
    //同意后将触发事件:YeIMUniSDKDefines.EVENT.FRIEND_LIST_CHANGED、YeIMUniSDKDefines.EVENT.FRIEND_APPLY_LIST_CHANGED
    },
    fail: (err) => {
    console.log(err)
    }
    });

    拒绝好友申请 1.2.2

    refuseApply(options) -> Void

    参数:

    字段类型必填默认说明
    idNumber申请ID
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().refuseApply({
    id: '好友申请记录的ID',
    success: (res) => {
    console.log(res);
    //同意后将触发事件:YeIMUniSDKDefines.EVENT.FRIEND_APPLY_REFUSE、YeIMUniSDKDefines.EVENT.FRIEND_APPLY_LIST_CHANGED
    },
    fail: (err) => {
    console.log(err)
    }
    });

    删除好友 1.2.2

    deleteFriend(options) -> Void

    参数:

    字段类型必填默认说明
    membersArray<String>好友ID数组
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().deleteFriend({
    members: ['user1', 'user2'],
    success: (res) => {
    console.log(res);
    //删除后触发事件:YeIMUniSDKDefines.EVENT.FRIEND_LIST_CHANGED
    },
    fail: (err) => {
    console.log(err)
    }
    });

    更新好友资料 1.2.2

    updateFriend(options) -> Void

    参数:

    字段类型必填默认说明
    userIdString好友ID
    remarkString好友备注
    extendString自定义扩展字段
    successFunction成功返回的回调函数
    failFunction调用失败的回调函数

    success、fail 返回参数说明:

    详见下方

    演示:

    YeIMUniSDK.getInstance().updateFriend({
    userId: '好友ID',
    remark: '好友备注',
    extend: '自定义扩展字段'
    success: (res) => {
    console.log(res);
    //更新后将触发事件:YeIMUniSDKDefines.EVENT.FRIEND_LIST_CHANGED
    },
    fail: (err) => {
    console.log(err)
    }
    });

    User 用户对象

    字段类型说明
    userIdString用户ID,全局唯一
    nicknameString用户昵称
    avatarUrlString头像URL
    genderNumber性别
  • 0:未知
  • 1:男性
  • 2:女性
  • mobileNumber电话
    emailString邮箱
    birthdayString生日
    mottoString个性签名
    extendString用户自定义扩展字段
    createdAtNumber注册时间,毫秒时间戳

    Friend 好友对象

    字段类型说明
    userIdString用户ID
    friendUserIdString好友ID
    remarkString好友备注
    extendString自定义扩展字段
    friendInfoUser好友资料
    createdAtNumber成为好友的时间,毫秒时间戳

    Group 群组对象

    字段类型说明
    groupIdString群组ID,全局唯一
    nameString群名称
    avatarUrlString群头像URL
    leaderUserIdString群主用户ID
    joinModeYeIMUniSDKDefines.GROUP.JOINMODE群申请处理方式
    introductionString群简介
    notificationString群公告
    isMuteNumber全体禁言
  • 0:否
  • 1:是
  • isDissolveNumber是否解散
  • 0:否
  • 1:是
  • createdAtNumber注册时间,毫秒时间戳

    Message 消息对象

    消息基本结构

    字段类型说明
    conversationIdString会话ID,私聊中为消息接收者ID
    conversationType1.1.4String会话类型
  • private:私聊
  • group:群聊
  • messageIdString消息ID,全局唯一(消息发送成功后返回)
    sequenceNumber入库顺序
    directionString消息流方向
  • in:接收
  • out:发送
  • fromString消息发送者ID
    toString消息接收者ID
    fromUserInfoUser消息发送者用户信息
    typeString消息类型
    bodyObject消息内容体
    extraString自定义扩展数据
    isReadNumber对端是否已读
  • 0:未读
  • 1:已读
    对端调用 clearConversationUnread 清除未读数上报已读状态,触发事件 PRIVATE_READ_RECEIPT
  • isRevokeNumber消息是否撤回
  • 0:未撤回
  • 1:已撤回
  • isDeletedNumber消息是否已删除
  • 0:未删除
  • 1:已删除
    消息删除后云端同步删除,本地记录此字段作为已删除标志,但云端将不会拉取已经删除的消息。
  • statusString发送状态
  • unSend:未发送
  • success:发送成功
  • fail:发送失败
  • receiveStringv1.1.2版本弃用。接收状态
  • 0:未接收
  • 1:已接收
  • timeNumber消息入库时间,毫秒时间戳

    Message.type

    类型说明
    YeIMUniSDKDefines.MESSAGE_TYPE.TEXT文本消息
    YeIMUniSDKDefines.MESSAGE_TYPE.IMAGE图片消息
    YeIMUniSDKDefines.MESSAGE_TYPE.AUDIO音频消息
    YeIMUniSDKDefines.MESSAGE_TYPE.VIDEO小视频消息
    YeIMUniSDKDefines.MESSAGE_TYPE.LOCATION位置消息
    YeIMUniSDKDefines.MESSAGE_TYPE.CUSTOM自定义消息

    Message.body

    文本消息

    字段类型说明
    textString文本消息内容

    图片消息

    字段类型说明
    originalUrlString原图图片地址URL
    originalWidthNumber原图宽度
    originalHeightNumber原图高度
    thumbnailUrlString缩略图地址URL
    thumbnailWidthNumber缩略图宽度
    thumbnailHeightNumber缩略图高度

    音频消息

    字段类型说明
    audioUrlString音频URL
    durationNumber时长,单位:秒

    小视频消息

    字段类型说明
    videoUrlString视频URL
    thumbnailUrlString视频封面图URL
    videoWidthNumber视频宽度
    videoHeightNumber视频高度

    位置消息

    字段类型说明
    addressString地址名称
    descriptionString地址详细描述
    longitudeNumber经度
    latitudeNumber纬度

    Conversation 会话对象

    字段类型说明
    conversationIdString会话ID
    typeString会话类型
  • private:私聊
  • group:群聊
  • unreadNumber未读数
    lastMessageMessage最新消息
    userInfoUser会话用户资料
    groupInfoGroup会话群资料

    APP离线推送 1.1.3

    SDK使用个推和Dcloud合作的UniPush1.0进行离线推送,推荐打通各厂商提供的系统级推送通道来进行消息通知。

    开启离线推送

    第一步:项目中配置Push模块,打开manifest,选择APP模块配置,选中Push模块->UniPush1.0

    注:调试时需打包自定义基座,配置模块后需要重新打包。

    在App.vue生命周期中,给SDK提供APP的进入后台或前台的提醒(告诉SDK当前APP的状态,方便离线推送通知的显示与隐藏)。 即在App.vue的onShow中,调用方法:intoApp(),在onHide中,调用方法:leaveApp()

    第二步:到Dcloud开发者后台开启UniPush,并将厂商通道参数配置根据需求配置齐全。厂商通道申请方式:https://docs.getui.com/getui/mobile/vendor/vendor_open/

    注:修改厂商参数后自定义基座需要重新打包。

    第三步:修改 YeIM-Uni-Server application.properties 配置

    注:YeIM-Uni-SDK仅将UniPush集成,使用过程中出现问题,仍然需要查阅Dcloud和个推官方的文档。

    第四步:双方登录后,查看数据库 user 表中字段 mobile_device_id 是否有值,如果有则可以发送消息测试,如果没有请检查UniPush1.0模块是否选上。

    uni-app demo

    https://ext.dcloud.net.cn/plugin?id=10266

    electron demo

    https://ext.dcloud.net.cn/plugin?id=11143

    uni-app vue3 ts demo

    https://gitee.com/wzJun1/ye-imuni-sdk_-uniapp_-vue3-tsdemo

    常见问题

    1. SDK实例化方法的统一返回值?

    字段类型说明
    codeString状态码,成功返回为:200,失败返回错误码
    messageString信息提示
    dataObject返回值

    2. 本地仓库上传时 YeIM-Uni-Server 报错,无法发送视频?

    使用本地仓库上传时,视频处理使用了第三方包 javacv,在pom.xml中根据提示修改依赖 ffmpeg 的classifier

    如果使用公有云对象存储可以不需要此包,自行注释此依赖可减少jar包体积(注释后部分文件引入会报错,均为本地上传相关代码使用,依次注释即可)。

    <dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>ffmpeg</artifactId>
    <version>5.1.2-1.5.8</version>
    <!-- Windows系统上运行使用此包 -->
    <!-- <classifier>windows-x86_64</classifier> -->
    <!-- Linux系统上运行使用此包 -->
    <classifier>linux-x86_64</classifier>
    <!-- MacOS系统上运行使用此包 -->
    <!-- <classifier>macosx-x86_64</classifier> -->
    </dependency>

    3. connect接口连接报错?

    接口内部使用WebSocket进行持久化连接,一般的连接URL组成类似于:ws://192.168.110.239:10010/im/user1/39b5409173763991853cc9061c374692

    此时如果connect接口连接报错,先检查Server端的IP、端口是否连通,再检查用户对应的登录Token是否正确,可使用PostMan进行WebSocket连接测试,观察连接情况。

    如果状态码返回401,则表示登录Token错误。

    如果返回其他情况,大多IP、端口不通。

    4. 收不到离线推送通知?

    打开APP的通知权限,包括安卓8.0以上的所有渠道的通知权限,下拉、横幅、振动、声音全部打开,然后在进行测试。

    部分手机的厂商通道不稳定,例如部分OPPO机型,厂商通道长连接经常断开(切换网络或者无信号)且长时间不进行重新连接,导致遗漏通知,可进行重启手机测试,重启手机后不要打开APP,直接发送消息测试,看有无离线通知。

    如果打开了当前应用的所有通知权限,且正确的配置了厂商通道,且申请各个厂商的渠道权限(例如OPPO私信、小米重要类别、华为自分类权益等等),仍然无法收到离线消息,可到数据库拿到某用户的CID,即 mobile_device_id ,虽然将此值拿到Dcloud开发者后台故障排查,看是否有Device Token。

    上述问题,可参考下方链接。

    此具体问题详情请查看:https://docs.getui.com/getui/question/android/

    更新日志

    1.2.5 - 2023-05-09

    • 【YeIM-Uni-SDK】

      • 修复 updateUserInfo 无法正常更新的问题
      • 修复 用户资料 好友添加方式 异常
      • 修复 好友申请已读状态异常
    • 【YeIM-Uni-Server】

      • 优化 用户申请已读发送更新事件

    1.2.4 - 2023-05-02

    • 【YeIM-Uni-SDK】
      • 修复因 1.2.0 引出的本地上传异常
      • 修复在 nvue 页面下无法使用实例的异常

    1.2.3 - 2023-04-06

    • 【YeIM-Uni-SDK】
      • 优化 createCustomMessage
      • 优化 获取好友及申请列表方式
    • 【YeIM-Uni-Server】
      • 修复因配置文件异常导致的无法启动

    1.2.2 - 2023-04-03

    • 【YeIM-Uni-SDK】

      • 新增 好友关系及相关方法
      • 新增 用户资料字段 性别 电话 扩展字段
      • 优化 方法 getUserInfo updateUserInfo
    • 【YeIM-Uni-Server】

      • 新增 好友关系相关接口
      • 修改 接口 register updateUser
    • 【数据库】

      • 新增 user表字段 性别 电话 扩展字段
      • 新增 好友表 friend
      • 新增 好友申请表 friend_apply

    1.2.0 - 2023-03-22

    • 【YeIM-Uni-SDK】

      • 适配 支持非uni编译器打包,可单独用在任何H5环境,支持ts types
      • 新增 创建@消息接口 createTextAtMessage 创建合并消息接口 createMergerMessage 创建转发消息接口 createForwardMessage
      • 新增 媒体消息通过URL直发接口 createImageMessageFromUrl createVideoMessageFromUrl createAudioMessageFromUrl
      • 修改 使用mitt代替uni事件总线
      • 修复 群组获取历史消息记录异常
    • 【YeIM-Uni-Server】

      • 修复 群成员移除后再加入会话报错
      • 修复 设置群管理员重复
      • 优化 移出群成员给指定接收者发送系统通知
      • 优化 群成员获取历史消息记录方式

    1.1.9 - 2023-03-18

    • 【YeIM-Uni-SDK】

      • 修复 因1.1.8版本引出的用户多端登录被踢反复重连的问题
      • 优化 客户端代码
    • 【YeIM-Uni-Server】

      • 优化 Socket消息通道

    1.1.8 - 2023-03-17

    • 【YeIM-Uni-SDK】

      • 新增 离线通知相关自定义配置
      • 修复 getGroupApplyList接口获取入群申请异常的问题
      • 修复 撤回消息事件异常响应
      • 优化 客户端接口返回值
      • 优化 客户端接口通信
    • 【YeIM-Uni-Server】

      • 优化 服务端接口返回值

    1.1.7 - 2023-03-10

    • 【YeIM-Uni-SDK】

      • 新增 getHistoryMessageList 获取历史消息记录方法
      • 弃用 getMessageList
    • 【YeIM-Uni-Server】

      • 新增 通过 nextMessageId 获取历史记录
      • 弃用 分页获取历史记录

    1.1.6 - 2023-02-19

    • 【YeIM-Uni-SDK】

      • 新增 加入黑名单 移除黑名单 获取黑名单列表 方法
      • 修复 低版本安卓创建推送渠道的异常
      • 修复 本地消息缓存逻辑
    • 【YeIM-Uni-Server】

      • 新增 加入黑名单 移除黑名单 获取黑名单列表 接口
    • 【数据库】

      • 新增私聊黑名单表

    1.1.5 - 2023-01-31

    • 【YeIM-Uni-SDK】
      • 修复 使用Vue3编译时的上传异常
      • 文档新增 Vue3 TypeScript 使用示例

    1.1.4 - 2023-01-27

    • 【YeIM-Uni-SDK】

      • 新增 删除消息 deleteMessage 接口
      • 新增 Message消息字段 conversationType 会话类型
      • 修复 因推送服务引发的非APP端登录异常
      • 优化 小视频消息封面字段 thumbnailUrl 创建时为空
      • 优化 媒体消息接口本地上传目录名称
    • 【YeIM-Uni-Server】

      • 新增 删除消息
      • 优化 撤回消息
      • 移除 receivedCallMessage 方法 (v1.1.2遗留)
    • 【数据库】

      • 新增群消息删除记录表

    1.1.3 - 2023-01-16

    • 【YeIM-Uni-SDK】

      • 新增 个推离线消息通知
    • 【YeIM-Uni-Server】

      • 新增 个推离线消息通知 服务
    • 【数据库】

      • 新增 user 表字段 mobile_device_id (移动APP端推送标识符)

    1.1.2 - 2022-12-16

    • 【YeIM-Uni-SDK】

      • 弃用 notifySocketMessageReceived
      • 弃用 Message 对象 receive 字段
    • 【YeIM-Uni-Server】

      • 修复 私聊/群聊会话发送者会话未读数异常
      • 修复 上传图片缩略图路径异常
      • 弃用 received_call
      • 弃用 Message 对象 receive 字段
    • 【数据库】

      • 弃用 数据表 message、group_message 中 receive 字段

    1.1.1 - 2022-12-15

    • 【YeIM-Uni-SDK】

      • 更新 WebSocket使用方式为SocketTask,便于支持项目多路WebSocket
      • 预弃用 notifySocketMessageReceived,下版本删除。基于YeIMUniSDK的收发消息逻辑考虑,接收方不需要返回接收状态(ACK)
      • 优化 重连机制
      • 优化 代码注释
    • 【YeIM-Uni-Server】

      • 预弃用 received_call,下版本删除。基于YeIMUniSDK的收发消息逻辑考虑,接收方不需要返回接收状态(ACK)

    1.1.0 - 2022-12-14

    • 【YeIM-Uni-SDK】

      • 新增 【重要】群组聊天方式
      • 新增 getConversation 获取会话详情
      • 修复 部分接口返回异常
    • 【YeIM-Uni-Server】

      • 新增 【重要】群组聊天方式
      • 修复 更新会话未读数异常
    • 【数据库】

      • 新增 【重要】群聊相关数据表
      • 优化 部分慢查询

    1.0.9 - 2022-12-07

    • 【YeIM-Uni-SDK】
      • 修复 getConversationList 获取会话列表异常

    1.0.8 - 2022-12-06

    • 【YeIM-Uni-SDK】

      • 更新 媒体文件保存路径
    • 【YeIM-Uni-Server】

      • 更新 本地仓库文件保存路径
      • 修复 多媒体处理第三方库 javacv 依赖过大问题

    1.0.7 - 2022-12-05

    • 新增 存储仓库 本地存储
    • 修复 重复上线互踢连接异常

    1.0.6 - 2022-12-04

    • 新增 存储仓库 阿里云对象存储
    • 更新 YeIM-Uni-ServerSpringBoot 版本 2.7.6 Spring-WebSocket 版本 5.3.24
    • 修复已知BUG

    1.0.5 - 2022-12-02

    • 新增 disConnect 断开连接接口
    • 新增 deleteConversation 删除指定会话及会话内聊天记录
    • 新增 revokeMessage 撤回消息
    • 新增 clearConversationUnread 清除指定会话未读数接口,此接口将触发 PRIVATE_READ_RECEIPT 事件
    • 新增 监听事件 PRIVATE_READ_RECEIPT 私聊会话已读回执
    • 新增 创建消息接口 extra 字段,用于各个消息扩展自定义数据
    • 修改 消息ID由前端生成改为服务端生成
    • 修改 撤回字段 is_recallis_revoke
    • 更新 后端私聊消息数据模型

    1.0.4 - 2022-11-28

    • 新增 查询用户信息接口
    • 修复 语音消息接口异常
    • 修复 YeIM-Uni-Server 消息通知异常

    1.0.3 - 2022-11-27

    • 新增 发送位置消息
    • 新增 查询登陆连接状态接口
    • 新增 外部上传接口 upload
    • 修复 已知BUG

    1.0.2 - 2022-11-26

    • 新增 发送图片消息语音消息小视频消息
    • 修复 已知BUG

    1.0.1 - 2022-11-21

    • 更新 readme.md
    • 修复 监听异常

    1.0.0 - 2022-11-20

    • 首次发布