http://www.ox-holdings.com

本次更新为主要版本更新,如何使用该SDK的Web Demo

摘要即时通讯云网易云信于2017年4月27日发布3.6.0版,本次更新为主要版本的次要更新,详情见文章内容。发布的版本本次发布的版本号为 3.6.0版,更新时间为:2017年04月27日。iOS 更新内容新增新增事件订阅接口,可用于在线状态业务。发布事件复制 - (void)publishEvent:(NIMSubscribeEvent *)event completion:(NIMEventSubscribeBlock)completion订阅事件复制- (void)subscribeEvent:(NIMSubscribeRequest *)request completion:(NIMEventSubscribeResponseBlock)completion取消订阅事件复制- (void)unSubscribeEvent:(NIMSubscribeRequest *)request completion:(NIMEventSubscribeResponseBlock)completion查询事件复制- (void)querySubscribeEvent:(NIMSubscribeRequest *)request completion:(NIMEventSubscribeQueryBlock)completionSDK 数据存储优化,读写更加流畅。SDK 录音播放能力优化,解决某些场景下导致的卡顿问题。Android 更新内容新增1. 事件订阅服务:EventSubscribeService,提供如下接口:复制- publishEvent 发布事件- subscribeEvent 订阅指定账号、指定类型的事件- unSubscribeEvent 取消指定账号、指定事件类型的订阅关系- batchUnSubscribeEvent 取消指定事件类型的全部的订阅关系- querySubscribeEvent 查询指定指定账号、指定类型的订阅关系2. 事件订阅监听:EventSubscribeServiceObserver,提供如下接口:复制- observeEventChanged 监听事件变化3. IM Demo 实现在线状态展示。4. 支持设置消息提醒通知栏 smallIcon 背景颜色,StatusBarNotificationConfig#notificationColor。5. 本地消息清空后,别人再撤回消息,可收到消息撤回的通知变更1. 小米推送升级 V3.2.2 版本,解决部分小米手机升级到 Android 7.0 之后初始化推送崩溃、收不到推送的问题。2. IM Demo 更换通知栏透明 smallIcon。Windows(PC) SDK 更新内容新增音视频通话时可以录制其他成员的MP4文件,在原先的MP4发起和结束接口中json支持扩展的kNIMVChatUid,如果是本人和之前一样不填音视频数据监听追加 nim_vchat_set_audio_data_cb_ex 接口用于监听伴音数据音视频原先的动态推流接口nim_vchat_set_streaming_mode废弃,用户如果要互通推流需要在发起时确定音视频追加发送画面裁剪接口nim_vchat_set_video_frame_scale增加事件订阅相关接口修复修复无法修改好友备注的bug优化弱网环境下的链接稳定性修复聊天室异常登陆状态下发送消息ack通知信息不全的问题Web SDK 更新内容新增发布订阅事件,以及多端登录状态事件的订阅变更修复若干开启同步会话未读数后产生的bugs下载地址请从以下官网地址下载:

摘要即时通讯云网易云信SDK新版发布,本次发布的版本号为:2.8.0,为小幅更新版本,主要增加了消息撤回功能。发布的版本本次发布的版本号为 2.8.0版,更新时间为:2016年8月30日。iOS 2.8.0 更新内容新增添加消息撤回功能消息添加来源字段变更改善断网后立刻重连聊天室容易失败的问题Android 2.8.0 更新内容新增1. 添加消息撤回功能:MsgService#revokeMessage, MsgServiceObserve#observeRevokeMessage。2. 添加删除指定会话的漫游消息接口:MsgService#deleteRoamingRecentContact。3. 新增保存消息到本地接口:MsgService#saveMessageToLocal 可以设置消息存储的时间点。4. 消息中添加获取消息发送方类型接口:IMMessage#getFromClientType。变更1. 精简全文检索插件包大小。2. 清空会话本地消息记录 MsgService#clearChattingHistory 接口保留 RecentContact 中的 tag, extension, time 属性。Web SDK 2.8.0 更新内容新增消息撤回Windows(PC) SDK 2.8.0 更新内容修复V2.7.0版本下载文件暂停继续下载的问题。聊天室接口注册发送消息回执回调接口命名修改:nim_chatroom_reg_send_msg_arc_cb接口变更为nim_chatroom_reg_send_msg_ack_cb。 nim_chatroom.h消息历史插入本地DB一条消息的接口命名和参数调整:typedef void(*nim_msglog_write_db_only_async)(const char *account_id, NIMSessionType to_type, const char *msg_id, const char *json_msg, const char *json_extension, nim_msglog_res_cb_func cb, const void *user_data); 调整为 typedef void(*nim_msglog_insert_msglog_async)(const char *talk_id, const char *json_msg, bool need_update_session, const char *json_extension, nim_msglog_res_cb_func cb, const void *user_data); 。 nim_msglog.h合并错误码:10414和10450统一为10414,新增错误码kNIMLocalResMsgNosDownloadCheckError。nim_res_code_def.h群成员收到退群通知后群成员数据不从本地删除,通过标记位标记为无效,具体调用方法请参考api文档或开发文档。修复某种情况下session change通知时session id为空的问题。新增撤回消息。 nim_talk.h下载地址请从以下官网地址下载:

