簡體   English   中英

Quickblox android 消息讀取/傳遞狀態問題 (Quickblox SDK 2.3.1)

[英]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)。

我已完成以下操作以使其正常工作。 但仍然沒有工作。 請幫忙。

  1. chatMessage.setMarkable(true);
  2. 當用戶閱讀(在接收端)消息時,發送閱讀狀態 QBPrivateChat.readMessage(chatMessage);
  3. 仍然沒有在發送方調用偵聽器。 :(

更新:如果我從 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")
        }
    })

https://docs.quickblox.com/docs/android-chat-messaging

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM