目录
引入头文件
<script type="text/javascript" src="mimc-min_1_0_2.js"></script>
用户初始化
默认支持多设备登录,根据浏览器UserAgent做设备区分
user = new MIMCUser(appId, appAccount);
user.registerFetchToken(fetchMIMCToken); //获取token回调
user.registerStatusChange(statusChange); //登录结果回调
user.registerServerAckHandler(serverAck); //发送消息后,服务器接收到消息ack的回调
user.registerP2PMsgHandler(receiveP2PMsg); //接收单聊消息回调
user.registerGroupMsgHandler(receiveP2TMsg); //接收群聊消息回调
user.registerPullNotificationHandler(pullNotificationHandler); //拉取离线消息回调
user.registerDisconnHandler(disconnect); //连接断开回调
user.registerUCDismissHandler(ucDismiss); //解散无限大群回调
user.registerUCJoinRespHandler(ucJoinResp); //加入无限大群回调
user.registerUCMsgHandler(ucMessage); //接收无限大群消息回调
user.registerUCQuitRespHandler(ucQuitResp); //退出无限大群回调
安全认证
参考 安全认证 ,实现以下API:
/**
* 同步访问代理认证服务(appProxyService),
* 从代理认证服务返回结果中解析[小米认证服务下发的原始数据]并返回
**/
function fetchMIMCToken() {
}
登录
user.login();
在线状态变化回调
/**
* @param[bindResult] bool: true/false 表示登录成功/失败
* @param[errType] string: 登录失败类型
* @param[errReason] string: 登录失败原因
* @param[errDesc] string: 登录失败描述
**/
function statusChange(bindResult, errType, errReason, errDesc) {
}
发送单聊消息
/**
* @param[appAccount] string: 消息接收者在App账号系统的账号ID
* @param[payload] string UTF-8: 用户自定义消息体
* @param[bizType] string: 消息类型,默认空字符串
* @param[isStore] bool: 消息是否存储在mimc服务端,true 存储, false 不存储, 默认存储
# @return string: 由客户端生成的消息ID
**/
var packetId = user.sendMessage(appAccount, payload, isStore);
var packetId = user.sendMessage(appAccount, payload, bizType, isStore);
发送群聊消息
/**
* @param[groupId] string: 群ID,也名为topicId
* @param[payload] string UTF-8: 用户自定义消息体
* @param[bizType] string: 消息类型,默认空字符串
* @param[isStore] bool: 消息是否存储在mimc服务端,true 存储, false 不存储, 默认存储
# @return string: 由客户端生成的消息ID
**/
var packetId = user.sendGroupMessage(groupId, payload, isStore);
var packetId = user.sendGroupMessage(groupId, payload, bizType, isStore);
服务器响应回调
/**
* @param[packetId] string: 成功发送到服务器消息的packetId,即sendMessage(,)的返回值
* @param[sequence] string: 服务器生成,单用户空间内递增唯一,可用于排序(升序)/去重
* @param[timeStamp] string: 消息到达服务器时间(ms)
* @param[errMsg] string: 服务器返回的错误信息
**/
function serverAck(packetId, sequence, timeStamp, errMsg) {
}
接收消息回调
/**
* @param[P2PMsg] object: 接收到的P2P消息体
**/
function receiveP2PMsg(P2PMsg) {
P2PMsg.getPacketId(); // 客户端生成的消息ID
P2PMsg.getSequence(); // 由服务器生成,用于去重排序(升序)
P2PMsg.getFromAccount(); // 消息发送者在APP账号系统的账号ID
P2PMsg.getTimeStamp(); // 消息发送时间戳
P2PMsg.getBizType(); //消息类型
P2PMsg.getPayload(); // payload为用户自定义消息,UTF-8 string类型
}
接收群聊消息回调
/**
* @param[P2TMsg] object: 接收到的P2T消息体
**/
function receiveP2TMsg(P2TMsg) {
P2TMsg.getPacketId(); // 客户端生成的消息ID
P2TMsg.getSequence(); // 由服务器生成,用于去重排序(升序)
P2TMsg.getFromAccount(); // 消息发送者在APP账号系统的账号ID
P2TMsg.getTopicId(); // 群ID
P2TMsg.getTimeStamp(); // 消息发送时间戳
P2TMsg.getBizType(); //消息类型
P2TMsg.getPayload(); // payload为用户自定义消息,utf-8 string类型
}
拉取离线消息通知回调
/**
* 通知主动拉取离线消息,拉取区间:(minSequence, maxSequence]
* 默认情况,当用户处于离线状态时,最多保留近7天内的离线消息,直到用户上线,持续下发缓存的离线消息。
* 若积压的离线消息过多,会一直下发离线消息,从而导致长时间无法接收最新消息,直到离线消息接收完毕为止。
* 我们支持设置一个阈值来控制离线消息是否持续下发,比如阈值设置为offlineMsgMaxCount=500,表示当离线消息达到500条时,触发onPullNotification(...)
* 回调,当回调接口返回true时,服务端会跳过离线消息,直接下发最新的实时消息,应用方可根据回调形参单独去拉取离线消息。
* 1)首先拉取会话列表;
* 2)然后用会话列表中的"sequence"字段和回调接口的“minSequence”形参进行比对,当sequence > minSequence时,说明需要拉取该会话的历史消息;
* 3)最后拉取历史消息,其中"fromAccount"字段从会话列表中提取即可。
* 会话列表:https://admin.mimc.chat.xiaomi.net/docs/13-chatlist.html
* 历史消息:https://admin.mimc.chat.xiaomi.net/docs/11-history.html
*/
/**
* @param[minSequence] String: 离线消息最小的sequence
* @param[maxSequence] String: 离线消息最大的sequence
**/
function pullNotificationHandler(minSequence, maxSequence) {}
无限大群
创建无限大群
/**
* @param[groupName] string: 群名称
* @param[createUCGroupCB] func: 创建无限大群回调
* @param[context] : 用户自定义内容,通过回调函数原样传出
**/
user.createUnlimitedGroup(groupName, createUCGroupCB, context);
创建无限大群回调
/**
* @param[topicId] string: 群id
* @param[topicName] string: 群名称
* @param[isSuccess] bool: 是否创建成功
* @param[errMsg] string: 错误信息
* @param[context] : 用户自定义传入的内容
**/
function createUCGroupCB(topicId, topicName, isSuccess, errMsg, context)
加入无限大群
/**
* @param[topicID] string: 群id,必须为string类型
* @param[context] : 用户自定义内容,通过回调函数原样传出
**/
user.joinUnlimitedGroup(topicID, context);
加入无限大群回调
/**
* @param[topicId] string: 群id
* @param[code] int: 返回码,0为成功,其他为失败
* @param[msg] string: 错误信息
* @param[context] : 用户自定义传入的内容
**/
function ucJoinResp(topicId, code, msg, context)
退出无限大群
/**
* @param[topicID] string: 群id,必须为string类型
* @param[context] : 用户自定义内容,通过回调函数原样传出
**/
user.quitUnlimitedGroup(topicID, context);
退出无限大群回调
/**
* @param[topicId] string: 群id
* @param[code] int: 返回码,0为成功,其他为失败
* @param[msg] string: 错误信息
* @param[context] : 用户自定义传入的内容
**/
function ucQuitResp(topicId, code, msg, context)
群主解散无限大群
/**
* @param[topicID] string: 群id,必须为string类型
* @param[dismissUCGroupCB] func: 解散无限大群回调
* @param[context] : 用户自定义内容,通过回调函数原样传出
**/
user.dismissUnlimitedGroup(topicID, dismissUCGroupCB, context);
群主解散无限大群回调
/**
* @param[isSuccess] bool: 是否解散成功
* @param[topicId] string: 群id
* @param[context] : 用户自定义传入的内容
**/
function dismissUCGroupCB(isSuccess, topicId, context)
解散无限大群通知群成员回调
/**
* @param[topicId] string: 群id
**/
function ucDismiss(topicId)
发送无限大群消息
/**
* @param[topicID] string: 群id,必须为string类型
* @param[payload] string UTF-8: 用户自定义消息体
* @param[bizType] string: 消息类型,默认空字符串
* @param[isStore] bool: 是否存储历史消息,默认false
# @return string: 由客户端生成的消息ID
**/
user.sendUnlimitedGroupMessage(topicID, payload, isStore = false);
user.sendUnlimitedGroupMessage(topicID, payload, bizType, isStore = false);
接收无限大群消息回调
/**
* @param[groupMsg] object: 接收到的P2T消息体
**/
function ucMessage(groupMsg)
groupMsg.getPacketId(); // 客户端生成的消息ID
groupMsg.getSequence(); // 由服务器生成,用于去重排序(升序)
groupMsg.getFromAccount(); // 消息发送者在APP账号系统的账号ID
groupMsg.getFromResource(); // 消息发送者resource
groupMsg.getTopicId(); // 群ID
groupMsg.getTimeStamp(); // 消息发送时间戳
groupMsg.getPayload(); // payload为用户自定义消息,UTF-8 string类型
连接断开回调
function disconnect() {
}
注销
user.logout();
回到顶部