2015-11-04 57 views
1

我們正在使用最新的Jars/SDK讀取/傳遞狀態和Web服務,以在所有平臺Android/iOS/Web上發送消息。 我將郵件作爲SetMarkable(True)發送,但雙方收到的郵件都是falseQuickblox:未收到讀取狀態

如果我重新加載來自Quickblox服務器的所有消息,那麼我可以看到所有消息都具有根據需求的Read/Delivery 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,儘管readIddeliverId工作正常。

對於私人發佈的數據:

 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」 兩種,不同的是在參數。 此外,在舊罐子裏,我們有processMessageDeliveredprocessmessageRead,但在新罐子裏,我們嘗試申請新的課程,即消息StatusListener,但它也不起作用。帶有新罐子的演示不包含與消息狀態相對應的任何信息。消息狀態只在收到消息傳遞狀態而沒有消息讀取的舊罐子中工作,因爲每次標記值都爲「0」或false。

UPDATE:我們需要在回調中可標記屬性,例如,對於下面的代碼工作: 在安卓

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

    } 

回答

0

QuickBlox使用可標記= 1僅在實時消息通知其他用戶發件人希望收到他發送的郵件的狀態。

來自REST API的消息中沒有字段可標記

如果你使用讀和應用程序交付的狀態,那麼你可以只檢查readIdsdeliverIds領域,如果在數組沒有你的ID,然後只需發送讀取或交付狀態。

UPD

我通過投

這裏測試它是我的要求 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 

收到正如你所看到的可標記= true

+0

我正在使用** readIds **和** deliverIds **顯示讀取狀態,但我們需要檢查QuickBlox中使用的回調的可標記屬性。即** processMessageDelivered **,這是無法標記屬性的情況下完成的。請檢查以上問題中的更新以瞭解以下函數需要標記的代碼示例:** privateChat.readMessage(message.getId()。toString()); ** –

+0

如果將markable設置爲1,則它將在內部爲true '而processMessage'。你說這不起作用? –

+0

** processMessage **即使我們將值設置爲true,可標記值也會返回爲false。 –

相關問題