ios - 如何管理 2G 网络上的 openfire 连接?

标签 ios objective-c swift3 openfire

我创建了消息应用程序,例如 WhatsApp 和徒步旅行。它适用于 3G、4G 和 Wifi 网络。当用户切换到 2G 网络时,我的应用程序连接中断,但 WhatsApp 和徒步旅行工作正常。我在管理应用程序连接的地方发布代码::

#pragma mark - connect to the server

- (BOOL)connect {

if (!self.xmppStream) {
    [self setupStream];
}

NSString *jabberID = [[NSUserDefaults standardUserDefaults] stringForKey:kUserName];
if (![self.xmppStream isDisconnected]) {
    return YES;
}

if (jabberID == nil || kXMPPPassword == nil) {

    return NO;
}
[self.xmppStream setMyJID:[XMPPJID jidWithString:jabberID]];

[self.xmppStream setHostName:kXMPPHost];

NSError *error = nil;
if (![self.xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error])
{
    //        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"Can't connect to server %@", [error localizedDescription]]  delegate:nil  cancelButtonTitle:@"Ok" otherButtonTitles:nil];
    //        [alertView show];

    NSLog(@"errorerrorerrorerrorerrorerror :- %@", error);
    return NO;
}
return YES;}

 - (void)connectThenSignIn {
    if ([_xmppStream isConnecting]) {   // Connection error, connection is being established
    return ;
}
if ([_xmppStream isDisconnected]) {     // If disconnected, a server connection is established
    [self connect];
    _goToRegisterAfterConnected = NO;
} else if ([_xmppStream isConnected]) {   
    [self doSignIn];
} }

请建议我管理每个网络(2G、3G、4G 和 wifi)上的 openfire 连接的最佳方法。

最佳答案

这些应用程序可能在不可靠的 IP 网络(如 2G)上使用推送通知来接收更新。这使他们可以在线显示,而无需保持与服务器的持续连接。

使用 XMPP 很难做到这一点 -- 该协议(protocol)的编写假设用户只需要在连接到服务器时可以访问。一些 XEP 扩展添加了部分解决方法,但协议(protocol)作为一个整体不太适合移动客户端。 ( This has been a well-known limitation since at least 2014. ) 您可能需要考虑替代方案。

关于ios - 如何管理 2G 网络上的 openfire 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44105912/

相关文章:

ios - 为该类之外的类注册通知观察者

ios - 处理长时间运行的任务和 Parse.com API

ios - Swift:移动 UIView

ios - 将数据从 tableview controller 传递到 view controller,但它显示为 null

ios - 在添加新值之前如何检查数组是否具有相同的对象值

ios - AVFoundation - 如何在捕获图像之前将闪光灯设置为自动/关闭

ios - 当 Crashlytics 捕获异常时应用程序崩溃

iphone - 模态视图 Controller 隐藏标签栏

ios - 如何获取在闭包中分配的变量的值(Swift)

swift - 在多种方法中使用相同的货币格式