摘要即时通讯云网易云信于2017年09月12日发布4.2版,本次更新为主要版本更新,详情见文章内容。发布的版本本次发布的版本号为 4.2版,更新时间为:2017年09月12日。iOS 更新内容新增聊天室支持 bot 机器人,使用方式与普通消息一致。添加是否将群通知计入未读的开关@interface NIMSDKConfig : NSObject/** * @discusssion 默认为 NO。设置成 YES 的情况下,收到的群通知也会计入未读数 */@property (nonatomic,assign) BOOL shouldCountTeamNotification;@end添加日志最大存在天数设置@interface NIMSDKConfig : NSObject/** * @discusssion 默认为 7 天。即超过 7 天的 log 将被清除。只能设置大于等于 2 的值。 */@property (nonatomic,assign) NSInteger maximumLogDays;@end变更创建群接口变更/** * 创建群组 * * @param option 创建群选项 * @param users 用户ID列表 * @param completion 完成后的回调 */- (void)createTeam:(NIMCreateTeamOption *)option users:(NSArray<NSString *> *)users completion:(nullable NIMTeamCreateHandler)completion;创建群完成的回调由/** * 创建群组block * * @param error 错误,如果成功则error为nil * @param teamId 群组ID */typedef void(^NIMTeamCreateHandler)(NSError * __nullable error,NSString * __nullable teamId);变更为/** * 创建群组block * * @param error 错误,如果成功则error为nil * @param teamId 群组ID * @param failedUserIds 邀请失败的群成员ID */typedef void(^NIMTeamCreateHandler)(NSError * __nullable error, NSString * __nullable teamId, NSArray<NSString *> * __nullable failedUserIds);现在创建群可能会出现建群成功,建群同时邀请的用户部分成功的情况。此时建群依然成功,error 信息为 nil ,并返回邀请失败的群成员 ID 集合。Android 更新内容新增1. 添加聊天室 bot 机器人功能,添加机器人上行消息构建接口:ChatRoomMessageBuilder#createRobotMessage。2. 登录选项添加群通知消息是否计入未读数开关:SDKOptions#teamNotificationMessageMarkUnread。变更1. 对单个用户所在群的数量添加限制,影响到接口:TeamService#createTeam, 返回结果CreateTeamResult,包含邀请失败账号列表TeamService#addMembers, 返回结果 List,即邀请失败账号列表如果邀请成员中有群数量超过限制,返回码仍然是成功,并且同时返回这部分超限的账号。2. 解决登录偶现登录 417 问题。3. 添加登录同步失败情况处理。4. 添加 IPC ACK 机制,解决极端情况下群消息丢失的问题。5. 解决 HttpDownload 安全警告问题。Windows(PC) SDK 更新内容新增群通知消息是否计为未读数增加开关配置 nim_client.h聊天室支持机器人修复修复某些场景下群成员同步bugWeb SDK 更新内容新增聊天室匿名登录聊天室机器人及其发生消息接口聊天室获取机器人接口下载地址请从以下官网地址下载:

SDK 概述

网易云信 SDK 为 Web 应用提供一个完善的 IM 系统开发框架, 屏蔽掉 IM 系统的复杂的细节, 对外提供较为简洁的 API 接口, 方便第三方应用快速集成 IM 功能。
网易云信还开发了可供开发者们参考,如何使用该SDK的Web Demo:

  • Web源码导读
  • Web(移动端H5)源码导读(不包含音视频)

摘要即时通讯云网易云信于2018年08月07日发布5.5版,本次更新为主要版本更新,详情见文章内容。发布的版本本次发布的版本号为 5.5版,更新时间为:2018年08月07日。iOS 更新内容新增NIMSDK设置新增NOS资源场景配置字段@interface NIMSDK : NSObject@property (nonatomic,strong) NSMutableDictionary *sceneDict;@end资源管理新增对场景支持的资源上传接口@protocol NIMResourceManager <NSObject>- (void)upload:(NSString *)filepath scene:(NSString *)scene progress:(nullable NIMHttpProgressBlock)progress completion:(nullable NIMUploadCompleteBlock)completion;@end图片实例对象新增场景初始化接口@interface NIMImageObject : NSObject- (instancetype)initWithImage:(UIImage*)image scene:(NSString *)scene;- (instancetype)initWithFilepath:(NSString *)filepath scene:(NSString *)scene;- (instancetype)initWithData:(NSData *)data extension:(NSString *)extension scene:(NSString *)scene;@end视频实例对象新增场景初始化接口@interface NIMVideoObject : NSObject- (instancetype)initWithSourcePath:(NSString *)sourcePath scene:(NSString *)scene;- (instancetype)initWithData:(NSData *)data extension:(NSString *)extension scene:(NSString *)scene;@end语音实例对象新增场景初始化接口@interface NIMAudioObject : NSObject- (instancetype)initWithSourcePath:(NSString *)sourcePath scene:(NSString *)scene;- (instancetype)initWithData:(NSData *)data extension:(NSString *)extension scene:(NSString *)scene;@end文件实例对象新增场景初始化接口@interface NIMFileObject : NSObject- (instancetype)initWithSourcePath:(NSString *)sourcePath scene:(NSString *)scene;- (instancetype)initWithData:(NSData*)data extension:(NSString*)extension scene:(NSString *)scene;@end语音实例对象新增音频MD5字段@interface NIMAudioObject : NSObject@property (nullable,nonatomic, copy, readonly) NSString *md5;@end图片实例对象新增图片MD5字段@interface NIMImageObject : NSObject@property (nullable,nonatomic, copy, readonly) NSString *md5;Android 更新内容新增1. NOS场景配置2. 发送消息时可以指定 NOS 场景3. 上传文件时可以指定 NOS 场景Windows(PC) SDK 更新内容新增文件上传增加“场景”信息使用5.5版本及其以上SDK(PC端、移动端、web端)实现的客户端(简称:5.5+ SDK),向使用PC5.4及其以下版本SDK实现的客户端(简称:PC 5.4- SDK),发送图片消息且客户端开启下载缩略图功能时(即:5.5+ SDK 向 PC 5.4- SDK(preloadattach=true),发送图片消息),接收到的缩略图片可能是原图。建议升级SDK到5.5及其以上版本或者在UI层对缩略图做缩放处理。本地数据文件(*.db)备份功能修复Windows x64 下http库可能引起的崩溃Web SDK 更新内容新增IM,chatroom初始化增加文件存储配置IM,chatroom发送文件消息增加文件存储配置下载地址请从以下官网地址下载:

