Cách xác định trạng thái tin nhắn (đọc/chưa đọc). Trò chuyện được thực hiện với giao thức XMPP.Làm cách nào để xác định trạng thái tin nhắn (đọc/chưa đọc) trong trò chuyện?
Trả lời
XEP-0184: Biên lai gửi thư hỗ trợ thông báo cho người gửi khi thư của họ được gửi. Bạn có thể sử dụng nó như một khối xây dựng, miễn là bạn không mong đợi các khách hàng hiện tại gửi các biên nhận này - XEP không được triển khai rộng rãi hiện nay.
Tôi đã thực hiện tính năng này và làm việc thành công. Tôi đang bối rối làm thế nào để quyết định tin nhắn được gửi hoặc đọc? Vì không có bất kỳ điều khoản nào để lưu trữ trạng thái gửi thư. Bạn có thể gợi ý cho tôi những gì tôi cần phải làm? –
Rất khó để biết một thư đã thực sự được đọc chưa. Đây là một trong những lý do chính khiến khách hàng hiện tại không triển khai XEP. Tôi sẽ nói rằng có thể cho biết nếu tin nhắn đã được hiển thị là về tốt nhất bạn có thể làm. Nếu ứng dụng khách ở trên cùng trong khi tab có thông báo là tab đang được hiển thị và thông báo nằm bên trong cửa sổ cuộn trong khi ở trạng thái đó, nó có thể được hiển thị. –
Tôi nghĩ rằng bạn cần phải sử dụng trưng bày trò chuyện Marker, mỗi http://xmpp.org/extensions/xep-0333.html
XMPP không có một đọc/nhận chưa đọc. Trong khi nhận được là một cái gì đó đã được thực hiện trong XEP-0184.
Nếu bạn muốn nhận biên nhận đã đọc, thay vì gửi biên lai gửi tin nhắn tự động, hãy gửi nó bất cứ khi nào người dùng đọc tin nhắn đó. Mỗi tin nhắn có message_id tương ứng. Sử dụng message_id đó để gửi biên nhận giao hàng cho thư cụ thể đã được đọc. Thêm mã sau đây trong khi thực hiện kết nối
//message delivery
XMPPMessageDeliveryReceipts* xmppMessageDeliveryRecipts = [[XMPPMessageDeliveryReceipts alloc] initWithDispatchQueue:dispatch_get_main_queue()];
//don't write this line as it will send auto receipts whenever message will be delivered
//xmppMessageDeliveryRecipts.autoSendMessageDeliveryReceipts = YES;
xmppMessageDeliveryRecipts.autoSendMessageDeliveryRequests = YES;
[xmppMessageDeliveryRecipts activate:self.xmppStream];
Tôi giải quyết vấn đề này bằng cách thêm thuộc tính 'chatStatus' vào thực thể thư của tôi. Đối với người gửi, tôi đã giữ giá trị của chatStatus như đã gửi, chưa gửi hoặc đã nhận (đã nhận được từ phía bên kia hay không). Đối với Bên nhận Tôi đã giữ các Giá trị là đã đọc hoặc chưa đọc (Tôi có đọc tin nhắn hay không, Vì vậy, đối với tin nhắn chưa đọc, tôi có thể gửi Biên nhận đã đọc).
On Click của nút Gửi:
//Save to your Message Entity
NSMutableDictionary *m = [[NSMutableDictionary alloc] init];
[m setObject: message_body forKey:@"message_body"];
[m setObject:messageID forKey:@"message_id"];
[m setObject:@"yes" forKey:@"isOutgoing"];
[m setObject:dateString forKey:@"date"];
[m setObject:timeString forKey:@"time"];
[m setObject:[NSDate date] forKey:@"timeStamp"];
[m setObject:yourId forKey:@"from"];
[m setObject:toId forKey:@"to"];
if (!Is_InternetAvailable]) {
[m setObject:unsent forKey:@"chatStatus"];
}
else{
[m setObject:sent forKey:@"chatStatus"];
}
[[CoreDataMethods sharedCoreDataMethods] saveUserMessage:m];
}
Trong cellForRowAtIndexPath:
if ([message isoutGoing]) {//If I have sent the message
// Mine bubble
if ([[messageDict valueForKey:@"chatStatus"] isEqualToString:unsent]) {
//set unsent image
}
else if ([[messageDict valueForKey:@"chatStatus"] isEqualToString:sent]){
//set sent image
}
else if ([[messageDict valueForKey:@"chatStatus"] isEqualToString:received]){
//set Received Image
}
}
else{
// Other Bubble , Notify them that you have read the message if it is unread/new message
if ([[messageDict valueForKey:@"chatStatus"] isEqualToString:unread]) {
//send read receipt
NSXMLElement *receivedelement = [NSXMLElement elementWithName:@"received" xmlns:@"urn:xmpp:receipts"];
NSXMLElement *message = [NSXMLElement elementWithName:@"message" xmlns:@"jabber:client"];
[message addAttributeWithName:@"to" stringValue:toId];
[message addAttributeWithName:@"from" stringValue:fromID];
[receivedelement addAttributeWithName:@"id" stringValue:[messageDict valueForKey:@"message_id"]];
[message addChild:receivedelement];
//XMPPMessage *generatedReceiptResponse = [[messageDict valueForKey:@"xmppMessage"] generateReceiptResponse];
[[[kAppDelegate xmppHandler] xmppStream] sendElement:message];
// update message entity
[self updateChatStatus:read withMessageID:[messageDict valueForKey:@"message_id"]];
}
}
Và cuối cùng khi bạn nhận được hóa đơn giao hàng trong didReceiveMessage, cập nhật chatStatus để nhận
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{
if ([message hasReceiptResponse]) {//message read
//Update database message entity
[self updateChatStatus:@"received" withMessageID:[message receiptResponseID]];
}
}
Bạn có thể thiết lập các giá trị của chatStatus theo yêu cầu của bạn. Đối với các tin nhắn chưa gửi, tôi đã thiết lập nó như được gửi trong delegate didSendMessage.
Lưu ý: Trong ứng dụng của tôi, tôi phải chỉ hiển thị trạng thái đã đọc, đã gửi và không được đặt, chứ không phải trạng thái đã gửi. Nếu bạn cũng muốn hiển thị trạng thái phân phối, thì đừng bình luận autoSendMessageDeliveryReceipts và bất cứ khi nào tin nhắn được đọc, hãy gửi thông báo IQ đến người gửi thay vì nhận giao hàng và thay đổi chatStatus tương ứng.
Đây chỉ là ý tưởng cơ bản, bạn có thể sử dụng nó theo yêu cầu của bạn.
Hy vọng nó sẽ giúp ích !!
- 1. Làm cách nào để gửi tin nhắn trong cuộc trò chuyện nhóm trong Skype với Skype4COM?
- 2. Trò chuyện Firebase - xóa các tin nhắn cũ
- 3. Làm cách nào để đọc thông tin trạng thái phiên trong web.config
- 4. Làm cách nào để lưu trữ các tin nhắn trò chuyện trong thời gian thực trong cơ sở dữ liệu?
- 5. MongoDB/NOSQL: Cách tiếp cận tốt nhất để xử lý trạng thái đọc/chưa đọc trên tin nhắn
- 6. Làm cách nào để xác định trạng thái chính xác của BufferedReader?
- 7. Kiểm tra trạng thái của tin nhắn GCM
- 8. Thiết kế cơ sở dữ liệu để lưu trữ Tin nhắn trò chuyện giữa mọi người
- 9. Cách đọc tin nhắn USSD trong Android?
- 10. Trò chuyện hoạt động như thế nào?
- 11. Làm cách nào để tạo Mẫu Tin nhắn Cam kết SVN và Móc để Xác minh
- 12. Có cách nào để xác định xem một gói có trạng thái trong Oracle không?
- 13. Ai xác định chuyển tiếp trạng thái trong mẫu trạng thái?
- 14. Truy vấn hệ thống nhắn tin để nhận tin nhắn cuối cùng, số lượng tin nhắn chưa đọc và mảng người dùng trong cuộc hội thoại
- 15. Kỹ thuật tốt để xử lý thay đổi trạng thái và trạng thái trong phát triển trò chơi là gì?
- 16. Làm cách nào để đặt trạng thái Jabber bằng python-xmpp?
- 17. Dịch vụ trò chuyện Android
- 18. Làm cách nào để xác định nguồn tin nhắn tùy chỉnh cho luồng web mùa xuân?
- 19. Xác định trạng thái kích hoạt trạng thái thạch anh bị tạm dừng?
- 20. Gửi tin nhắn trò chuyện từ kịch bản ứng dụng google
- 21. Xác định đoạn backstack trạng thái trống rỗng trong android
- 22. Trò chuyện trong thời gian thực với thông báo đẩy
- 23. Cách đọc tin nhắn sms trên iOS?
- 24. Xác thực đa trạng thái trong Rails
- 25. Đọc tin nhắn SMS trong iOS
- 26. Làm cách nào để thêm trạng thái tệp git vào trạng thái của vim?
- 27. Làm cách nào để bảo toàn trạng thái đóng JavaScript?
- 28. Đọc Tin nhắn Protobuf trong C#
- 29. Cập nhật trạng thái facebook bằng tin nhắn từ biến Javascript
- 30. đọc tin nhắn sms iphone?
Bạn đã thành công trong vấn đề này chưa? Tôi tò mò về việc làm thế nào để làm điều đó –
Tôi cũng tò mò về cách làm điều đó ... – Sirius
Nếu có ai thành công trong việc này hãy chia sẻ một số thông tin @danipralea – juned