【发布时间】:2015-11-04 13:06:49
【问题描述】:
我们正在使用最新的 Jars/SDK 来读取/传递状态和网络服务,以便在所有平台 Android/iOS/Web 上发送消息。
我以SetMarkable(True) 发送消息,但双方都以false 接收。
如果我从 Quickblox 服务器重新加载所有消息,那么我可以看到所有消息都根据要求具有读取/传递 ID,但可标记属性为“0”/false。
以下是有关聊天工作原理的一些详细信息: 我们打开聊天屏幕并加载我们的旧聊天。我们可以根据产品与一个用户多次创建聊天,因此为了满足这一要求,我们将聊天设为私密的群组对话。发消息时,我们先发消息到群里,然后发到私聊。另请注意,我们使用的是自定义参数。
在安卓中
这是我们将信息发布到群组对话框的 json:
JSONObject jsonChild1 = new JSONObject();
//jsonChild1.put("id", id);
jsonChild1.put("chat_dialog_id", chat_dialog_id);
jsonChild1.put("message", message);
jsonChild1.put("send_to_chat", send_to_chat);
jsonChild1.put("markable", "1");
jsonChild1.put("product_id", productId);
Utility.showLog("Json String is", "" + jsonChild1.toString());...
这是我们用于将信息发布到组对话框中的 json,作为回报,我们会在我们的可标记值为 1 时得到响应。但是,当我们重新获取历史记录时,它的可标记值为 0,尽管 readId's 和 deliverId' s 工作正常。
用于私下发布数据:
JSONObject jsonChild1 = new JSONObject();
//jsonChild1.put("id", id);
jsonChild1.put("send_to_chat", send_to_chat);
jsonChild1.put("markable", "1");
jsonChild1.put("product_id", productId);
jsonChild1.put("grp_msg_dialog_id", chat_dialog_id);
jsonChild1.put("save_to_history", "1");
jsonChild1.put("recipient_id", otherUserChatId);
jsonChild1.put("message", message);
虽然 web 服务是相同的 - 两者都是“https://api.quickblox.com/chat/Message.json”,但区别在于参数。
此外,在旧 jar 中,我们有 processMessageDelivered 和 processmessageRead,但在新 jar 中,我们尝试应用新类,即 Message StatusListener,但它也不起作用。带有新 jar 的演示不包含任何与消息状态相对应的信息。消息状态在旧 jar 中工作,我只收到消息传递状态而不是消息读取...因为每次可标记值都是“0”或 false。
更新:我们需要回调中的 markable 属性,例如,以下代码可以工作: 在安卓中:
@Override
public void processMessage(QBPrivateChat chat, QBChatMessage message) {
if(message.isMarkable()){
try {
privateChat.readMessage(message.getId().toString());
} catch (XMPPException e) {
e.printStackTrace();
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}
}
}
【问题讨论】: