ZIM 升级指南
本文介绍 ZIM Android 平台 SDK 版本升级时的一些说明和注意事项。
2.19.0 升级指南
从 2.19.0 版本开始,以下接口有重大变更,因此在从旧版本升级到 2.19.0 版本时,请您阅读以下指南。
downloadMediaFile 及相关回调
废弃原接口 downloadMediaFile
,请使用同名 downloadMediaFile 代替。新版本的 downloadMediaFile 新增了 config
参数,新增了 config
参数,可用于指定下载组合消息中的单个媒体内容。
ZIMMediaDownloadedCallback 回调做出如下变更以适应组合消息使用,开发者需要根据 IDE 的编译错误提示修正调用:
- onMediaDownloaded 的参数
message
类型从ZIMMediaMessage
变更为ZIMMessage
。 - onMediaDownloadingProgress 的参数
message
类型从ZIMMediaMessage
变更为ZIMMessage
。
// 假设 multipleMessage.messageInfoList[0] 是文本消息,multipleMessage.messageInfoList[1] 是图片消息
ZIMMultipleMessage multipleMessage = (ZIMMultipleMessage) message;
ZIMMediaDownloadConfig config = new ZIMMediaDownloadConfig();
// 指定下载图片消息
config.messageInfoIndex = 1;
zim.getInstance().downloadMediaFile(multipleMessage, ZIMMediaFileType.ORIGINAL_FILE, config, new ZIMMediaDownloadedCallback() {
@Override
public void onMediaDownloadingProgress(ZIMMessage message, long currentFileSize, long totalFileSize) {
// 下载进度
// 开发者需要判断 message 的类型并转换成对应类型的消息
if (message instanceof ZIMMultipleMessage) {
ZIMMultipleMessage multipleMessage = (ZIMMultipleMessage) message;
// 处理组合消息
}
// 其他类型消息的处理
......
}
@Override
public void onMediaDownloaded(ZIMMessage message, ZIMError errorInfo) {
// 下载完成
// 开发者需要判断 message 的类型并转换成对应类型的消息
if (message instanceof ZIMMultipleMessage) {
ZIMMultipleMessage multipleMessage = (ZIMMultipleMessage) message;
// 处理组合消息
}
// 其他类型消息的处理
......
}
});
ZIMImageMessage imageMessage = (ZIMImageMessage) message;
ZIMMediaDownloadConfig config = new ZIMMediaDownloadConfig();
zim.getInstance().downloadMediaFile(imageMessage, ZIMMediaFileType.ORIGINAL_FILE, config, new ZIMMediaDownloadedCallback() {
@Override
public void onMediaDownloadingProgress(ZIMMessage message, long currentFileSize, long totalFileSize) {
// 下载进度
// 开发者需要判断 message 的类型并转换成对应类型的消息
if (message instanceof ZIMImageMessage) {
ZIMImageMessage imageMessage = (ZIMImageMessage) message;
// 处理图片消息
}
// 其他类型消息的处理
......
}
@Override
public void onMediaDownloaded(ZIMMessage message, ZIMError errorInfo) {
// 下载完成
// 开发者需要判断 message 的类型并转换成对应类型的消息
if (message instanceof ZIMImageMessage) {
ZIMImageMessage imageMessage = (ZIMImageMessage) message;
// 处理图片消息
}
// 其他类型消息的处理
......
}
});
ZIMImageMessage imageMessage = (ZIMImageMessage) message;
zim.getInstance().downloadMediaFile(imageMessage, ZIMMediaFileType.ORIGINAL_FILE, new ZIMMediaDownloadedCallback() {
@Override
public void onMediaDownloadingProgress(ZIMMediaMessage message, long currentFileSize, long totalFileSize) {
// 下载进度
}
@Override
public void onMediaDownloaded(ZIMMediaMessage message, ZIMError errorInfo) {
// 下载完成
}
});
sendMessage
废弃 sendMediaMessage
和旧的 sendMessage
方法,新增支持发送任意消息类型的 sendMessage 方法。
sendMessage 的回调与旧同名接口的回调不同,从 ZIMMediaMessageSentCallback
变更为 ZIMMessageSentFullCallback。
ZIMMessageSentFullCallback 中的 onMediaUploadingProgress 参数 message
类型由 ZIMMessage
变更为 ZIMMediaMessage
,以确保仅媒体消息会被回调通知,开发者需要根据 IDE 的编译错误提示修正调用。(目前仅使用了 replyMessage 接口的开发者会受到需要解决编译报错的影响)
ZIMImageMessage imageMessage = (ZIMImageMessage) message;
zim.getInstance().sendMessage(imageMessage, "TO_CONVERSATION_ID", ZIMConversationType.PEER, new ZIMMessageSentFullCallback() {
@Override
public void onMessageSent(ZIMMessage message, ZIMError errorInfo) {
// 消息发送结果
}
@Override
public void onMediaUploadingProgress(ZIMMediaMessage message, long currentFileSize, long totalFileSize) {
// 多媒体上传进度
}
@Override
public void onMessageAttached(ZIMMessage message) {
// 开发者可以监听这个回调执行消息发送前的业务逻辑
}
});
ZIMImageMessage imageMessage = (ZIMImageMessage) message;
zim.getInstance().sendMediaMessage(imageMessage, "TO_CONVERSATION_ID", ZIMConversationType.PEER, new ZIMMediaMessageSentCallback() {
@Override
public void onMessageSent(ZIMMediaMessage message, ZIMError errorInfo) {
// 消息发送结果
}
@Override
public void onMediaUploadingProgress(ZIMMediaMessage message, long currentFileSize, long totalFileSize) {
// 多媒体上传进度
}
@Override
public void onMessageAttached(ZIMMediaMessage message) {
// 开发者可以监听这个回调执行消息发送前的业务逻辑
}
});
sendMediaMessage
2.18.0 升级指南
从 2.18.0 版本开始,以下接口有重大变更,因此在从旧版本升级到 2.18.0 版本时,请您阅读以下指南。
单聊消息接收回调
原单聊消息接收回调 onReceivePeerMessage
已被废弃,请使用 onPeerMessageReceived 代替。
新回调支持以下功能:
- 用户在线时,可通过此回调接收在线单聊消息。
- 用户重新登录 ZIM SDK 后,可以通过此回调接收离线期间(最长7天)收到的所有单聊消息。
//新接口
public void onPeerMessageReceived(ZIM zim, ArrayList<ZIMMessage> messageList,
ZIMMessageReceivedInfo info, String fromUserID) {}
//老接口
public void onReceivePeerMessage(ZIM zim, ArrayList<ZIMMessage> messageList,
String fromUserID) {}
房间消息接收回调
原房间消息接收回调 onReceiveRoomMessage
已被废弃,请使用 onRoomMessageReceived 代替。
新回调支持以下功能:
- 用户在线时,可通过此回调接收在线房间消息。
- 用户从离线恢复到在线后,若仍在房间中,即可通过此回调接收离线期间内的所有房间消息。
//新接口
public void onRoomMessageReceived(ZIM zim, ArrayList<ZIMMessage> messageList,
ZIMMessageReceivedInfo info, String fromRoomID) {}
//老接口
public void onReceiveRoomMessage(ZIM zim, ArrayList<ZIMMessage> messageList,
String fromRoomID) {}
群组消息接收回调
原群组消息接收回调 onReceiveGroupMessage
已被废弃,请使用 onGroupMessageReceived 代替。
新回调支持以下功能:
- 用户在线时,可通过此回调接收在线群组消息。
- 用户重新登录 ZIM SDK 后,可以通过通过此回调接收离线期间(最长7天)收到的所有群聊消息。
//新接口
public void onGroupMessageReceived(ZIM zim, ArrayList<ZIMMessage> messageList,
ZIMMessageReceivedInfo info, String fromGroupID) {}
//老接口
public void onReceiveGroupMessage(ZIM zim, ArrayList<ZIMMessage> messageList,
String fromGroupID) {}
2.16.0 升级指南
从 2.16.0 版本开始,以下接口有重大变更,因此在从旧版本升级到 2.16.0 版本时,请您阅读以下指南。
callCancel
以下变更仅对进阶模式呼叫邀请而言。
在新版本的 callCancel 中,如果参数 userIDs 包含一个 userID,则该接口将仅取消邀请该被叫用户。如果 userIDs 参数为空,则该接口将对所有被叫用户取消邀请。
而对于旧版本的 callCancel
接口,无论参数 userIDs 是否为空,均视为对所有被叫用户取消邀请。
由于旧版 ZIM SDK 不兼容单独取消逻辑,因此如果您既需要保留使用老版本 ZIM 实现的取消逻辑,又需要使用新版本的单独取消功能,请隔离新老版本 ZIM 之间的呼叫功能。
// 单独取消 userIdA 、userIdB
List<String> invitees = new ArrayList<>();
invitees.add("userIdA");
invitees.add("userIdB");
ZIMCallCancelConfig cancelConfig = new ZIMCallCancelConfig();
ZIM.getInstance().callCancel(invitees, "callID", cancelConfig, new ZIMCallCancelSentCallback() {
@Override
public void onCallCancelSent(String callID, ArrayList<String> errorInvitees, ZIMError errorInfo) {
}
});;
// 取消整个呼叫邀请,当整个呼叫中所有被叫都未接受时可以调用成功
List<String> invitees = new ArrayList<>();
ZIMCallCancelConfig cancelConfig = new ZIMCallCancelConfig();
ZIM.getInstance().callCancel(invitees, "callID", cancelConfig, new ZIMCallCancelSentCallback() {
@Override
public void onCallCancelSent(String callID, ArrayList<String> errorInvitees, ZIMError errorInfo) {
}
});
// 无论 userIDs 中是否传递 userID,均为取消整个呼叫,当整个呼叫中所有被叫都未接受时可以调用成功
List<String> invitees = new ArrayList<>();
invitees.add("userIdA");
invitees.add("userIdB");
ZIMCallCancelConfig cancelConfig = new ZIMCallCancelConfig();
ZIM.getInstance().callCancel(invitees, "callID", cancelConfig, new ZIMCallCancelSentCallback() {
@Override
public void onCallCancelSent(String callID, ArrayList<String> errorInvitees, ZIMError errorInfo) {
}
});;
// 取消整个呼叫邀请,当整个呼叫中所有被叫都未接受时可以调用成功
List<String> invitees = new ArrayList<>();
ZIMCallCancelConfig cancelConfig = new ZIMCallCancelConfig();
ZIM.getInstance().callCancel(invitees, "callID", cancelConfig, new ZIMCallCancelSentCallback() {
@Override
public void onCallCancelSent(String callID, ArrayList<String> errorInvitees, ZIMError errorInfo) {
}
});