更新自己在聊天室内的信息

  • 当更新自己在聊天室内的信息时, 所有聊天室成员会收到类型为'updateMemberInfo'的聊天室通知消息。

可更新的字段有

  • 'nick' 聊天室内的昵称
  • 'avatar' 聊天室内的头像
  • 'custom': 第三方扩展字段
chatroom.updateMyChatroomMemberInfo({
member: {
nick: 'newNick',
avatar: 'newAvatar',
custom: 'newCustom',
},
needNotify: true,
custom: 'biu',
done: updateMyChatroomMemberInfoDone
})
function updateMyChatroomMemberInfoDone (error, obj) {
console.log('更新自己在聊天室内的信息' + (!error?'成功':'失败'), error, obj);
}

退出聊天室

  • 初始化聊天室并收到onconnect回调之后, 表明进入了聊天室
  • 在收到onconnect回调后可以调用chatroom.disconnect();来退出聊天室
  • 退出聊天室后可以调用chatroom.connect();来重新进入聊天室

从黑名单移除

  • 如果一个用户被从黑名单移除, 那么会重新收到此用户发送的消息
  • SDK内部调用nim.markInBlacklist来完成实际工作
nim.removeFromBlacklist({
account: 'account',
done: removeFromBlacklistDone
});
function removeFromBlacklistDone(error, obj) {
console.log(error);
console.log(obj);
console.log('从黑名单移除' + (!error?'成功':'失败'));
if (!error) {
removeFromBlacklist(obj);
}
}

聊天室成员

加入静音列表/从静音列表移除

  • 此接口可以完成以下两个功能, 通过参数isAdd来决定实际的功能
  • isAddtrue时, 会将account加入静音列表
  • isAddfalse时, 会将account从静音列表移除
  • 每个功能SDK都提供了相应的独立接口
nim.markInMutelist({
account: 'account',
// `true`表示加入静音列表, `false`表示从静音列表移除
isAdd: 'true',
done: markInMutelistDone
});
function markInMutelistDone(error, obj) {
console.log(error);
console.log(obj);
console.log('将' + obj.account + (isAdd ? '加入静音列表' : '从静音列表移除') + (!error?'成功':'失败'));
if (!error) {
onMarkInMutelist(obj);
}
}

发送聊天室消息

包括以下接口

  • 发送聊天室文本消息
  • 预览聊天室文件
  • 发送聊天室文件消息
  • 发送聊天室地理位置消息
  • 发送聊天室提醒消息
  • 发送聊天室自定义消息
  • 发送聊天室消息的配置选项

群成员对象

群成员对象有如下字段

  • teamId: 群ID
  • account: 帐号
  • type: 群成员类型
  • nickInTeam: 在群里面的昵称
  • active: 普通群拉人进来的时候, 被拉的人处于未激活状态, 未激活状态下看不到这个群, 当有人说话后自动转为激活状态, 能看到该群
  • joinTime: 入群时间
  • updateTime: 更新时间

拒绝好友申请

  • 申请加某个用户为好友后, 对方会收到一条类型为'applyFriend'的系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为接收方的账号, 用户在收到好友申请后, 可以选择通过或者拒绝好友申请。
  • 如果通过好友申请, 那么申请方会收到一条类型为'passFriendApply'的系统通知, 此类系统通知的from字段的值为通过方的帐号, to字段的值为申请方的账号。
  • 如果拒绝好友申请, 那么申请方会收到一条类型为'rejectFriendApply'的系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为申请方的账号。
  • ps: 附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容
// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.rejectFriendApply({
idServer: sysMsg.idServer,
account: 'account',
ps: 'ps',
done: rejectFriendApplyDone
});
function rejectFriendApplyDone(error, obj) {
console.log(error);
console.log(obj);
console.log('拒绝好友申请' + (!error?'成功':'失败'));
}

删除服务器上的会话

  • 删了服务器上的会话之后, 在不支持数据库时, 下次同步就同步不到对应的会话以及会话对应的漫游消息; 此外, 在新设备上也同步不到对应的会话以及会话对应的漫游消息
  • scene请参考消息场景
  • to 为对方账号或群ID
nim.deleteSession({
scene: 'p2p',
to: 'account',
done: deleteSessionDone
});
function deleteSessionDone(error, obj) {
console.log(error);
console.log(obj);
console.log('删除服务器上的会话' + (!error?'成功':'失败'));
}

是否支持数据库

// 通过此 `boolean` 值来查看 SDK 在某个浏览器上是否支持数据库
NIM.support.db

获取群

  • 开发者可以调用此接口获取群资料
nim.getTeam({
teamId: 123,
done: getTeamDone
});
function getTeamDone(error, obj) {
console.log(error);
console.log(obj);
console.log('获取群' + (!error?'成功':'失败'));
}

初始化 SDK

请查阅开发准备来下载并引入 SDK 文件

参数解释

  • debug: 是否开启日志, 开发者可以开启日志, 这样 SDK 会将关键操作的信息打印到控制台上, 便于调试
  • appKey: 在云信管理后台查看应用的 appKey
  • account: 帐号, 应用内唯一
  • token: 帐号的 token, 用于建立连接
  • transports: 用于建立长连接的协议数组,可不填,默认为['websocket', 'xhr-polling']
  • 默认状态 sdk优先使用websocket连接,如果浏览器不支持websocket,则使用xhr-polling
  • 开发者可手动设置连接及顺序,可支持选项包括websocket、xhr-polling、flashsocket
  • 示例如: transports: ['websocket'、'xhr-polling'、'flashsocket']
  • onconnect: 连接建立后的回调, 会传入一个对象, 包含登录的信息, 有以下字段
  • lastLoginDeviceId: 上次登录的设备的设备号
  • connectionId: 本次登录的连接号
  • ip: 客户端IP
  • port: 客户端端口
  • country: 本次登录的国家
  • onwillreconnect: 即将重连的回调
  • 此时说明 SDK 已经断开连接, 请开发者在界面上提示用户连接已断开, 而且正在重新建立连接
  • 此回调会收到一个对象, 包含额外的信息, 有以下字段
  • duration: 距离下次重连的时间
  • retryCount: 重连尝试的次数
  • ondisconnect: 断开连接后的回调
  • 此时说明 SDK 处于断开状态, 开发者此时应该根据错误码提示相应的错误信息, 并且跳转到登录页面
  • 此回调会收到一个对象, 包含错误的信息, 有以下字段
  • code: 出错时的错误码, 可能为空
  • 302: 账号或者密码错误, 请跳转到登录页面并提示错误
  • 417: 重复登录, 已经在其它端登录了, 请跳转到登录页面并提示错误
  • 'kicked': 被踢
  • onerror: 发生错误的回调, 会传入错误对象

