XMPP Last Seen 总是 return '0' 秒,即使很久以前用户离线也是如此

XMPP Last Seen always return '0' seconds even when user offline long while ago

我正在使用 XMPP RobbieHanson 框架,目前我在 didReceivePresence 函数中使用以下代码启用了自动订阅。

    if([[presence type] isEqualToString:@"subscribe"])
    {
        NSLog(@"presence user wants to subscribe %@",[presence fromStr]);

        [[self xmppRoster] acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES];
    }
    else if([[presence type] isEqualToString:@"unsubscribe"])
    {
        [xmppRoster rejectPresenceSubscriptionRequestFrom:[presence from]];
        [xmppRoster revokePresencePermissionFromUser:[presence from]];
    }

对于某些用户,我仍然看到最后一次显示为“0”秒或 403 禁止。但有时我确实得到他们离线或在线,enter code here 这意味着我已经接受了状态订阅。

    if([[presence type] isEqualToString:@"subscribe"])
    {
        NSLog(@"presence user wants to subscribe %@",[presence fromStr]);

        [[self xmppRoster] acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES];
    }
    else if([[presence type] isEqualToString:@"unsubscribe"])
    {
        [xmppRoster rejectPresenceSubscriptionRequestFrom:[presence from]];
        [xmppRoster revokePresencePermissionFromUser:[presence from]];
    }

如果 TCP 连接未关闭,尽管您已向用户声明离线,但最后一次看到的信息始终会被提及并返回为零。

您需要通过在框架中显式调用 'xmppstream' 的断开连接来断开 TCP 套接字。

另请注意,运行 在后台并由于 XMPPReconnect 模块启用而重新连接的应用程序将显示最后一次看到然后服务器最后终止连接。但如果用户在后台模式下重新连接,他将显示为在线。

对于 403 Forbidden 状态,应该订阅用户,如果他离开系统或您正在删除并重新添加聊天服务器中的用户,则该人必须发送并接受订阅再次请求否则将抛出 403 错误。

我已经停止了为我的 Apple 应用程序启用的后台模式,所以现在这对我来说工作正常。

热烈欢迎任何更多建议。