2

XMPPFrameworkを使用して、機能の1つがインスタントメッセージシステムであるiPhone用のアプリを開発しています。今では、Google トークでテストしています。デリゲートは、ユーザー インターフェイスを管理するクラスと同じです。だから、私はこのコードを得ました:

ビューでDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setupStream];
}

setupStream メソッド:

- (void) setupStream
{
    NSLog(@"Inside setupStream");
    xmppStream = [[XMPPStream alloc] init];
    [xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
    [self connect];
}

接続方法:

- (BOOL) connect
{
    NSLog(@"Inside connect method");


    General *general = [General sharedManager];//this is a singleton to manage settings for every user
    NSString *chatid;
    NSString *chatpass;

    //chatid=[general user];
    chatid=@"somegmailaccount@gmail.com";
    xmppStream.myJID=[XMPPJID jidWithString:chatid];

    if (![xmppStream isDisconnected]) {
        return YES;
    }

    NSError *error = nil;
    if (![xmppStream connect:&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];

        return NO;
    }

    return YES;
}

xmppStreamDidConnect メソッドでは:

- (void) xmppStreamDidConnect:(XMPPStream *)sender
{
    [xmppStream authenticateWithPassword:@"password" error:NULL];
    [self goOnline];
}

そして goOnline メソッド:

- (void) goOnline
{
    XMPPPresence *presence = [XMPPPresence presence];
    [[self xmppStream] sendElement:presence];
    NSLog(@"Presence sent");
}

これで、プレゼンスは送信されません。テスト用に別の Google アカウント (たとえば、testing@gmail.com) を試していますが、このアカウントには somegmailaccount.gmail.com の存在は見られません。この同じアカウントを使用して Android アプリを開発したため、両方のアカウントが接続されており、お互いを認識しています。

私が間違っていることについて何か考えはありますか?どんな助けでも大歓迎です。

どうもありがとうございました。

4

2 に答える 2

6

見つけた!プレゼンスは次の方法では送信されません。

XMPPPresence *presence = [XMPPPresence presence];
[[self xmppStream] sendElement:presence];

Insted、私はこのようにしました:

NSXMLElement *presence = [NSXMLElement elementWithName:@"presence"];
[xmppStream sendElement:presence];

このように、プレゼンスは問題なく送信されます:)

于 2012-06-13T07:48:56.590 に答える
0

このコードでは、メソッド xmppStreamDidAuthenticate:(XMPPStream *)sender を実装し、プログラムはコードからの呼び出しなしでそのメソッドに入ります。しかし、私が置くと

[xmppStream setHostName:@"talk.google.com"];
[xmppStream setHostPort:5222];

...メソッド接続では、プログラムはそのメソッドやxmppStreamDidConnectに入らないでください。

私は怒っています。

于 2012-06-12T15:14:37.920 に答える