我创建了像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连接的最佳方式。
答案 0 :(得分:1)
这些应用程序可能使用推送通知在不可靠的IP网络(如2G)上接收更新。这允许它们在线显示而不保持与服务器的持续连接。
使用XMPP很难实现 - 协议的编写假设用户只需要在连接到服务器时可以访问。某些XEP扩展添加了部分解决方法,但整个协议非常适合移动客户端。 (This has been a well-known limitation since at least 2014.)您可能想要考虑替代方案。