Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Quickblox中iOS和Android之间连接聊天的消息id问题_Android_Ios_Quickblox - Fatal编程技术网

Quickblox中iOS和Android之间连接聊天的消息id问题

Quickblox中iOS和Android之间连接聊天的消息id问题,android,ios,quickblox,Android,Ios,Quickblox,我在将iOS和Android设备与其对应的QBChat库(带有消息ID)连接时遇到问题 Quickblox的iOS库中的消息对象被定义为QBChatMessage对象,这在Quickblox的Android库中是不存在的(后者将它们委托给SMACK库中的消息类) 问题是QBChatMessage类将消息id作为整数管理,而message类将它们作为字符串管理。从我的Android设备发送的每条消息都有一个7个字符的唯一字符串+一个数字,带有消息在SMACK chat中的位置。当我的iPhone接

我在将iOS和Android设备与其对应的QBChat库(带有消息ID)连接时遇到问题

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

问题是QBChatMessage类将消息id作为整数管理,而message类将它们作为字符串管理。从我的Android设备发送的每条消息都有一个7个字符的唯一字符串+一个数字,带有消息在SMACK chat中的位置。当我的iPhone接收到消息时,它的ID是一个数字,并且尽可能多地解析了SMACK的ID,就像这个通信示例(取自Android设备):

SENT{“content”:{“text”:“hello”},键入:1}7J9230
发送{“内容”:{“文本”:“耶”},“类型”:1}7J9230
已发送{“内容”:{“文本”:“测试”},“类型”:1}7J9230
RCV{“content”:{“text”:“hello”},“type”:1}
RCV{“内容”:{“文本”:“是吗?”},“类型”:1}
RCV{“内容”:{“文本”:“耶!”},“类型”:1}
消息的ID对我来说很重要,以数据库存储的顺序排列。这怎么可能?我应该如何解决这个问题

谢谢,亲切的问候!:)

丹尼尔,听起来不错。 将QBChatMessages.ID的类型更改为NSString是否可以解决您的问题


将在下一个版本中执行此操作。如果你没有时间等待,只需写下你的请求就可以了assist@quickblox.com,将为您专门构建SDK

下面是我的群组聊天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:null


你能告诉我为什么ID是空的吗?我是不是遗漏了什么?

非常感谢!在我看来,将iOS中的id更改为NSString将是最简单也是最好的解决方案。然而,我自己解决了这个问题,在Android中自己管理ID,并使用SMACK的Message类进行通信,而不是使用String进行通信。
    /* 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());
             }
        });
     }