XMPP чат не работает между устройствами Android и iOS? - PullRequest
2 голосов
/ 22 апреля 2011

Я занимаюсь разработкой приложения для чата XMPP на Android и iOS.

Чат работает нормально между симулятором iPhone и устройством iOS. Он также работает между эмулятором Android и устройством Android. Однако он не работает между устройством Android и устройством iOS.

Может ли кто-нибудь предложить мне, что я могу делать не так?

Заранее спасибо ..

Обновление:

Сообщения поступают с устройства Android на устройство iOS, но не с iOS на Android.

Я использовал это для Android:

ConnectionConfiguration connConfig = new ConnectionConfiguration(testHost,portNumber);
connection = new XMPPConnection(connConfig);
connConfig.setSASLAuthenticationEnabled(true); 

Я использовал это для iOS:

XMPPJID *jid=[XMPPJID jidWithString:loginDetails.username];

password=loginDetails.password; 

[[self xmppStream] setMyJID:jid];
NSError *error;
if (![[self xmppStream] connect:&error])
{
    NSLog(@"Error connecting: %@", error);
    return NO;
}
return YES;

if (allowSelfSignedCertificates)
{
    [settings setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCFStreamSSLAllowsAnyRoot];
}

if (allowSSLHostNameMismatch)
{
    [settings setObject:[NSNull null] forKey:(NSString *)kCFStreamSSLPeerName];
}

else
{
    // Google does things incorrectly (does not conform to RFC).
    // Because so many people ask questions about this (assume xmpp framework is broken),
    // I've explicitly added code that shows how other xmpp clients "do the right thing"
    // when connecting to a google server (gmail, or google apps for domains).

    NSString *expectedCertName = nil;

    NSString *serverHostName = [sender hostName];
    NSString *virtualHostName = [[sender myJID] domain];

    if ([serverHostName isEqualToString:@"talk.google.com"])
    {
        if ([virtualHostName isEqualToString:@"gmail.com"])
            expectedCertName = virtualHostName;
        else 
            expectedCertName = serverHostName;
    }
    else
    {
        expectedCertName = serverHostName;
    }

    [settings setObject:expectedCertName forKey:(NSString *)kCFStreamSSLPeerName];
}
...