【问题标题】:XMPP implementation of XEP-0198 in objective-CXEP-0198 在 Objective-C 中的 XMPP 实现
【发布时间】:2016-08-22 16:36:34
【问题描述】:

注意:服务器已安装并运行流管理。

这是我的代码:

XMPPStreamManagementMemoryStorage *storage1=[[XMPPStreamManagementMemoryStorage alloc] init];
xmppStreamManagement=[[XMPPStreamManagement alloc] initWithStorage:storage1];
xmppStreamManagement.autoResume = YES;
[xmppStreamManagement enableStreamManagementWithResumption:TRUE maxTimeout:5];
[xmppStreamManagement addDelegate:self delegateQueue:dispatch_get_main_queue()];
[xmppStreamManagement activate:xmppStream];
 [xmppStreamManagement requestAck];

我也实现了它的委托方法。 但是我既没有在委托方法中得到响应,也没有看到流管理工作。

它将如何工作以及我们如何验证它?

这里,如果我在iOS端成功实现流管理,那么丢失的离线消息会自动来

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message

任何帮助将不胜感激。

【问题讨论】:

    标签: ios objective-c xmpp openfire


    【解决方案1】:

    在您的 iOS 应用中启用XMPPStreamManagement 非常容易。

    使用XMPPStreamManagementMemoryStorage 初始化您的XMPPStreamManagement 实例。

    XMPPStreamManagementMemoryStorage *xmppSMMS = [[XMPPStreamManagementMemoryStorage alloc] init];
    xmppStreamManagement = [[XMPPStreamManagement alloc] initWithStorage:xmppSMMS];
    

    添加你的实现类作为它的委托

    [xmppStreamManagement addDelegate:self delegateQueue:dispatch_get_main_queue()];
    

    现在启用流管理,一旦XMPPStream 连接并发生绑定。

    [xmppStreamManagement activate:xmppStream];
    xmppStreamManagement.autoResume = YES;
    [xmppStreamManagement enableStreamManagementWithResumption:YES maxTimeout:0];
    [xmppStreamManagement requestAck];
    

    实现委托方法

    - (void)xmppStreamManagement:(XMPPStreamManagement *)sender wasEnabled:(NSXMLElement *)enabled{
    }
    
    - (void)xmppStreamManagement:(XMPPStreamManagement *)sender wasNotEnabled:(NSXMLElement *)failed{
    }
    
    - (void)xmppStreamManagement:(XMPPStreamManagement *)sender didReceiveAckForStanzaIds:(NSArray *)stanzaIds{
    }
    

    【讨论】:

    • 你好朋友,在我的情况下,代表没有打电话。你能帮我我们的吗?
    【解决方案2】:

    认证成功后调用流管理。

    另外不要忘记调用'sendAck()'方法。

    // Stream Management
    let xmppSMMS = XMPPStreamManagementMemoryStorage()
    xmppStreamManagement = XMPPStreamManagement(storage: xmppSMMS, dispatchQueue: DispatchQueue.main)
    xmppStreamManagement.addDelegate(self, delegateQueue: DispatchQueue.main)
    xmppStreamManagement.activate(xmppStream)
    xmppStreamManagement.autoResume = true
    xmppStreamManagement.ackResponseDelay = 0.2
    xmppStreamManagement.requestAck()
    xmppStreamManagement.automaticallyRequestAcks(afterStanzaCount: 1, orTimeout: 10)
    xmppStreamManagement.automaticallySendAcks(afterStanzaCount: 1, orTimeout: 10)
    xmppStreamManagement.enable(withResumption: true, maxTimeout: 0)
    xmppStreamManagement.sendAck()
    xmppStream.register(xmppStreamManagement)
    

    请检查以下链接。 https://stackoverflow.com/a/51018129/2781720

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 2015-10-22
      • 2013-09-24
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 2014-10-18
      相关资源
      最近更新 更多