[英]Quickblox android message read/delivery status issue (Quickblox SDK 2.3.1)
最近我將 Quickblox Android SDK 從 2.3 升級到 2.3.1。 升級后,消息讀取/傳遞狀態在我的應用程序中不起作用。 請有人幫助我。 它在我的舊版本中工作正常:(。經過大量調試后,我發現消息狀態更新沒有出現在 SDK 提供的任何方法中,即 processMessageDelivered(String messageId, String dialogId, Integer userId) 和 processMessageRead (字符串 messageId、字符串 dialogId、Integer 用戶 ID)。
我已完成以下操作以使其正常工作。 但仍然沒有工作。 請幫忙。
更新:如果我從 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);
}
}
}
val messageStatusesManager = QBChatService.getInstance().messageStatusesManager
messageStatusesManager.addMessageStatusListener(object : QBMessageStatusListener {
override fun processMessageDelivered(messageId: String?, dialogId: String?, userId: Int?) {
Log.d(TAG, "processMessageRead: Message READ : message ID $messageId")
}
override fun processMessageRead(messageId: String?, dialogId: String?, userId: Int?) {
Log.d(TAG, "processMessageRead: Message READ : message ID $messageId")
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.