最近我将Quickblox Android SDK从2.3升级到2.3.1。升级后,消息读取/传递状态在我的应用程序中不起作用。请有人帮助我。它在我的旧版本中正常工作:(经过大量调试后,我发现消息状态更新没有在SDK提供的任何方法中进行,即processMessageDelivered(String messageId,String dialogId,Integer userId)和processMessageRead (String messageId,String dialogId,Integer userId)。
我做了以下工作以使其发挥作用。但仍然没有工作。请帮忙。
更新:如果我从Quickblox服务器重新加载所有消息,那么我可以看到所有消息都具有读/交付状态。问题在于听众,我无法实时处理状态。
请检查以下代码部分:
发送私信:
public void sendPrivateMessage(QBChatMessage chatMessage, int opponentId, String dialogId) throws QBResponseException {
chatMessage.setMarkable(true);
if (!TextUtils.isEmpty(dialogId)) {
chatMessage.setProperty(ChatUtils.PROPERTY_DIALOG_ID, dialogId);
}
chatMessage.setRecipientId(opponentId);
QBPrivateChat privateChat = privateChatManager.getChat(opponentId);
String error = null;
try {
if (privateChat == null) {
privateChat = createChatIfNotExist(opponentId);
}
privateChat.sendMessage(chatMessage);
} catch (XMPPException e) {
error = context.getString(R.string.dlg_fail_connection);
} catch (SmackException.NotConnectedException e) {
error = context.getString(R.string.dlg_fail_connection);
}
savePrivateMessageToCache(chatMessage, dialogId);
}
将读取状态更新为服务器的方法
public void updateStatusMessageReadServer(String dialogId,QBChatMessage chatMessage, boolean fromPrivate) throws Exception {
StringifyArrayList<String> messagesIdsList = new StringifyArrayList<String>();
messagesIdsList.add(chatMessage.getId());
QBChatService.markMessagesAsRead(dialogId, messagesIdsList);
if (fromPrivate) {
QBPrivateChat privateChat = privateChatManager.getChat(chatMessage.getSenderId());
privateChat.readMessage(chatMessage);
}
}
BaseChatHelper.java中的接收器部分:
protected PrivateChatMessageListener privateChatMessageListener;
public BaseChatHelper(Context context) {
super(context);
privateChatMessageListener = new PrivateChatMessageListener();
initPrivacyListsManager();
}
private class PrivateChatMessageListener implements
QBMessageListener<QBPrivateChat>, QBMessageStatusListener {
@Override
public void processMessage(QBPrivateChat privateChat,
final QBChatMessage chatMessage) {
if (ChatUtils.isNotificationMessage(chatMessage)) {
for (QBNotificationChatListener notificationChatListener : notificationChatListeners) {
notificationChatListener.onReceivedNotification(chatMessage
.getProperty(ChatUtils.PROPERTY_NOTIFICATION_TYPE)
.toString(), chatMessage);
}
} else {
onPrivateMessageReceived(privateChat, chatMessage);
}
}
@Override
public void processError(QBPrivateChat privateChat,
QBChatException error, QBChatMessage originMessage) {
// TODO: need to be implemented
}
@Override
public void processMessageDelivered(String messageId, String dialogId, Integer userId) {
updateMessageStatusDeliveredLocal(messageId, true);
}
@Override
public void processMessageRead(String messageId, String dialogId, Integer userId) {
try {
MessageCache messageCache = new MessageCache();
messageCache.setMessageId(messageId);
messageCache.setRead(true);
updateStatusMessageLocal(messageCache);
} catch (QBResponseException e) {
ErrorUtils.logError(e);
}
}
}