我已经完成了XEP 0184并完成了以下实施。
如果连接了XMPP并且发送了数据包,那么我将每条消息的状态设置为SENT(✔︎),如果我没有得到以下回调。
-(void)xmppStream:(XMPPStream *)sender didReceiveError:(id)error
如果我从目标C中实现的XEP 0184获得收到的状态,我将状态设置为已发送(✔︎✔︎)
RECV:<消息xmlns =" jabber:client"从=" +122232322@wer.com/2323" 到=" +3343232322@wer.com/2223"郎="" ><收到 的xmlns ="瓮:XMPP协议:收据" id =" avv-33343" />< / message>
有人可以帮忙吗?如果我的方向是正确的,我错过了什么可以让我知道吗?
非常感谢代码段指南。
这是我的实施。
使用堆栈文档帮助我添加了以下行以获取送达回执。
XMPPMessageDeliveryReceipts* xmppMessageDeliveryReceipts = [[XMPPMessageDeliveryReceipts alloc] initWithDispatchQueue:dispatch_get_main_queue()];
xmppMessageDeliveryReceipts.autoSendMessageDeliveryReceipts = YES;
xmppMessageDeliveryReceipts.autoSendMessageDeliveryRequests = YES;
[xmppMessageDeliveryReceipts activate:self.xmppStream];
现在由于这个原因,我得到了send和RECV xml的以下响应。
发送:111111111,用于avv-33343 Id消息。 RECV:<消息xmlns =" jabber:client"从=" +122232322@wer.com/2323" 到=" +3343232322@wer.com/2223"郎="" ><收到 的xmlns ="瓮:XMPP协议:收据" id =" avv-33343" />< / message>
但这只是向我提供消息已发送的信息,但是如何发送上述SEEN收据以便让发件人知道另一个最终用户已经确认+看到该消息。
像这样...... RECV:<看过xmlns =" urn:xmpp:收据" id =" 222-4444" />
答案 0 :(得分:0)
对于看到状态使用相同的功能,如发送一条带有相同ID的正常消息,收到消息并且您希望在发件人设备上看到标记, 当发送方设备收到静态消息@" to @ fromSeen"具有相同的发送/传递消息的消息ID,当接收器在db中已存在msg id时,您的目的就会解决。
发送状态代码
NSString *bodymessageString = [NSString stringWithFormat:@"to@fromSeen"];
NSString *str_loginUser = [NSString stringWithFormat:@"%@@%@", [[NSUserDefaults standardUserDefaults]valueForKey:@"mobile"],kXMPPServer ];
NSString *str_OtherUser = [NSString stringWithFormat:@"%@@%@",str_OtherUserRegName,kXMPPServer];
NSXMLElement *body = [NSXMLElement elementWithName:@"body"];
[body setStringValue:bodymessageString];
NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];
[message addAttributeWithName:@"from" stringValue:str_loginUser];
// [[[delegate xmppStream] myJID] bare]
[message addAttributeWithName:@"to" stringValue:str_OtherUser];
// NSString *messageID= [XMPPStream generateUUID];
[message addAttributeWithName:@"id" stringValue:str_msgID];
// NSXMLElement *request = [NSXMLElement elementWithName:@"request" xmlns:@"urn:xmpp:receipts"];
// [message addChild:request];
[message addChild:body];
[[delegate xmppStream] sendElement:message];
[ChatData GetUpdateToDatabase:str_msgID :@"Seen"];
appdelegate文件中检查消息状态的代码
if ([message isChatMessageWithBody])
{
if ([msg isEqualToString:@"to@fromSeen"])
{
BOOL is_Exist;
is_Exist = [ChatData GetAllReadyAvailable :message.elementID];
if (is_Exist == YES)
{
NSString *str_status = [ChatData getstatusChatBy:message.elementID];
if (![str_status isEqualToString:@"Seen"])
{
[ChatData GetUpdateToDatabase:message.elementID :@"Seen"];
}
}
}
else
{
BOOL is_Exist;
is_Exist = [ChatData GetAllReadyAvailable :message.elementID];
if (is_Exist == NO)
{
// Store message in DB
}
}
}
else if ([message hasReceiptResponse])
{
}
else if([message isErrorMessage])
{}