0

我在使用消息 ID 将 iOS 和 Android 设备与其相应的 QBChat 库连接时遇到问题。

Quickblox 的 iOS 库中的消息对象被定义为 QBChatMessage 对象,这在 Quickblox 的 Android 库中不存在(它将它们委托给 SMACK 库中的 Message 类)。

问题是 QBChatMessage 类将消息 ID 管理为整数,而 Message 类将它们管理为字符串。从我的 Android 设备发送的每条消息都有一个 7 个字符的唯一字符串 + 一个数字,其中包含消息在 SMACK 聊天中的位置。当我的 iPhone 收到消息时,它的 ID 是一个数字,其中 SMACK 中的 ID 已尽可能多地解析,如以下通信示例(取自 Android 设备):

SENT <message id="D64u5-4" to="102521-1799@chat.quickblox.com" from="132505-1799@chat.quickblox.com/Smack" type="chat"><body>{"content":{"text":"hello"},"type":1}</body><thread>7J9230</thread></message>
SENT <message id="D64u5-5" to="102521-1799@chat.quickblox.com" from="132505-1799@chat.quickblox.com/Smack" type="chat"><body>{"content":{"text":"yeah"},"type":1}</body><thread>7J9230</thread></message>
SENT <message id="D64u5-6" to="102521-1799@chat.quickblox.com" from="132505-1799@chat.quickblox.com/Smack" type="chat"><body>{"content":{"text":"test"},"type":1}</body><thread>7J9230</thread></message>

RCV <message id="0" from="102521-1799@chat.quickblox.com" type="chat" xmlns="jabber:client" to="132505-1799@chat.quickblox.com"><body>{"content":{"text":"hello"},"type":1}</body></message>
RCV <message id="1" from="102521-1799@chat.quickblox.com" type="chat" xmlns="jabber:client" to="132505-1799@chat.quickblox.com"><body>{"content":{"text":"yeah?"},"type":1}</body></message>
RCV <message id="2" from="102521-1799@chat.quickblox.com" type="chat" xmlns="jabber:client" to="132505-1799@chat.quickblox.com"><body>{"content":{"text":"yeah!"},"type":1}</body></message>

按照数据库存储的顺序,消息的 ID 对我来说很重要。这怎么可能?我应该怎么做才能解决这个问题?

谢谢,亲切的问候!:)

4

2 回答 2

0

丹尼尔,听起来不错。将 QBChatMessages.ID 的类型更改为 NSString 会解决您的问题吗?

将在下一个版本中做到这一点。如果您没有时间等待 - 只需将您的请求写到assist@quickblox.com,将为您制作特殊的SDK

于 2013-04-22T19:11:02.890 回答
0

以下是我用于群聊的 Android 代码:

    /* Sends messages */
    public void sendChatMessage(String text)
    {
        Message message = muc.createMessage();
        message.setBody(text);
        message.setPacketID("ABC_1");
        muc.sendMessage(message);
    }

    /* Listens for messages */
    public void receiveMessage()
    {
      muc.addMessageListener(new PacketListener() {
                 public void processPacket(Packet packet) 
                 {
                   final Message message = (Message) packet;
                   log.i("packed  id: ", packet.getPacketID());
                   log.i("message id: ", message.getPacketID());
             }
        });
     }

我在 logcat 中看到的输出是

数据包ID:空消息ID:空

你能告诉我为什么ID是空的吗?我在这里错过了什么吗?

于 2013-06-26T21:42:15.023 回答