未读数

SDK 会自动管理会话的未读数, 会话对象的unread的值为会话的未读数, 如果开发者发现会话的未读数大于收到的离线消息数, 那么需要从本地拉取未读取的消息

会话未读数的初始化在不同的配置环境下,会有不同的计算规则:

  • 开启数据库: db = true
  • 开启同步会话未读数: syncSessionUnread = true
  • 此时会话未读数通过服务器下推的Ack或本地存储的Ack时间戳,与本地数据库中对应会话的本地历史记录做比较,晚于该Ack且不是自己发的消息的数量,为未读数
  • 参见会话初始化参数
  • 未开启会话未读数: syncSessionUnread = false
  • 此时会话未读数通过从本地数据库上次所记录的未读数中取得,如果有离线消息且消息属性标记为isUnreadable,则会在原来的未读数上增加计数
  • 不开启数据库: db = false
  • 不开启自动标记消息已读: autoMarkRead = false
  • 此时服务器下推的所有离线消息算未读,漫游消息算已读
  • 开启自动标记消息已读: autoMarkRead = true
  • 此时每次收到离线消息,均会告知服务器该消息已读,下一次登录,服务器就不会下推离线消息,而将这些消息标记为漫游消息。没有离线消息,未读数在表现上均为0
  • 参见标记消息为已收到

发送本地消息

  • 发送消息时可以指定参数isLocaltrue, 那么SDK并不会发送此条消息, 而是直接调用回调表示发送成功, 并更新对应的会话
var value = Math.ceil(Math.random()*3);
var content = {
type: 1,
data: {
value: value
}
};
var msg = nim.sendCustomMsg({
scene: 'p2p',
to: 'account',
content: JSON.stringify(content),
isLocal: true,
done: sendMsgDone
});
console.log('正在发送p2p自定义消息, id=' + msg.idClient);
pushMsg(msg);

浏览器兼容性

云信 Web SDK (不包含实时音视频)兼容到 IE8

  • IE8/IE9 需要将项目部署在 HTTPS 环境下才能连接到云信服务器, 其它高级浏览器可以在 HTTP 或者 HTTPS 环境下连接到云信服务器

工具方法

聊天室消息

预览生成缩略图

  • 只支持通过预览文件或发送文件消息拿到的图片 url, 或者经过其他图片操作后拿到的图片 url
  • width/height 限制了缩略图的尺寸
  • width/height 必须大于等于 0, 不能同时为 0, 必须小于 4096
  • 不同模式下生成的缩略图是不一样的, 目前支持以下三种模式
  • 'cover': 原图片等比缩略, 缩略图一边等于请求的尺寸, 另一边大于请求的尺寸, 即缩略图刚好能覆盖住尺寸为 width*height 的矩形
  • 举个栗子, 假如说之前通过预览文件拿到的 url 为
    https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=
  • 此模式下传入 80*100 的尺寸得到的缩略图 url 为
    https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80z100
  • 开发者在浏览器中打开上面的链接之后, 可以直接修改 url 里面的数字来观察不同尺寸得到的缩略图
  • 'contain': 原图片等比缩略, 缩略图一边等于请求的尺寸, 另一边大于请求的尺寸, 即尺寸为 width*height 的矩形刚好能覆盖住缩略图
  • 还是拿上面的 url 为例, 传入 80*100 的尺寸得到的缩略图 RUL 为
    https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80x100
  • 开发者在浏览器中打开上面的链接之后, 可以直接修改 url 里面的数字来观察不同尺寸得到的缩略图
  • 'crop': 先等比缩略原图片, 使得一边等于请求的尺寸, 另一边大于请求的尺寸, 然后对大于请求尺寸的那条边进行裁剪, 使得最终的图片大小刚好等于请求的尺寸
  • 还是拿上面的 url 为例, 传入 80*100 的尺寸得到的缩略图 url 为
    https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100
  • 开发者在浏览器中打开上面的链接之后, 可以直接修改 url 里面的数字来观察不同尺寸得到的缩略图
  • 如果缩略图尺寸大于图片尺寸,默认情况下图片不会被放大,可以传入参数enlarge=true来放大图片
  • 举个栗子, 假如说之前通过预览文件拿到的 url 为
    https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=
  • 此 url 对应的图片尺寸为 512-256, 如果使用 'cover' 模式来裁剪, 传入尺寸 1024-512, 得到的缩略图 url 为
    https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=1024z512
  • 会发现图片尺寸并没有放大, 如果再传入参数 enlarge=true, 得到的缩略图 url 为
    https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=1024z512&enlarge=1
  • 会发现图片被放大了
  • 'crop' 模式下可以传入参数 axis.x 或 axis.y 来控制最后一步裁剪的位置
  • x/y 必须为整数, 取值范围为 0-10, 此方法内部使用 Math.round 来格式化 x/y
  • x 为 0 时表示裁取最左端, x 为 10 时表示裁取最右端
  • y 为 0 时表示裁取最上端, y 为 10 时表示裁取最下端
  • x/y 默认值均为 5, 即裁取正中间
  • 拿上面的 url 为例, 传入 80*100 的尺寸得到的缩略图 url 为
    https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100
  • 依次传入 x=0,1,2,3,4,5,6,7,8,9,10 得到的缩略图 url 为
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=0_5
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=1_5
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=2_5
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=3_5
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=4_5
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=5_5
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=6_5
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=7_5
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=8_5
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=9_5
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=10_5
  • 拿上面的 url 为例, 传入 200*50 的尺寸得到的缩略图 RUL 为
    https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50
  • 依次传入 y=0,2,4,6,8,10 得到的缩略图 url 为
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50&axis=5_0
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50&axis=5_1
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50&axis=5_2
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50&axis=5_3
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50&axis=5_4
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50&axis=5_5
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50&axis=5_6
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50&axis=5_7
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50&axis=5_8
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50&axis=5_9
  • https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=200y50&axis=5_10
var url = 'https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var thumbnailUrl = nim.viewImageThumbnail({
url: url,
mode: 'cover',
width: 80,
height: 100
});
// 缩略后的图片的 url 如下
// thumbnailUrl === 'https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80z100'
// 开发者在浏览器中打开上面的链接之后, 可以直接修改 url 里面的数字来观察不同的裁剪结果
*
thumbnailUrl = nim.viewImageThumbnail({
url: url,
mode: 'contain',
width: 80,
height: 100
});
// 缩略后的图片的 url 如下
// thumbnailUrl === 'https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80x100'
// 开发者在浏览器中打开上面的链接之后, 可以直接修改 url 里面的数字来观察不同的裁剪结果
*
thumbnailUrl = nim.viewImageThumbnail({
url: url,
mode: 'contain',
width: 80,
height: 100
});
// 缩略后的图片的 url 如下
// thumbnailUrl === 'https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100'
// 开发者在浏览器中打开上面的链接之后, 可以直接修改 url 里面的数字来观察不同的裁剪结果

thumbnailUrl = nim.viewImageThumbnail({
url: url,
mode: 'contain',
width: 80,
height: 100,
axis: {
// x 可取的值请参考上文描述
x: 0
}
});
// 缩略后的图片的 url 如下
// thumbnailUrl === 'https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=0_5'
// 开发者在浏览器中打开上面的链接之后, 可以直接修改 url 里面的数字来观察不同的裁剪结果

thumbnailUrl = nim.viewImageThumbnail({
url: url,
mode: 'contain',
width: 80,
height: 100,
axis: {
// y 可取的值请参考上文描述
y: 0
}
});
// 缩略后的图片的 url 如下
// thumbnailUrl === 'https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&thumbnail=80y100&axis=5_0'
// 开发者在浏览器中打开上面的链接之后, 可以直接修改 url 里面的数字来观察不同的裁剪结果

拉人入群

  • 普通群, 拉人入群后, 所有群成员会收到一条类型为'addTeamMembers'的群通知消息。此类群通知消息的from字段的值为拉人的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段accounts的值为被拉的人的帐号列表, attach有一个字段members的值为被拉的群成员列表。
  • 被邀请的群成员在有人说话后才能看到该, 而且会先收到一条类型为'addTeamMembers'的群通知消息, 然后会收到其它群消息。
  • 高级群的群主和管理员在邀请成员加入群(通过操作创建群或拉人入群)之后, 被邀请的人会收到一条类型为'teamInvite'的系统通知, 此类系统通知的from字段的值为邀请方的帐号, to字段的值为对应的群ID, 此类系统通知的attach有一个字段team的值为被邀请进入的群, 被邀请的人可以选择接受邀请或者拒绝邀请。
  • 如果接受邀请, 那么该群的所有群成员会收到一条类型为'acceptTeamInvite'的群通知消息, 此类群通知消息的from字段的值为接受入群邀请的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的群对象, attach有一个字段members的值为接收入群邀请的群成员列表。
  • 如果拒绝邀请, 那么邀请你的人会收到一条类型为'rejectTeamInvite'的系统通知, 此类系统通知的from字段的值为拒绝入群邀请的用户的帐号, to字段的值为对应的群ID。
  • ps: 附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容
nim.addTeamMembers({
teamId: 123,
accounts: ['a3', 'a4'],
ps: '加入我们的群吧',
done: addTeamMembersDone
});
function addTeamMembersDone(error, obj) {
console.log(error);
console.log(obj);
console.log('入群邀请发送' + (!error?'成功':'失败'));
}

取消指定事件的全部订阅关系

  • 取消指定事件的全部订阅关系

示例代码

nim.unSubscribeEventsByType({
type: 100000,
done: unSubscribeEventDone
});
function unSubscribeEventDone(error, obj) {
console.log('取消订阅事件' + (!error?'成功':'失败'), error, obj);
}

参数解释

  • type, 事件类型,用户自定义可发布事件类型值为100000以上,通过上层逻辑定义其含义;1为服务器特殊事件,即多端登录状态,可订阅不可发布。
  • done, 用户自定义的结果回调函数
  • 此回调包含两个参数,第一个参数为error,如果成功则error为null;第二个参数为obj, 它有一个字段failedAccounts的值为操作的类型, 具体类型如下:
  • failedAccounts, 失败的账号数组,如果为空数组则表示操作全部成功

