Quickblox android消息读取/传递状态问题(Quickblox SDK 2.3.1)

时间:2015-09-27 07:54:24

标签: android chat quickblox

最近我将Quickblox Android SDK从2.3升级到2.3.1。升级后,消息读取/传递状态在我的应用程序中不起作用。请有人帮助我。它在我的旧版本中正常工作:(经过大量调试后,我发现消息状态更新没有在SDK提供的任何方法中进行,即processMessageDelivered(String messageId,String dialogId,Integer userId)和processMessageRead (String messageId,String dialogId,Integer userId)。

我做了以下工作以使其发挥作用。但仍然没有工作。请帮忙。

  1. chatMessage.setMarkable(真);
  2. 当用户读取(在接收方端)一条消息,然后发送一个读取状态QBPrivateChat.readMessage(chatMessage);
  3. 仍然没有在发送方调用侦听器。 :(
  4. 更新:如果我从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);
                }
            }
        }
    

0 个答案:

没有答案