尝试使用robbiehanson xmpp frame work创建一个非常简单的概念验证iOS xmpp app,只需要能够发送和接收消息和名册数据。我可以成功验证和发送邮件,但是当用户尝试回复我的邮件时,我没有收到邮件。我已经实现了didReceiveMessage委托方法,如下所示:
-(void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message {
NSLog(@"incoming message: %@", message);
}
但我从未收到此日志。如果我使用与此xmpp服务器通信的现有Web应用程序或Android应用程序登录,我会收到这些消息,因此我倾向于认为它们的格式正确。我需要在XMPPStream中添加一个模块来接收消息吗?我正在设置这样的流(为了安全起见,有些字符串值已经改变了,而不是这样):
stream = [[XMPPStream alloc] init];
stream.enableBackgroundingOnSocket = YES;
stream.hostName = @"hostname.com";
stream.hostPort = 5222;
XMPPRosterCoreDataStorage* xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] initWithInMemoryStore];
XMPPRoster* xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:xmppRosterStorage];
xmppRoster.autoFetchRoster = YES;
xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = YES;
[stream addDelegate:self delegateQueue:dispatch_get_main_queue()];
XMPPJID* jid = [XMPPJID jidWithUser:@"username" domain:@"domain.com" resource:@"iOS"];
[stream setMyJID:jid];
[xmppRoster activate:stream];
[stream connectWithTimeout:XMPPStreamTimeoutNone error:&error]
然后在xmppStreamDidConnect方法中我这样做来验证
NSString *myPassword = @"password";
NSError *error = nil;
[stream authenticateWithPassword:myPassword error:&error]
当我发送消息时,我使用此代码段:
MPPJID* recipient = [XMPPJID jidWithString:@"user@domain.com"];
XMPPMessage* message = [[XMPPMessage alloc] initWithType:@"chat" to:recipient];
[message addBody:@"hello world"];
[stream sendElement: message];
我认为有一些简单的事情我很遗憾以前曾经使用过这个的人能够马上向我指出。如果有必要,我已准备好提供其他信息以解决此问题。
答案 0 :(得分:1)
我只需要广播我的存在,然后我就能收到消息。
我将这些行添加到streamDidAuthenticate方法
XMPPPresence *presence = [XMPPPresence presence];
[sender sendElement:presence];