2

我正在使用 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]];
    }
4

1 回答 1

0

如果 TCP 连接未关闭,并且尽管您已向用户声明脱机,则始终提及最后一次看到并返回为零。

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

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

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

我已经停止了为我的 Apple App 启用的后台模式,所以现在这对我来说很好。

任何更多的建议都受到热烈欢迎。

于 2016-02-02T12:34:04.247 回答