鸿蒙开发融云IMKit初始化和登录
融云鸿蒙版是不带UI的,得自己一步步搭建。 下面说如何初始化和登录:
一、初始化:
/**
* @desc : 初始化融云
* @author : congge on 2024-07-12 15:47
**/
public static initRongIm() {
IMEngine.getInstance()
.init(getContext(), CommonConstants.RONG_IM_KEY, new InitOption())
// 注册自定义消息
let clazzList: List<MessageContentConstructor> = new List()
clazzList.add(CustomizeReadReceiptMessage)
clazzList.add(CustomizeGiftMessage)
IMEngine.getInstance().registerMessageType(clazzList)
// 监听消息接收
IMEngine.getInstance().setMessageReceivedListener((message: Message, _info: ReceivedInfo) => {
logContent("receivedMessage",message)
if (message.content) {
if (message.objectName === HQVoiceMessageObjectName && message.direction === MessageDirection.Receive && !_info.isOffline) {
// isOffline为true,是卸载重装收到的消息不用管,正常刚收到的语音消息全部是未点击,它不可能一收到就点击了的
MMKVNoClearUtil.saveVoiceMessageReadStatus(message.targetId,message.messageId,false)
}
// 在这就不发已读回执了,避免两个鸿蒙一直在互发已读
// if (MMKVUtil.getCurrentChatTargetId(message.targetId) === message.targetId) {
// ImUtils.sendMyReadReceiptMessage(message.targetId,message.sentTime)
// } else if(MainPage.homeTabSelected === 3){
// ImUtils.sendMyReadReceiptMessage(message.targetId,message.sentTime)
// }
// 刷新首页未读数
EventKeys.postEvent(EventKeys.MsgRedEvents,MsgRedEvent())
// 刷新会话列表,不打算自己插入会话
EventKeys.postEvent(EventKeys.RefreshMsgListEvents)
}
// 接收到单聊消息,发送到聊天界面
if (message.conversationType === ConversationType.Private || message.targetId === ImType.KEFU_ID) {
EventKeys.postEvent(EventKeys.ReceivedImMessageEvents,ReceivedImMessageEvent(message))
}
});
}
二、登录:
public static connectIm() {
if (MMKVUtil.getImToken()) {
ImUtils.realConnect(MMKVUtil.getImToken());
} else {
//正常只有第一次进入应用会为""
ImViewModel.postImToken(false, (result) => {
ImUtils.realConnect(result.token)
})
}
}
private static realConnect(token?: string, isAgain: boolean = false) {
if (token) {
IMEngine.getInstance().setConnectionStatusListener((status: ConnectionStatus) => {
logContent('IM-App', 'setConnectionStatusListener onChanged status:' + status);
if (status === ConnectionStatus.DisconnectUserKicked) {
showToast($r('app.string.account_notice_tick'));
// 特别注意:对方登录,强迫退出
// Router.pushGuidePage(true)
}
});
// timeout ≦ 0,IM 将一直连接,直到连接成功或者发生无法连接的业务错误(如 token 非法)
IMEngine.getInstance().connect(token, 0).then(result => {
if (EngineError.Success === result.code) {
// 连接成功
MMKVUtil.saveTargetId(result.userId)
EventKeys.postEvent(EventKeys.MsgRedEvents,MsgRedEvent())
logContent("imStatus", "成功token: " + token)
logContent("imStatus", "成功targetId: " + result.userId)
//let userId = result.userId;
return;
}
if (EngineError.ConnectTokenExpired === result.code) {
// Token 过期,从 APP 服务请求新 token,获取到新 token 后重新 connect()
} else if (EngineError.ConnectionTimeout === result.code) {
// 连接超时,弹出提示,可以引导用户等待网络正常的时候再次点击进行连接
showToast($r('app.string.net_error'))
} else {
//其它业务错误码,请根据相应的错误码作出对应处理。
logContent("imStatus", result.code)
}
});
}
}
鸿蒙融云Demo源码结构图:
有问题或者需要完整源码demo的可以看简介联系我,也可以私信我,我每天都看私信的