3

Android と iOS の両方で XMPP チャット アプリケーションを開発しています。

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];
}
4

0 に答える 0