【问题标题】:Quickblox: Read status not receivedQuickblox:未收到读取状态
【发布时间】: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 中,我们有 processMessageDeliveredprocessmessageRead,但在新 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();
            }
        }

    }

【问题讨论】:

    标签: json quickblox


    【解决方案1】:

    QuickBlox 仅在实时消息中使用 ma​​rkable=1 来通知其他用户发件人希望接收有关他发送的消息的状态。

    来自 REST API 的消息中没有名为 ma​​rkable 的字段。

    如果您在应用程序中使用读取和交付状态,则只需检查 readIdsdeliverIds 字段,如果数组中没有您的 ID,则只需发送读取或交付状态。

    UPD

    我通过 hurl 测试过

    这是我的请求 http://hurl.quickblox.com/hurls/8c003dc3d6600c1c45e646f85e66e83d1d12dc5b/a6c1ba9a6ecc60de38525124639ae8828036f43c

    这是我在 Android 上收到的内容

    11-24 08:50:59.417 13621-14361/com.sdk.snippets I/Snippet: received 
    message: QBChatMessage{id=56548243a0eb474de5000041, sender_id=5179221,
     recipient_id=5179218, body=blablabla, properties=
    {dialog_id=55ed5c7e05244fbde8c45e83,   message_id=56548243a0eb474de5000041,
     save_to_history=1, date_sent=1448378947}, attachments=[],
     dialogId=55ed5c7e05244fbde8c45e83, dateSent=1448378947, markable=true,
     readIds=null, deliveredIds=null} from user: 5179221, dialogId:
     55ed5c7e05244fbde8c45e83
    

    你可以在这里看到 markable=true

    【讨论】:

    • 我正在使用 readIdsdeliverIds 来显示读取状态,但我们需要检查 QuickBlox 中使用的回调的可标记属性。即对于 processMessageDelivered ,没有可标记属性就无法完成。请检查上述问题中的更新以获取以下函数需要可标记的代码示例:privateChat.readMessage(message.getId().toString());
    • 如果你将 markable 设置为 1,那么它在 'processMessage' 中将是真的。你说它不起作用?
    • processMessage 可标记的值返回为 false,即使我们将值设置为 true。
    • 你检查了吗?这是一个错误吗?
    • 我们之前已经说过了。响应确实显示 markable true,但是当我们检索聊天消息时, time markable 值为 false。当我们将 markable 设置为 true 时,它​​显示为 true,但当我们获取聊天消息时,它返回 false。此外,在 ProcessMessage 回调中,我们将其接收为 false,尽管我们将其设置为 1
    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多