发送消息

  • 跟发消息相关的接口有
  • 发送文本消息
  • 预览文件
  • 发送文件消息
  • 发送地理位置消息
  • 发送提醒消息
  • 发送自定义消息
  • 发送机器人消息
  • 发送消息的配置选项
  • 发送本地消息
  • 重发消息
  • 转发消息
  • 消息撤回
  • 先解释几个所有发送消息的接口都用到的参数
  • scene参数用来指定发送消息的场景
  • to参数用来指定消息的接收方, 发送点对点消息时填帐号, 发送群消息时填群ID
  • 发送消息的接口会返回SDK生成的ID, 对应为字段idClient, 有一个例外是直接发送文件消息是在beforesend回调里获取这个值
  • done回调中可以根据error对象和消息对象的idClient字段来确定对应的消息的发送状态。
  • 如果error为空, 那么表明idClient对应的消息发送成功
  • error不为空, 表明idClient对应的消息发送失败, error包含详细的错误信息
  • 以下代码皆以发送点对点消息(scene'p2p')为例, 如需发送群消息, 请将scene的值替换为'team', 将to的值替换为群ID

性别

  • 'unknown' (未知)
  • 'male' (男)
  • 'female' (女)

生成缩略图

  • 只支持通过预览文件或发送文件消息拿到的图片 url, 或者经过其他图片操作后拿到的图片 url
  • width/height 限制了缩略图的尺寸
  • width/height 必须大于等于 0, 不能同时为 0, 必须小于 4096
  • 不同模式下生成的缩略图是不一样的, 目前支持以下三种模式
  • 'cover': 原图片等比缩略, 缩略图一边等于请求的尺寸, 另一边大于请求的尺寸, 即缩略图刚好能覆盖住尺寸为 width*height 的矩形
  • 'contain': 原图片等比缩略, 缩略图一边等于请求的尺寸, 另一边大于请求的尺寸, 即尺寸为 width*height 的矩形刚好能覆盖住缩略图
  • 'crop': 先等比缩略原图片, 使得一边等于请求的尺寸, 另一边大于请求的尺寸, 然后对大于请求尺寸的那条边进行裁剪, 使得最终的图片大小刚好等于请求的尺寸
  • 如果缩略图尺寸大于图片尺寸,默认情况下图片不会被放大,可以传入参数enlarge=true来放大图片
  • 'crop' 模式下可以传入参数 axis.x 或 axis.y 来控制最后一步裁剪的位置
  • x/y 必须为整数, 取值范围为 0-10, 此方法内部使用 Math.round 来格式化 x/y
  • x 为 0 时表示裁取最左端, x 为 10 时表示裁取最右端
  • y 为 0 时表示裁取最上端, y 为 10 时表示裁取最下端
  • x/y 默认值均为 5, 即裁取正中间
var url = 'http://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var thumbnailUrl = nim.thumbnailImage({
url: url,
mode: 'cover',
width: 80,
height: 100,
done: thumbnailImageDone
});
function thumbnailImageDone(error, obj) {
console.log(error);
console.log(obj);
console.log('生成缩略图' + (!error?'成功':'失败'));
}

获取聊天室成员列表

  • guest: true表示获取游客, false表示获取非游客成员
  • 游客列表按照游客进入聊天室的时间倒序排列
  • 非游客(即固定成员)列表按照成为固定成员的时间倒序排列
  • 当设置guest=false来获取非游客成员时, 默认会获取所有的固定成员, 包括不在线的, 可以设置onlyOnline=true来只获取在线的固定成员
  • time 分页用, 查找该时间戳之前的成员
  • 默认 0 代表当前服务器时间
  • 获取游客时, 此字段填上次获取的最后一个游客的enterTime
  • 获取非游客时, 此字段填上次获取的最后一个非游客的updateTime
  • limit 分页用, 默认 100
chatroom.getChatroomMembers({
guest: false,
limit: 100,
done: getChatroomMembersDone
});
function getChatroomMembersDone(error, obj) {
console.log('获取聊天室成员' + (!error?'成功':'失败'), error, obj.members);
}

聊天室功能概述

  • 目前不支持通过 SDK 接口建立/解散聊天室。
  • 进入聊天室时必须建立新的连接,退出聊天室或者被踢会断开连接,在聊天室中掉线会有自动重连,开发者需要监听聊天室连接状态来做出正确的界面表现。
  • 支持聊天人数无上限。
  • 聊天室只允许用户手动进入,无法进行邀请。
  • 支持同时进入多个聊天室,会建立多个连接。
  • 断开聊天室连接后,服务器不会再推送该聊天室的消息给此用户。
  • 在进行一切操作之前,必须先进入聊天室。即必须先初始化好聊天室并且收到onconnect回调。
  • 用户进入聊天室之后,不会收到此聊天室的历史消息推送。如有历史消息需求,可以调用消息查询接口进行显示。
  • 聊天室成员分固定成员和游客两种类型。

获取好友列表

  • 如果开发者在初始化SDK的时候设置了syncFriendsfalse, 那么就收不到onfriends回调, 可以调用此接口来获取好友列表。
nim.getFriends({
done: getFriendsDone
});
function getFriendsDone(error, friends) {
console.log('获取好友列表' + (!error?'成功':'失败'), error, friends);
if (!error) {
onFriends(friends);
}
}

预览聊天室文件

  • 开发者可以预览文件, 支持以下几种场景
  • 通过参数fileInput传入文件选择 dom 节点或者节点 ID
  • 通过参数blob传入 Blob 对象
  • 通过参数dataURL传入包含 MIME type 和 base64 数据的 data URL, 此用法需要浏览器支持 window.Blob
  • SDK会将文件上传到文件服务器, 然后将拿到的文件对象在done回调中传给开发者, 文件对象有以下几种
  • 图片对象
  • 音频对象
  • 视频对象
  • 文件对象
  • 开发者在拿到文件对象之后, 可以调用发送聊天室文件消息来发送文件消息。
  • 文件大小限制为最大100M
  • 高级浏览器会在上传前就检测文件大小
  • IE8/IE9 会在上传完成后检测文件大小
