YeIM-Uni-SDK
是可以私有化部署
的全开源
即时通讯js-sdk
,仅需集成 SDK 即可轻松实现聊天能力,支持Web、uni-app接入使用,满足通信需要。
支持私聊和群聊,支持发送的消息类型:文字消息、图片消息、语音消息、视频消息、位置消息、自定义消息。
必须搭配YeIM-Uni-Server服务端,开箱即用。
YeIM-Uni-SDK
由JavaScript
构建,支持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-SDK
的服务端,其由SpringBoot
框架编写,MySQL
作为数据库,使用MyBatis-Plus
持久层框架简化开发。
Github:https://github.com/wzJun1/YeIM-Uni-Server
Gitee:https://gitee.com/wzJun1/YeIM-Uni-Server
YeIM-Uni-Server
到本地database.sql
application.properties
提示,找到开发环境配置文件(dev),修改MySQL、Redis、Storage相关参数,如果需要发送图片等媒体消息,需要配置上传仓库(Storage)相关的参数,详情看下方配置文件启动完成后,根据实际情况可获得Http和WebSocket的url:
http://你的IP地址:10010ws://你的IP地址:10010/im
YeIM-Uni-SDK
将使用这两个url进行初始化。
YeIM-Uni-Server
到本地IntelliJ IDEA
database.sql
application.properties
提示,找到开发环境配置文件(prod),修改MySQL、Redis、Storage相关参数,如果需要发送图片等媒体消息,需要配置上传仓库(Storage)相关的参数,详情看下方配置文件java -jar yeimServer-1.1.3.jar
服务端部分配置参数说明
必填
项目端口号。Http和WebSocket均为此端口
必填
数据源驱动类名。默认:com.p6spy.engine.spy.P6SpyDriver,项目使用p6spy实时调试SQL,如果上线了不需要可以修改为:com.mysql.cj.jdbc.Driver
必填
JDBC URL,数据库URL配置。默认:jdbc:p6spy:mysql://localhost:3306/yeim,项目使用p6spy实时调试SQL,如果上线了不需要可以修改为:jdbc:mysql://localhost:3306/yeim
其中yeim为数据库名称
必填
数据库用户名
必填
数据库密码
必填
Redis缓存前缀
必填
类似salt,盐。作用是密文拼接后再次加密存储,使存储在数据库中的密码更加安全,可自行修改。
必填
上传存储库类型
如果项目需要使用到发送图片等媒体消息接口,则需要填入相关参数。
目前支持本地存储、腾讯云对象存储COS、阿里云对象存储OSS
可选项
类型 | 说明 |
---|---|
local | 本地存储 |
cos | 腾讯云对象存储 腾讯云COS媒体处理需开启万象功能,否则无法正常使用媒体消息接口:https://cloud.tencent.com/document/product/460/10511 |
oss | 阿里云对象存储 |
非必填
资源访问(对象存储/仓库)自定义域名。例如:https://www.baidu.com
非必填
公有云对象存储空间名称
非必填
存储空间所在地区简称。例如腾讯云COS选择的是广州,则简称为:ap-guangzhou
腾讯云COS地域通览:https://cloud.tencent.com/document/product/436/6224
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
非必填
云API密钥
腾讯云查看:https://console.cloud.tencent.com/cam/capi
阿里云查看:https://ram.console.aliyun.com/manage/ak
非必填
云API密钥
腾讯云查看:https://console.cloud.tencent.com/cam/capi
阿里云查看:https://ram.console.aliyun.com/manage/ak
必填
分布式ID生成器节点ID,数字类型。详情查看:https://github.com/yitter/IdGenerator
是否开启离线消息推送,可选值:true和false
推送SDK类型,目前仅支持个推。请填写:getui
appId,可在Dcloud开发者后台查询
appKey,可在Dcloud开发者后台查询
masterSecret,可在Dcloud开发者后台查询
OPPO私信推送渠道ID,详情查看:https://open.oppomobile.com/new/developmentDoc/info?id=11227
小米重要类别推送渠道ID,一般情况下申请成功后,默认为:high_system
是否开启好友关系检查,开启后发送消息将检查是否是好友关系,不是好友关系无法发送消息。默认值:false
YeIM-Uni-Server启动后,会同时启动WebSocket服务,YeIM-Uni-SDK也将使用WebSocket进行连接收发消息,为了避免安全问题以及适配微信小程序端(微信小程序WebSocket必须使用wss协议),我们可以使用 nginx
来套一层SSL。
WebSocket使用 ws 或 wss 的统一资源标志符,类似于 HTTP 或 HTTPS,其中 wss 表示在 TLS 之上的 WebSocket,相当于 HTTPS。
此处/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
下面使用PostMan
调试服务端YeIM-Uni-Server
相关接口,实际项目中可根据情况进行本地http调用
PostMan
API JSON:点此查看PostMan接口文档,可使用PostMan
导入此JSON文件查看详细后端API,不定时更新
用户必须注册才能登陆。
接口地址:
http://你的server地址:你的server端口/user/register
请求方式:POST
请求头:
Content-Type:application/json
请求参数:
参数名 | 类型 | 是否必传 | 说明 | 平台差异 |
---|---|---|---|---|
userId | String | 是 | 请求注册的用户ID字符串,IM系统内唯一 | 无 |
nickname | String | 是 | 请求注册的用户昵称 | 无 |
avatarUrl | String | 是 | 请求注册的用户头像网络地址 | 无 |
gender | Number | 否 | 性别 | 1.2.2 |
mobile | Number | 否 | 电话 | 1.2.2 |
String | 否 | 邮箱 | 1.2.2 | |
birthday | String | 否 | 生日 | 1.2.2 |
motto | String | 否 | 个性签名 | 1.2.2 |
extend | String | 否 | 用户自定义扩展字段 | 1.2.2 |
addFriendType | Number | 否 | 好友添加的方式 | 1.2.0 |
请求例子:
POST /user/register HTTP/1.1Host: 你的server地址:你的server端口/user/registerDate: GMT DateContent-Type: application/jsonContent-Length: Content Length{"userId":"user_123456789","nickname":"小明","avatarUrl":"https://api.multiavatar.com/Starcrasher.png"}
响应:
{"code": 200,"message": "success","data": null}
PostMan截图:
在客户端YeIM-Uni-SDK
中使用connect
接口传入登陆token
进行用户登陆操作。
接口地址:
http://你的server地址:你的server端口/user/token/get
请求方式:POST
请求头:
Content-Type: application/json
请求参数:
参数名 | 类型 | 是否必传 | 说明 | 平台差异 |
---|---|---|---|---|
userId | String | 是 | 已注册的用户ID字符串 | 无 |
timestamp | Number | 是 | Token过期时间戳,毫秒级 | 无 |
sign | String | 是 | 加密签名,使用userId、timestamp、yeim.secret.key拼接的字符串进行MD5加密,例:md5(userId+timestamp+yeim.secret.key) | 无 |
请求例子:
POST /user/token/get HTTP/1.1Host: 你的server地址:你的server端口/user/token/getDate: GMT DateContent-Type: application/jsonContent-Length: Content Length{"userId":"user_123456789","timestamp":1671429749000,"sign":"14b978ad88894af7b9c5071d55b5e0cb"}
响应:
{"code": 200,"message": "success","data": {"token": "3896c6e9eb4e5f18601a83fc624455e5"}}
PostMan截图:
更新用户资料,请求头中需包含登陆token
。
客户端YeIM-Uni-SDK
的updateUserInfo
同样使用此接口。
接口地址:
http://你的server地址:你的server端口/user/update
请求方式:POST
请求头:
Content-Type: application/jsonToken:3896c6e9eb4e5f18601a83fc624455e5
请求参数:
参数名 | 类型 | 是否必传 | 说明 | 平台差异 |
---|---|---|---|---|
nickname | String | 否 | 用户昵称 | 无 |
avatarUrl | String | 否 | 用户头像网络地址 | 无 |
gender | Number | 否 | 性别 | 1.2.2 |
mobile | Number | 否 | 电话 | 1.2.2 |
String | 否 | 邮箱 | 1.2.2 | |
birthday | String | 否 | 生日 | 1.2.2 |
motto | String | 否 | 个性签名 | 1.2.2 |
extend | String | 否 | 用户自定义扩展字段 | 1.2.2 |
addFriendType | Number | 否 | 好友添加的方式 | 1.2.0 |
请求例子:
POST /user/update HTTP/1.1Host: 你的server地址:你的server端口/user/updateDate: GMT DateToken:3896c6e9eb4e5f18601a83fc624455e5Content-Type: application/jsonContent-Length: Content Length{"nickname":"小红","avatarUrl":"https://api.multiavatar.com/Starcrasher.png"}
响应:
{"code": 200,"message": "success","data": null}
更多PostMan
API JSON:点此查看PostMan接口文档,可使用PostMan
导入此JSON文件查看详细后端API,不定时更新
uni-app项目根目录下终端执行以下命令:
# 首次安装npm i yeim-uni-sdk# 更新npm update yeim-uni-sdk
使用Hbuilder X开发的用户,可以在uni-app插件市场通过uni_modules的形式进行安装。
https://ext.dcloud.net.cn/plugin?id=10148
GitHub:https://github.com/wzJun1/YeIM-Uni-SDK
Gitee:https://gitee.com/wzJun1/YeIM-Uni-SDK
// npm方式导入SDKimport {YeIMUniSDK, // SDKYeIMUniSDKDefines // 预定义常量} from 'yeim-uni-sdk'//uni_modules方式导入SDKimport {YeIMUniSDK, // SDKYeIMUniSDKDefines // 预定义常量} from './uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'
init(options) -> Object
静态方法,初始化YeIM-Uni-SDK,返回SDK实例,通过此实例调用SDK内一系列API。
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
baseURL | String | 是 | 空 | YeIM-Uni-Server Http Url |
socketURL | String | 是 | 空 | YeIM-Uni-Server WebSocket Url |
logLevel | Number | 否 | 0 | SDK日志等级 |
reConnectTotal | Number | 否 | 15 | 最大重连次数,为0则不限制一直重连 |
reConnectInterval | String | 否 | 3000 | 断线重连时间间隔,单位:毫秒 |
heartInterval | Number | 否 | 30000 | Socket心跳时间间隔,单位:毫秒 |
notification | Object | 否 | Notification | APP离线通知配置 |
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
autoPermission | Boolean | 否 | false | IM登录后是否自动检测通知权限 |
oppoChannelId | String | 否 | Default | OPPO手机安卓8.0以上的通知渠道ID(需要申请,一般默认为Default) |
xiaomiChannelId | String | 否 | high_system | 小米手机重要级别消息通知渠道ID(需要申请,一般默认为high_system) |
演示:
// main.js// npm方式导入SDK// import {// YeIMUniSDK, // SDK// YeIMUniSDKDefines // 预定义常量// } from 'yeim-uni-sdk'//uni_modules方式导入SDKimport {YeIMUniSDK, // SDKYeIMUniSDKDefines // 预定义常量} 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登录后是否自动检测通知权限}});
getInstance() -> Object?
静态方法,返回SDK实例。如未调用init
初始化SDK,此方法将返回null。
演示:
// main.js// npm方式导入SDK// import {// YeIMUniSDK, // SDK// YeIMUniSDKDefines // 预定义常量// } from 'yeim-uni-sdk'//uni_modules方式导入SDKimport {YeIMUniSDK, // SDKYeIMUniSDKDefines // 预定义常量} 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方式导入SDKimport {YeIMUniSDK, // SDKYeIMUniSDKDefines // 预定义常量} from './uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'//举例:let conversationType = YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE; //私聊会话类型
网络状态变化
全量会话列表更新
收到WebSocket推送的新消息
用户被踢下线,有相同且在线的userId使用connect接口登陆时触发
私聊会话已读回执,对端调用 clearConversationUnread
接口 清除未读数上报已读状态,分发事件 PRIVATE_READ_RECEIPT
撤回消息
私聊
YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE
群聊
YeIMUniSDKDefines.CONVERSATION_TYPE.GROUP
文本消息
YeIMUniSDKDefines.MESSAGE_TYPE.TEXT
图片消息
YeIMUniSDKDefines.MESSAGE_TYPE.IMAGE
语音消息
YeIMUniSDKDefines.MESSAGE_TYPE.AUDIO
小视频消息
YeIMUniSDKDefines.MESSAGE_TYPE.VIDEO
位置消息
YeIMUniSDKDefines.MESSAGE_TYPE.LOCATION
自定义消息
YeIMUniSDKDefines.MESSAGE_TYPE.CUSTOM
群聊系统通知
YeIMUniSDKDefines.MESSAGE_TYPE.GROUP_SYS_NOTICE
群聊文本@消息
YeIMUniSDKDefines.MESSAGE_TYPE.TEXT
私聊系统通知
YeIMUniSDKDefines.MESSAGE_TYPE.SYS_NOTICE
自有加入,不需要申请和审核,不需要被邀请人允许
YeIMUniSDKDefines.GROUP.JOINMODE.FREE
验证加入,需要申请,以及群主或管理员的同意才能入群
YeIMUniSDKDefines.GROUP.JOINMODE.CHECK
禁止加入
YeIMUniSDKDefines.GROUP.JOINMODE.FORBIDDEN
待处理
YeIMUniSDKDefines.GROUP.JOINMODE.PENDING
同意
YeIMUniSDKDefines.GROUP.JOINMODE.AGREE
拒绝
YeIMUniSDKDefines.GROUP.JOINMODE.REFUSE
允许任何人添加自己为好友
YeIMUniSDKDefines.USER.ADDFRIEND.ALLOW
需要经过自己确认才能添加自己为好友
YeIMUniSDKDefines.USER.ADDFRIEND.CONFIRM
拒绝加好友
YeIMUniSDKDefines.USER.ADDFRIEND.DENY
// npm方式导入SDK// import {// YeIMUniSDK, // SDK// YeIMUniSDKDefines // 预定义常量// } from 'yeim-uni-sdk'//uni_modules方式导入SDKimport {YeIMUniSDK, // SDKYeIMUniSDKDefines // 预定义常量} 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。
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
userId | String | 是 | 空 | 已注册的用户ID字符串 |
token | String | 是 | 空 | 登录token,由请求服务端Http接口换取 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
// npm方式导入SDK// import {// YeIMUniSDK, // SDK// YeIMUniSDKDefines // 预定义常量// } from 'yeim-uni-sdk'//uni_modules方式导入SDKimport {YeIMUniSDK, // SDKYeIMUniSDKDefines // 预定义常量} 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();
readyState() -> Number
返回值:
字段 | 类型 | 说明 |
---|---|---|
code | Number |
演示:
let code = YeIMUniSDK.getInstance().readyState();
updateUserInfo(options) -> Void
更新已登录用户昵称和头像。
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
nickname | String | 是 | 空 | 用户昵称 |
avatarUrl | String | 是 | 空 | 用户头像网络地址URL |
gender | Number | 否 | 空 | 性别 |
mobile | Number | 否 | 空 | 电话 |
String | 否 | 空 | 邮箱 | |
birthday | String | 否 | 空 | 生日 |
motto | String | 否 | 空 | 个性签名 |
extend | String | 否 | 空 | 用户自定义扩展字段 |
addFriendType | Number | 否 | 空 | 好友添加的方式 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示
YeIMUniSDK.getInstance().updateUserInfo({nickname: "修改后的用户昵称",avatarUrl: "修改后的用户头像网络地址",success: (response) => {console.log(response);},fail: (err) => {console.log(err);}});
getUserInfo(options) -> Void
根据传入的用户ID查询出对应的用户资料。
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
userId | String | 是 | 空 | 用户ID |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
其中 data 返回参数说明:
字段 | 类型 | 说明 |
---|---|---|
userId | String | 用户ID |
nickname | String | 用户昵称 |
avatarUrl | String | 头像 |
演示:
YeIMUniSDK.getInstance().getUserInfo({userId: e.value,success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
getBlackUserList(options) -> Void
根据传入的用户ID查询出对应的用户资料。
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
其中 data 返回参数说明:
字段 | 类型 | 说明 |
---|---|---|
userId | String | 用户ID |
coverUserId | String | 被拉黑用户ID |
coverUser | User | 被拉黑用户信息 |
演示:
YeIMUniSDK.getInstance().getBlackUserList({success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
addToBlackUserList(options) -> Void
被加入黑名单的用户,将无法给加入者发送消息
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
members | Array<String> | 是 | 空 | 用户ID列表 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().addToBlackUserList({members: ["user1", "user2"],success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
removeFromBlacklist(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
members | Array<String> | 是 | 空 | 用户ID列表 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().removeFromBlacklist({members: ["user1", "user2"],success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
createTextMessage(options) -> Message
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 接收者用户ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型 |
body | Object | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
body参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
text | String | 是 | 空 | 文字消息内容 |
返回参数说明:
演示:
//创建文字消息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)}});
createTextAtMessage(options) -> Message
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 群ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型,仅支持群聊 |
body | Object | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
body参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
text | String | 是 | 空 | 文字消息内容 |
atUserIdList | Array<String> | 是 | 空 | 需要 @ 的用户ID列表 |
返回参数说明:
演示:
//创建群聊文字@消息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
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 接收者用户ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型 |
body | Object | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
onProgress | Function | 否 | 无 | 上传进度回调函数 |
body.file参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
tempFilePath | String | 是 | 空 | 本地图片临时路径 |
width | Number | 是 | 空 | 图片宽度 |
height | Number | 是 | 空 | 图片高度 |
返回参数说明:
演示:
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)}});}});
createImageMessageFromUrl(options) -> Message
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 接收者用户ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型 |
body | Object | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
body参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
originalUrl | String | 是 | 空 | 原图网络Url |
originalWidth | Number | 是 | 空 | 原图宽度 |
originalHeight | Number | 是 | 空 | 原图高度 |
thumbnailUrl | String | 是 | 空 | 缩略图网络Url |
thumbnailWidth | Number | 是 | 空 | 缩略图宽度 |
thumbnailHeight | Number | 是 | 空 | 缩略图高度 |
返回参数说明:
演示:
//创建图片直发消息let message = YeIMUniSDK.getInstance().createImageMessageFromUrl({toId: '接收者用户ID', //接收者用户ID字符串conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊body: {originalUrl: "http://xxx.com/xxx.jpg", //原图网络UrloriginalWidth: 500, //原图宽度originalHeight: 500, //原图高度thumbnailUrl: "http://xxx.com/xxx.jpg", //缩略图网络UrlthumbnailWidth: 200, //缩略图宽度thumbnailHeight: 200, //缩略图高度},extra: "这是拓展的自定义的内容"});//发送消息YeIMUniSDK.getInstance().sendMessage({message: message,success: (res) => {console.log(res);},fail: (err) => {console.log(err)}});
createAudioMessage(options) -> Message
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 接收者用户ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型 |
body | Object | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
onProgress | Function | 否 | 无 | 上传进度回调函数 |
body.file参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
tempFilePath | String | 是 | 空 | 本地录音临时文件,仅支持AAC格式 |
duration | Number | 是 | 空 | 录音时长,单位:秒 |
返回参数说明:
演示:
//创建语音消息let message = YeIMUniSDK.getInstance().createAudioMessage({toId: '接收者用户ID', //接收者用户ID字符串conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊body: {file: {tempFilePath: '', //本地录音临时文件,仅支持AACduration: 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)}});
createAudioMessageFromUrl(options) -> Message
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 接收者用户ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型 |
body | Object | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
body参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
audioUrl | String | 是 | 空 | 音频网络Url |
duration | Number | 是 | 空 | 音频时长,单位:秒 |
返回参数说明:
演示:
//创建语音直发消息let message = YeIMUniSDK.getInstance().createAudioMessageFromUrl({toId: '接收者用户ID', //接收者用户ID字符串conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊body: {audioUrl: "http://xxx.com/xxx.aac", //音频网络Urlduration: 5, //音频时长,单位:秒},extra: "这是拓展的自定义的内容"});//发送消息YeIMUniSDK.getInstance().sendMessage({message: message,success: (res) => {console.log(res);},fail: (err) => {console.log(err)}});
createVideoMessage(options) -> Message
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 接收者用户ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型 |
body | Object | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
onProgress | Function | 否 | 无 | 上传进度回调函数 |
body.file参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
tempFilePath | String | 是 | 空 | 本地小视频文件临时路径 |
width | Number | 是 | 空 | 视频宽度 |
height | Number | 是 | 空 | 视频高度 |
duration | Number | 是 | 空 | 视频时长,单位:秒 |
返回参数说明:
演示:
//创建小视频消息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)}});
createVideoMessageFromUrl(options) -> Message
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 接收者用户ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型 |
body | Object | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
body参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
videoUrl | String | 是 | 空 | 小视频网络Url |
thumbnailUrl | String | 否 | 空 | 小视频缩略图网络Url |
duration | Number | 是 | 空 | 视频时长,单位:秒 |
width | Number | 是 | 空 | 视频宽度 |
height | Number | 是 | 空 | 视频高度 |
返回参数说明:
演示:
//创建小视频直发消息let message = YeIMUniSDK.getInstance().createVideoMessageFromUrl({toId: '接收者用户ID', //接收者用户ID字符串conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊body: {videoUrl: "http://xxx.com/xxx.aac", //小视频网络UrlthumbnailUrl: "http://xxx.com/xxx.aac", //小视频缩略图网络Urlduration: 5, //视频时长,单位:秒width: 5, //视频宽度height: 5, //视频高度},extra: "这是拓展的自定义的内容"});//发送消息YeIMUniSDK.getInstance().sendMessage({message: message,success: (res) => {console.log(res);},fail: (err) => {console.log(err)}});
createLocationMessage(options) -> Message
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 接收者用户ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型 |
body | Object | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
body参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
address | String | 是 | 空 | 地址名称 |
description | Number | 是 | 空 | 地址详细描述 |
longitude | Double | 是 | 空 | 经度 |
latitude | Double | 是 | 空 | 纬度 |
返回参数说明:
演示:
//创建位置消息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
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 接收者用户ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型 |
body | Body | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
Body:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
custom | String Object | 是 | 空 | 自定义消息内容 |
返回参数说明:
演示:
//创建自定义消息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)}});
createMergerMessage(options) -> Message
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 接收者用户ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型 |
body | Object | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
body参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
title | String | 是 | 空 | 合并消息的标题 |
messageList | Array<Message> | 是 | 空 | 合并的消息列表 |
summaryList | Array<String> | 是 | 空 | 合并的消息摘要列表 |
返回参数说明:
演示:
//创建合并消息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)}});
createForwardMessage(options) -> Message
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
toId | String | 是 | 空 | 接收者用户ID |
conversationType | YeIMUniSDKDefines.CONVERSATION_TYPE | 是 | 空 | 会话类型 |
body | Object | 是 | 空 | 消息容器 |
extra | String | 否 | 空 | 拓展的消息自定义数据 |
body参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
message | 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
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
message | Message | 是 | 空 | 消息体 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
//发送消息YeIMUniSDK.getInstance().sendMessage({message: message,success: (res) => {console.log(res);},fail: (err) => {console.log(err)}});
getConversation(conversationId) -> Object
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
conversationId | String | 是 | 空 | 会话ID |
返回参数:
其中 data 返回参数说明:
字段 | 类型 | 说明 |
---|---|---|
data | Conversation | 会话 |
演示:
let result = YeIMUniSDK.getInstance().getConversation("会话ID");let conversation = result.data;
getConversationList(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
page | Number | 是 | 空 | 页码 |
limit | Number | 是 | 空 | 每页会话数量 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
其中 data 返回参数说明:
字段 | 类型 | 说明 |
---|---|---|
data | Array<Conversation> | 会话列表 |
演示:
YeIMUniSDK.getInstance().getConversationList({page: 1, //页码limit: 20, //每页数量success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
getConversationList(conversationId) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
conversationId | String | 是 | 空 | 会话ID |
演示
//清除指定会话未读数,并给对方发送已读回执YeIMUniSDK.getInstance().clearConversationUnread("会话ID");
deleteConversation(conversationId) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
conversationId | String | 是 | 空 | 会话ID |
演示
//删除指定会话和会话内聊天记录YeIMUniSDK.getInstance().deleteConversation("会话ID");
getMessageList(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
page | Number | 是 | 空 | 页码 |
conversationId | String | 是 | 空 | 会话ID |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
其中 data 返回参数说明:
字段 | 类型 | 说明 |
---|---|---|
data | Array<Message> | 消息列表 |
演示:
YeIMUniSDK.getInstance().getMessageList({page: 1,conversationId: "会话ID",success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
getHistoryMessageList(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
conversationId | String | 是 | 空 | 会话ID |
nextMessageId | String | 否 | 空 | 下一次续拉的消息ID,第一次拉取时不要传入 |
limit | Number | 否 | 20 | 每次拉取的数量 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
其中 data 返回参数说明:
字段 | 类型 | 说明 |
---|---|---|
list | Array<Message> | 消息列表 |
nextMessageId | String | 下一次续拉的消息ID |
演示:
YeIMUniSDK.getInstance().getHistoryMessageList({nextMessageId: "下一次续拉的消息ID,第一次拉取时不要传入",conversationId: "会话ID",success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
revokeMessage(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
message | Message | 是 | 空 | 要撤回的完整消息 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().revokeMessage({message: message, //要撤回的消息success: (res) => {console.log("success");},fail: (err) => {console.log(err)}});
deleteMessage(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
message | Message | 是 | 空 | 要删除的完整消息 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().deleteMessage({message: message, //要删除的消息success: (res) => {console.log("success");},fail: (err) => {console.log(err)}});
upload(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
filename | String | 是 | 空 | 文件名称,需要携带文件后缀 |
filepath | String | 是 | 空 | 要上传的文件临时路径 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
其中 data 返回参数说明:
字段 | 类型 | 说明 |
---|---|---|
url | String | 上传完成的资源Url |
演示:
YeIMUniSDK.getInstance().upload({filename: "a.png", //文件名称,需带后缀filepath: "/sdcard/temp/a.png", //文件临时路径success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
createGroup(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
name | String | 是 | 空 | 群名称 |
avatarUrl | String | 是 | 空 | 群头像网络地址URL |
groupId | String | 否 | 空 | 群ID,未填写时系统自动生成 |
joinMode | YeIMUniSDKDefines.GROUP.JOINMODE | 否 | 空 | 群申请处理方式 |
introduction | String | 否 | 空 | 群简介 |
notification | String | 否 | 空 | 群公告 |
members | Array<String> | 否 | 空 | 创建群聊初始化成员(用户ID数组) |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().createGroup({name: "",avatarUrl: "",success: (res) => {uni.showToast({title: "创建成功"});},fail: (err) => {console.loh(err);}});
dissolveGroup(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
groupId | String | 是 | 空 | 群ID |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().dissolveGroup({groupId: "group_363712804290629",success: (res) => {uni.showToast({title: "解散成功"})},fail: (err) => {console.log(err)}});
transferLeader(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
groupId | String | 是 | 空 | 群ID |
userId | String | 是 | 空 | 转让的用户ID |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().transferLeader({groupId: "group_363712804290629",userId: "",success: (res) => {console.log(res);},fail: (err) => {console.log(err);}});
updateGroup(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
groupId | String | 是 | 空 | 群ID |
name | String | 否 | 空 | 群名称 |
avatarUrl | String | 否 | 空 | 群头像网络地址URL |
joinMode | YeIMUniSDKDefines.GROUP.JOINMODE | 否 | 空 | 群申请处理方式 |
introduction | String | 否 | 空 | 群简介 |
notification | String | 否 | 空 | 群公告 |
isMute | Number | 否 | 0 | 全体禁言,1 = 全体禁言 0 = 取消全体禁言 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().updateGroup({groupId: "group_363712804290629",name:"",avatarUrl:"",joinMode:"",introduction:"",notification:"",isMute:0,success: (res) => {console.log(res)},fail: (err) => {uni.hideLoading();}});
getGroup(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
groupId | String | 是 | 空 | 群ID |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().getGroup({groupId: "group_363712804290629",success: (res) => {console.log(res)},fail: (err) => {uni.hideLoading();}});
getGroupList(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().getGroupList({success: (res) => {console.log(res)},fail: (err) => {uni.hideLoading();}});
joinGroup(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
groupId | String | 是 | 空 | 群ID |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().joinGroup({groupId: "group_8",success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
leaveGroup(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
groupId | String | 是 | 空 | 群ID |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().leaveGroup({groupId: "group_8",success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
addGroupUsers(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
groupId | String | 是 | 空 | 群ID |
members | Array<String> | 是 | 空 | 用户ID列表 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().addGroupUsers({groupId: "group_8",members: ["user1", "user2"],success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
removeGroupUsers(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
groupId | String | 是 | 空 | 群ID |
members | Array<String> | 是 | 空 | 用户ID列表 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
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
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
groupId | String | 是 | 空 | 群ID |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().getGroupUserList({groupId: "group_8",success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
setAdminstrator(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
groupId | String | 是 | 空 | 群ID |
userId | String | 是 | 空 | 要设置的用户ID |
isAdmin | String | 是 | 空 | 是否设置管理员 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().setAdminstrator({groupId: "",userId: "",isAdmin: 1,success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
getGroupApplyList(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().getGroupApplyList({success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
handleApply(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
id | Number | 否 | 空 | 申请ID |
status | YeIMUniSDKDefines.GROUP.APPLYSTATUS | 否 | 空 | 处理结果 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().handleApply({id: 1,status: YeIMUniSDKDefines.GROUP.APPLYSTATUS.AGREE, //同意success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
setMute(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
groupId | String | 否 | 空 | 群ID |
userId | String | 否 | 空 | 禁言用户ID |
time | Number | 否 | 空 | 禁言时间,分钟 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().setMute({groupId: "",userId: "",time: 10,success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
addFriend(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
userId | String | 否 | 空 | 用户ID |
remark | String | 否 | 空 | 好友备注 |
extraMessage | String | 否 | 空 | 附言 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
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)}});
SDK登录后将触发好友列表更新事件,事件携带数据为全部好友列表并持久化缓存
getFriendList(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
cloud | Boolean | 否 | false | 是否从云端拉取 |
profile | Number | 否 | 0 | 资料类型 |
page | Number | 否 | 1 | 页码 |
limit | Number | 否 | 20 | 每页数量 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().getFriendList({page: 1,limit: 20,success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
SDK登录后将触发好友申请列表更新事件,事件携带数据为全部好友申请列表并持久化缓存
getFriendApplyList(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
cloud | Boolean | 否 | false | 是否从云端拉取 |
type | Number | 否 | 0 | 资料类型 |
page | Number | 否 | 1 | 页码 |
limit | Number | 否 | 20 | 每页数量 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().getFriendApplyList({page: 1,limit: 20,success: (res) => {console.log(res)},fail: (err) => {console.log(err)}});
setApplyListRead(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
//将全部好友申请设置为已读状态YeIMUniSDK.getInstance().setApplyListRead();
acceptApply(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
id | Number | 是 | 空 | 申请ID |
remark | Number | 否 | 空 | 好友备注 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
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)}});
refuseApply(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
id | Number | 是 | 空 | 申请ID |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
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)}});
deleteFriend(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
members | Array<String> | 是 | 空 | 好友ID数组 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().deleteFriend({members: ['user1', 'user2'],success: (res) => {console.log(res);//删除后触发事件:YeIMUniSDKDefines.EVENT.FRIEND_LIST_CHANGED},fail: (err) => {console.log(err)}});
updateFriend(options) -> Void
参数:
字段 | 类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
userId | String | 是 | 空 | 好友ID |
remark | String | 否 | 空 | 好友备注 |
extend | String | 否 | 空 | 自定义扩展字段 |
success | Function | 否 | 空 | 成功返回的回调函数 |
fail | Function | 否 | 空 | 调用失败的回调函数 |
success、fail 返回参数说明:
演示:
YeIMUniSDK.getInstance().updateFriend({userId: '好友ID',remark: '好友备注',extend: '自定义扩展字段'success: (res) => {console.log(res);//更新后将触发事件:YeIMUniSDKDefines.EVENT.FRIEND_LIST_CHANGED},fail: (err) => {console.log(err)}});
字段 | 类型 | 说明 |
---|---|---|
userId | String | 用户ID,全局唯一 |
nickname | String | 用户昵称 |
avatarUrl | String | 头像URL |
gender | Number | 性别 |
mobile | Number | 电话 |
String | 邮箱 | |
birthday | String | 生日 |
motto | String | 个性签名 |
extend | String | 用户自定义扩展字段 |
createdAt | Number | 注册时间,毫秒时间戳 |
字段 | 类型 | 说明 |
---|---|---|
userId | String | 用户ID |
friendUserId | String | 好友ID |
remark | String | 好友备注 |
extend | String | 自定义扩展字段 |
friendInfo | User | 好友资料 |
createdAt | Number | 成为好友的时间,毫秒时间戳 |
字段 | 类型 | 说明 |
---|---|---|
groupId | String | 群组ID,全局唯一 |
name | String | 群名称 |
avatarUrl | String | 群头像URL |
leaderUserId | String | 群主用户ID |
joinMode | YeIMUniSDKDefines.GROUP.JOINMODE | 群申请处理方式 |
introduction | String | 群简介 |
notification | String | 群公告 |
isMute | Number | 全体禁言 |
isDissolve | Number | 是否解散 |
createdAt | Number | 注册时间,毫秒时间戳 |
字段 | 类型 | 说明 |
---|---|---|
conversationId | String | 会话ID,私聊中为消息接收者ID |
conversationType1.1.4 | String | 会话类型 |
messageId | String | 消息ID,全局唯一(消息发送成功后返回) |
sequence | Number | 入库顺序 |
direction | String | 消息流方向 |
from | String | 消息发送者ID |
to | String | 消息接收者ID |
fromUserInfo | User | 消息发送者用户信息 |
type | String | 消息类型 |
body | Object | 消息内容体 |
extra | String | 自定义扩展数据 |
isRead | Number | 对端是否已读 对端调用 clearConversationUnread 清除未读数上报已读状态,触发事件 PRIVATE_READ_RECEIPT |
isRevoke | Number | 消息是否撤回 |
isDeleted | Number | 消息是否已删除 消息删除后云端同步删除,本地记录此字段作为已删除标志,但云端将不会拉取已经删除的消息。 |
status | String | 发送状态 |
String | v1.1.2版本弃用。接收状态 | |
time | Number | 消息入库时间,毫秒时间戳 |
类型 | 说明 |
---|---|
YeIMUniSDKDefines.MESSAGE_TYPE.TEXT | 文本消息 |
YeIMUniSDKDefines.MESSAGE_TYPE.IMAGE | 图片消息 |
YeIMUniSDKDefines.MESSAGE_TYPE.AUDIO | 音频消息 |
YeIMUniSDKDefines.MESSAGE_TYPE.VIDEO | 小视频消息 |
YeIMUniSDKDefines.MESSAGE_TYPE.LOCATION | 位置消息 |
YeIMUniSDKDefines.MESSAGE_TYPE.CUSTOM | 自定义消息 |
字段 | 类型 | 说明 |
---|---|---|
text | String | 文本消息内容 |
字段 | 类型 | 说明 |
---|---|---|
originalUrl | String | 原图图片地址URL |
originalWidth | Number | 原图宽度 |
originalHeight | Number | 原图高度 |
thumbnailUrl | String | 缩略图地址URL |
thumbnailWidth | Number | 缩略图宽度 |
thumbnailHeight | Number | 缩略图高度 |
字段 | 类型 | 说明 |
---|---|---|
audioUrl | String | 音频URL |
duration | Number | 时长,单位:秒 |
字段 | 类型 | 说明 |
---|---|---|
videoUrl | String | 视频URL |
thumbnailUrl | String | 视频封面图URL |
videoWidth | Number | 视频宽度 |
videoHeight | Number | 视频高度 |
字段 | 类型 | 说明 |
---|---|---|
address | String | 地址名称 |
description | String | 地址详细描述 |
longitude | Number | 经度 |
latitude | Number | 纬度 |
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模块是否选上。
https://ext.dcloud.net.cn/plugin?id=10266
https://ext.dcloud.net.cn/plugin?id=11143
https://gitee.com/wzJun1/ye-imuni-sdk_-uniapp_-vue3-tsdemo
字段 | 类型 | 说明 |
---|---|---|
code | String | 状态码,成功返回为:200,失败返回错误码 |
message | String | 信息提示 |
data | Object | 返回值 |
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>
接口内部使用WebSocket进行持久化连接,一般的连接URL组成类似于:ws://192.168.110.239:10010/im/user1/39b5409173763991853cc9061c374692
此时如果connect接口连接报错,先检查Server端的IP、端口是否连通,再检查用户对应的登录Token是否正确,可使用PostMan
进行WebSocket连接测试,观察连接情况。
如果状态码返回401,则表示登录Token错误。
如果返回其他情况,大多IP、端口不通。
打开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
1.2.0
引出的本地上传异常nvue
页面下无法使用实例的异常1.2.3 - 2023-04-06
createCustomMessage
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】
createTextAtMessage
创建合并消息接口 createMergerMessage
创建转发消息接口 createForwardMessage
createImageMessageFromUrl
createVideoMessageFromUrl
createAudioMessageFromUrl
mitt
代替uni事件总线【YeIM-Uni-Server】
1.1.9 - 2023-03-18
【YeIM-Uni-SDK】
1.1.8
版本引出的用户多端登录被踢反复重连的问题【YeIM-Uni-Server】
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
Vue3
编译时的上传异常Vue3 TypeScript
使用示例1.1.4 - 2023-01-27
【YeIM-Uni-SDK】
deleteMessage
接口conversationType
会话类型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
receive
字段【YeIM-Uni-Server】
received_call
receive
字段【数据库】
receive
字段1.1.1 - 2022-12-15
【YeIM-Uni-SDK】
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
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-Server
中 SpringBoot
版本 2.7.6 Spring-WebSocket
版本 5.3.241.0.5 - 2022-12-02
disConnect
断开连接接口deleteConversation
删除指定会话及会话内聊天记录revokeMessage
撤回消息clearConversationUnread
清除指定会话未读数接口,此接口将触发 PRIVATE_READ_RECEIPT
事件PRIVATE_READ_RECEIPT
私聊会话已读回执extra
字段,用于各个消息扩展自定义数据is_recall
为 is_revoke
1.0.4 - 2022-11-28
查询用户信息接口
YeIM-Uni-Server
消息通知异常1.0.3 - 2022-11-27
发送位置消息
查询登陆连接状态接口
upload
1.0.2 - 2022-11-26
图片消息
、语音消息
、小视频消息
1.0.1 - 2022-11-21
readme.md
1.0.0 - 2022-11-20