如何在2G网络上管理openfire连接?

时间:2017-05-22 06:23:51

标签: ios objective-c swift3 openfire

我创建了像whatsApp和hike这样的消息传递应用程序。它致力于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连接的最佳方式。

1 个答案:

答案 0 :(得分:1)

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

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