chatroom.previewFile({
type: 'image',
fileInput: fileInput,
uploadprogress: function(obj) {
console.log('文件总大小: ' + obj.total + 'bytes');
console.log('已经上传的大小: ' + obj.loaded + 'bytes');
console.log('上传进度: ' + obj.percentage);
console.log('上传进度文本: ' + obj.percentageText);
},
done: function(error, file) {
console.log('上传image' + (!error?'成功':'失败'));
// show file to the user
if (!error) {
var msg = chatroom.sendFile({
scene: 'p2p',
to: 'account',
file: file,
done: sendChatroomMsgDone
});
console.log('正在发送聊天室image消息, id=' + msg.idClient);
}
}
});

发布订阅事件

  • 向各个客户端发布独立事件

示例代码

nim.publishEvent({
type: 100000,
value: 2,
custom: 'hello world',
vaildTime: 60,
sync: false,
done: publishEventDone
});
function publishEventDone(error, obj) {
console.log('发布事件' + (!error?'成功':'失败'), error, obj);
}

参数解释

  • type, 事件类型,用户自定义可发布事件类型值为100000以上,通过上层逻辑定义其含义
  • value, 事件值,与对应事件类型一一对应,用上层订阅其含义,必须是自然数
  • custom, 用户自定义事件的扩展属性,可选参数,最大256字节
  • vaildTime, 用户发布事件的有效时间,可选参数,以秒为单位,范围在60s~7天(604800s),默认7天
  • broadcastType, 事件广播类型,可选参数,1:仅在线 2:在线和离线,默认2(在线和离线)
  • sync, 是否同步给自己,可选参数,true/false,默认false
  • done, 用户自定义的结果回调函数,第一个参数为error,如果成功则error为null

发送聊天室自定义消息

var value = Math.ceil(Math.random()*3);
var content = {
type: 1,
data: {
value: value
}
};
var msg = chatroom.sendCustomMsg({
content: JSON.stringify(content),
done: sendChatroomMsgDone
});
console.log('正在发送聊天室自定义消息, id=' + msg.idClient);

发送聊天室文本消息

var msg = chatroom.sendText({
text: 'hello',
done: sendChatroomMsgDone
});
console.log('正在发送聊天室text消息, id=' + msg.idClient);
function sendChatroomMsgDone(error, msg) {
console.log('发送聊天室' + msg.type + '消息' + (!error?'成功':'失败') + ', id=' + msg.idClient, error, msg);
}

设置聊天室临时禁言

  • 当有人被设置聊天室临时禁言时,所有聊天室成员会收到类型为'addTempMute' or 'removeTempMute'的聊天室通知消息。
  • account: 帐号
  • duration: 禁言时长,单位秒,传0表示解除禁言
  • needNotify: 是否需要下发对应的通知消息
  • custom: 对应的通知消息的扩展字段
chatroom.updateChatroomMemberTempMute({
account: 'account',
duration: 60,
needNotify: true,
custom: 'biu',
done: updateChatroomMemberTempMuteDone
})
function updateChatroomMemberTempMuteDone(error, obj) {
console.log('设置聊天室临时禁言' + (!error?'成功':'失败'), error, obj);
}

接收群消息

参考上文的接收消息

设置聊天室禁言名单

  • 被加入禁言名单的人将不能在该聊天室发送消息
  • account: 待设置的账号
  • isAdd: true表示添加, false表示移除
  • 当有人被加入禁言名单时, 所有聊天室成员会收到类型为'gagMember'的聊天室通知消息。
  • 当有人被移除禁言名单时, 所有聊天室成员会收到类型为'ungagMember'的聊天室通知消息。
  • custom: 扩展字段, 如果填了, 那么其它聊天室成员收到的聊天室通知消息的attach.custom的值为此字段
  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
chatroom.markChatroomGaglist({
account: 'account',
isAdd: true,
done: markChatroomGaglistDone
});
function markChatroomGaglistDone(error, obj) {
console.log('添加聊天室禁言名单' + (!error?'成功':'失败'), error, obj.member);
}

预览interlace图片

  • 只支持通过预览文件或发送文件消息拿到的图片 url, 或者经过其他图片操作后拿到的图片 url
  • 在网络环境较差时, interlace 后的图片会以从模糊到清晰的方式呈现给用户
var url = 'https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=';
var interlaceUrl = nim.viewImageInterlace({
url: url
});
// interlace 后的图片 url 如下
// interlaceUrl === 'https://nim.nos.netease.com/MTAxMTAwMg==/bmltYV8xNDc5OTNfMTQ0MzE0NTgyNDI0M184YjFkYTMwMS02NjcxLTRiYjktYTUwZC04ZTVlZjZlNzZjMzA=?imageView&interlace=1'

更新聊天室配置

聊天室设计为单例模式, 如果需要更新当前聊天室的配置, 那么可以调用此接口, 参数列表和格式跟Chatroom.getInstance保持一致, 以更新 token 为例

// 断开聊天室
chatroom.disconnect()
// 更新 token
chatroom.setOptions({
token: 'newToken'
});
// 重新连接
chatroom.connect()

生成规则

SDK 会根据漫游消息和离线消息来生成初始会话列表, 在收到消息和发送消息之后 SDK 会更新会话列表

打包

如果开发者选用 webpack/babel 来打包, 那么请使用 exclude 将 SDK 文件排除, 避免 babel 二次打包引起的错误

聊天室成员对象

聊天室成员对象有以下字段

  • chatroomId: 聊天室 ID
  • account: 账号
  • nick: 聊天室内的昵称
  • avatar: 聊天室内的头像
  • type: 聊天室成员类型
  • guest 是否是游客
  • blacked 是否被拉黑
  • gaged 是否被禁言
  • level: 级别
  • online: 是否在线, 只有固定成员才能离线, 对游客而言只能是在线
  • enterTime: 进入聊天室的时间, 如果离线, 无该字段
  • custom: 扩展字段
  • 推荐使用JSON格式构建, 非JSON格式的话, Web端会正常接收, 但是会被其它端丢弃
  • updateTime: 更新时间
  • tempMuted: 是否被临时禁言
  • tempMuteDuration: 临时禁言剩余时长

