2013-04-22 47 views
0

我在使用消息ID连接iOS和Android设备及其相应的QBChat库时遇到问题。在Quickblox中iOS和Android之间连接聊天的消息ID问题

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

问题是,QBChatMessage类管理消息ID的整数,而消息类管理他们作为字符串。从我的Android设备发送的每条消息都有一个7个字符的唯一字符串+一个包含消息在SMACK聊天中的位置的数字。当我的iPhone收到消息,它的ID是从咂了ID的数量分析为多,因为它可以,因为这种沟通样品(从Android设备拍摄)中:

SENT <message id="D64u5-4" to="[email protected]" from="[email protected]/Smack" type="chat"><body>{"content":{"text":"hello"},"type":1}</body><thread>7J9230</thread></message> 
SENT <message id="D64u5-5" to="[email protected]" from="[email protected]/Smack" type="chat"><body>{"content":{"text":"yeah"},"type":1}</body><thread>7J9230</thread></message> 
SENT <message id="D64u5-6" to="[email protected]" from="[email protected]/Smack" type="chat"><body>{"content":{"text":"test"},"type":1}</body><thread>7J9230</thread></message> 

RCV <message id="0" from="[email protected]" type="chat" xmlns="jabber:client" to="[email protected]"><body>{"content":{"text":"hello"},"type":1}</body></message> 
RCV <message id="1" from="[email protected]" type="chat" xmlns="jabber:client" to="[email protected]"><body>{"content":{"text":"yeah?"},"type":1}</body></message> 
RCV <message id="2" from="[email protected]" type="chat" xmlns="jabber:client" to="[email protected]"><body>{"content":{"text":"yeah!"},"type":1}</body></message> 

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

谢谢,亲切的问候! :)

回答

0

丹尼尔,听起来不错。 正在改变QBChatMessages.ID到NSString的类型将解决您的问题?

在下一个版本中会这样做。如果你没有时间去等待 - 只要你的要求[email protected]写,会使SDK特别为您构建

+0

非常感谢!在我看来,将iOS中的id改为NSString将是最简单和最好的解决方案。然而,我自己通过在Android中管理自己的id并使用SMACK的Message类进行通信来设法解决这个问题,而不是使用String进行通信。 – dinoenri 2013-04-23 09:50:46

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()); 
      } 
     }); 
    } 

的输出I在logcat中看到的是

包ID:空 消息ID:空

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