消息初始化参数

  • 这里的参数并不是所有的初始化参数, 请查阅初始化 SDK, 以及其它章节的初始化参数
  • 初始化SDK
  • 多端登录初始化参数
  • 用户关系初始化参数
  • 好友关系初始化参数
  • 用户名片初始化参数
  • 群组初始化参数
  • 会话初始化参数
  • 消息初始化参数
  • 系统通知初始化参数
  • 同步完成
  • 完整的初始化代码
  • 请参考处理群通知消息

示例代码

var nim = NIM.getInstance({
onroamingmsgs: onRoamingMsgs,
onofflinemsgs: onOfflineMsgs,
onmsg: onMsg
});
function onRoamingMsgs(obj) {
console.log('收到漫游消息', obj);
pushMsg(obj.msgs);
}
function onOfflineMsgs(obj) {
console.log('收到离线消息', obj);
pushMsg(obj.msgs);
}
function onMsg(msg) {
console.log('收到消息', msg.scene, msg.type, msg);
pushMsg(msg);
switch (msg.type) {
case 'custom':
onCustomMsg(msg);
break;
case 'notification':
// 处理群通知消息
onTeamNotificationMsg(msg);
break;
default:
break;
}
}
function pushMsg(msgs) {
if (!Array.isArray(msgs)) { msgs = [msgs]; }
var sessionId = msgs[0].sessionId;
data.msgs = data.msgs || {};
data.msgs[sessionId] = nim.mergeMsgs(data.msgs[sessionId], msgs);
}
function onCustomMsg(msg) {
// 处理自定义消息
}

参数解释

  • shouldIgnoreNotification, 是否要忽略某条通知类消息, 该方法会接收一个消息对象, 如果该方法返回 true, 那么 SDK 将忽略此条通知类消息
  • onroamingmsgs, 同步漫游消息的回调, 每个会话对应一个回调, 会传入消息数组
  • onofflinemsgs, 同步离线消息的回调, 每个会话对应一个回调, 会传入消息数组
  • 在支持数据库时并且启用了多 tab 同时登录, 那么如果多个 tab 页同时断线重连之后, 只会有一个 tab 页负责存储漫游消息和离线消息, 即只会有一个 tab 页会收到 onroamingmsgsonofflinemsgs 回调, 其它 tab 页在同步完成之后, 需要调用获取本地历史记录来从本地缓存中拉取消息记录
  • onmsg, 收到消息的回调
  • 当前登录帐号在其它端发送消息之后也会收到此回调, 注意此时消息对象的from字段就是当前登录的帐号
  • 可以调用nim.mergeMsgs来合并数据

多端登录

云信支持多端同时登录, 即用户可以同时在移动端和网页端登录同一账号

更新本地消息

  • 更新 idClient 对应的本地消息
  • 如果不支持数据库, 算成功
  • 如果对应的消息不存在, 算成功, 返回 null
  • 这些字段只会被更新到本地数据库, 不会被更新到服务器上
nim.updateLocalMsg({
id: 'p2p-account',
localCustom: '{"key","value"}',
done: updateLocalMsgDone
});
function updateLocalMsgDone(error, obj) {
console.log(error);
console.log(obj);
console.log('更新本地消息' + (!error?'成功':'失败'));
}

更新群

  • 普通群不可以更新
  • 群加入方式
  • 群被邀请模式
  • 群邀请模式
  • 群信息修改权限
  • 群信息自定义字段修改权限
  • 更新群后, 所有群成员会收到一条类型为'updateTeam'的群通知消息。此类群通知消息的from字段的值为更新群的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为被更新的群信息
nim.updateTeam({
teamId: 123,
name: '群名字',
avatar: 'avatar',
intro: '群简介',
announcement: '群公告',
joinMode: 'needVerify',
custom: '自定义字段',
done: updateTeamDone
});
function updateTeamDone(error, team) {
console.log(error);
console.log(team);
console.log('更新群' + (!error?'成功':'失败'));
}

删除本地系统通知

  • 删除 idServer 对应的本地系统通知
  • 如果不支持数据库, 算成功
  • 如果对应的系统通知不存在, 算成功
nim.deleteLocalSysMsg({
idServer: '1234',
done: deleteLocalSysMsgDone
});
function deleteLocalSysMsgDone(error, obj) {
console.log(error);
console.log(obj);
console.log('删除本地系统通知' + (!error?'成功':'失败'));
}

服务器推送的订阅事件(初始化)

  • 这里的参数并不是所有的初始化参数, 请查阅初始化 SDK, 以及其它章节的初始化参数

示例代码

var nim = NIM.getInstance({
onpushevents: onPushEvents
});
function onPushEvents(param) {
console.log('订阅事件', param.msgEvents);
}

参数解释

  • onpushevents, 服务器推送事件的回调函数,以下情况会收到此回调:
  • 订阅了对应账号对应类型的事件,且订阅关系在有效期内,对方发布了相应时间
  • 此回调会收到一个参数param, 它有一个字段msgEvents的值为操作的类型, 具体类型如下:
  • msgEvents, 推送事件对象数组,数组对象中包含以下一些字段
  • msgEvents[i].account,发布对应事件的账号
  • msgEvents[i].type,事件类型
  • msgEvents[i].value,事件值
  • msgEvents[i].clientType,客户端类型
  • msgEvents[i].custom,用户发布事件的自定义消息
  • msgEvents[i].idClient,消息本地客户端id
  • msgEvents[i].idServer,消息服务器id
  • msgEvents[i].serverConfig,服务器下推的配置消息(客户端不可发布)

事件发布及订阅

用户可以通过事件发布及订阅,来实现"发布-订阅"的设计模式编程方法。可应用于多端登录状态同步、用户个性化信息订阅、逻辑异步流处理等场景。

郑重声明:本文版权归新匍京a奥门-最全网站手机版app官方下载所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。