I have problem with sending messages after reconnecting with the quickblox server. The user is automatically logout in the middle of chatting with the others and after reconnect with the server again, the chat messages is not sending. But the log shown it was sent , not showing the receive log. The reconnect code works fine but cannot chat anymore.
when it was working as fine,
2013-10-12 10:48:37.033 football365[1000:8517] -[QBChat xmppStream:didSendMessage:] -> Message: <message to="4099_000000001000000003#muc.chat.quickblox.com" id="7" type="groupchat"><body>hello</body></message>
2013-10-12 10:48:37.463 football365[1000:8517] -[QBChat xmppRoom:didReceiveMessage:fromNick:] -> message: <message xmlns="jabber:client" type="groupchat" to="578338-4099#chat.quickblox.com/tigase-11258" from="4099_000000001000000003#muc.chat.quickblox.com/578338"><body>hello</body></message> fromNick: 578338
when message only sent, the received log is not shown.
2013-10-12 10:48:37.033 football365[1000:8517] -[QBChat xmppStream:didSendMessage:] -> Message: <message to="4099_000000001000000003#muc.chat.quickblox.com" id="7" type="groupchat"><body>hello</body></message>
the login code in DataManager.m.
- (void)chatLogin{
QBASessionCreationRequest *extendedAuthRequest = [QBASessionCreationRequest request];
extendedAuthRequest.userLogin = #"userid";
extendedAuthRequest.userPassword = #"password";
[QBAuth createSessionWithExtendedRequest:extendedAuthRequest delegate:self];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
}
- (void)completedWithResult:(Result *)result{
if(result.success && [result isKindOfClass:QBAAuthSessionCreationResult.class]){
QBAAuthSessionCreationResult *res = (QBAAuthSessionCreationResult *)result;
currentUser = [QBUUser user];
currentUser.ID = res.session.userID;
currentUser.password = #"password";
[[DataManager shared] setCurrentUser: currentUser];
[QBChat instance].delegate = self;
[[QBChat instance] loginWithUser:currentUser];
}
}
reconnect code in chatViewController.m,
-(void)chatDidFailWithError:(int)code
{
[[QBChat instance] loginWithUser:currentUser];
}
Related
i am working on XMPP based ios project. i am tring to send message but i am not able to send message. means receiver will not receive the message.
here is my code.
- (IBAction)sendMessageNow:(id)sender
{
NSString *messageStr =messageField.text;
if([messageStr length] > 0)
{
NSLog(#"Message sending fron Gmail");
NSXMLElement *body = [NSXMLElement elementWithName:#"body"];
[body setStringValue:messageStr];
NSXMLElement *message = [NSXMLElement elementWithName:#"message"];
[message addAttributeWithName:#"type" stringValue:#"chat"];
[message addAttributeWithName:#"to" stringValue:#"destination address"];
[message addChild:body];
NSLog(#"message1%#",message);
[[self appDelegate].xmppStream sendElement:message];
}
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:#"hh:mm a"];
//[self sendMessage];
if ([self.messageField.text length]>0) {
if (isfromMe)
{
NSString *rowNum=[NSString stringWithFormat:#"%d",(int)sphBubbledata.count];
[self adddMediaBubbledata:kTextByme mediaPath:self.messageField.text mtime:[formatter stringFromDate:date] thumb:#"" downloadstatus:#"" sendingStatus:kSending msg_ID:[self genRandStringLength:7]];
[self performSelector:#selector(messageSent:) withObject:rowNum afterDelay:1];
isfromMe=NO;
}
else
{
[self adddMediaBubbledata:kTextByOther mediaPath:self.messageField.text mtime:[formatter stringFromDate:date] thumb:#"" downloadstatus:#"" sendingStatus:kSent msg_ID:[self genRandStringLength:7]];
isfromMe=YES;
}
self.messageField.text=#"";
[self.chattable reloadData];
[self scrollTableview];
}
}
and here is my senderdidreceivemessage method from appdelegate.m
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
DDLogVerbose(#"%#: %#", THIS_FILE, THIS_METHOD);
[[self xmppStream] sendElement:message];
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.alertAction = #"OK";
localNotification.fireDate = [NSDate date];
// localNotification.alertBody = xmppmessage;
localNotification.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
// A simple example of inbound message handling.
if ([message isChatMessageWithBody])
{
XMPPUserCoreDataStorageObject *user = [xmppRosterStorage userForJID:[message from]
xmppStream:xmppStream
managedObjectContext:[self managedObjectContext_roster]];
NSString *body = [[message elementForName:#"body"] stringValue];
NSString *displayName = [user displayName];
if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive)
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:displayName
message:body
delegate:nil
cancelButtonTitle:#"Ok"
otherButtonTitles:nil];
[alertView show];
}
else
{
// We are not active, so use a local notification instead
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.alertAction = #"Ok";
localNotification.alertBody = [NSString stringWithFormat:#"From: %#\n\n%#",displayName,body];
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
}
}
}
EDIT
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *L_CellIdentifier = #"SPHTextBubbleCell";
static NSString *R_CellIdentifier = #"SPHMediaBubbleCell";
SPH_PARAM_List *feed_data=[[SPH_PARAM_List alloc]init];
feed_data=[sphBubbledata objectAtIndex:indexPath.row];
if ([feed_data.chat_media_type isEqualToString:kTextByme]||[feed_data.chat_media_type isEqualToString:kTextByOther])
{
SPHTextBubbleCell *cell = (SPHTextBubbleCell *) [tableView dequeueReusableCellWithIdentifier:L_CellIdentifier];
if (cell == nil)
{
cell = [[SPHTextBubbleCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:L_CellIdentifier];
}
XMPPUserCoreDataStorageObject *user = [[self fetchedResultsController] objectAtIndexPath:indexPath];
//cell.textLabel.text = user.displayName;
//[self configurePhotoForCell:cell user:user];
cell.bubbletype=([feed_data.chat_media_type isEqualToString:kTextByme])?#"LEFT":#"RIGHT";
cell.textLabel.text = user.displayName;
cell.textLabel.tag=indexPath.row;
cell.timestampLabel.text = #"02:20 AM";
cell.CustomDelegate=self;
cell.AvatarImageView.image=([feed_data.chat_media_type isEqualToString:kTextByme])?[UIImage imageNamed:#"ProfilePic"]:[UIImage imageNamed:#"person"];
// cell.AvatarImageView.image=[
[self configurePhotoForCell:cell user:user] ;
return cell;
}
SPHMediaBubbleCell *cell = (SPHMediaBubbleCell *) [tableView dequeueReusableCellWithIdentifier:R_CellIdentifier];
if (cell == nil)
{
cell = [[SPHMediaBubbleCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:R_CellIdentifier];
}
cell.bubbletype=([feed_data.chat_media_type isEqualToString:kImagebyme])?#"LEFT":#"RIGHT";
cell.textLabel.text = feed_data.chat_message;
cell.messageImageView.tag=indexPath.row;
cell.CustomDelegate=self;
cell.timestampLabel.text = #"02:20 AM";
cell.AvatarImageView.image=([feed_data.chat_media_type isEqualToString:kImagebyme])?[UIImage imageNamed:#"ProfilePic"]:[UIImage imageNamed:#"person"];
return cell;
}
and configure photo method
- (void)configurePhotoForCell:(UITableViewCell *)cell user:(XMPPUserCoreDataStorageObject *)user
{
// Our xmppRosterStorage will cache photos as they arrive from the xmppvCardAvatarModule.
// We only need to ask the avatar module for a photo, if the roster doesn't have it.
if (user.photo != nil)
{
cell.imageView.image = user.photo;
}
else
{
NSData *photoData = [[[self appDelegate] xmppvCardAvatarModule] photoDataForJID:user.jid];
if (photoData != nil)
cell.imageView.image = [UIImage imageWithData:photoData];
else
cell.imageView.image = [UIImage imageNamed:#"user2"];
}
}
EDIT
Both are send by me but it looks in same window, when i click on one time send button it looks in sender message and second time looks in receiver message. and receiver will not receive message.
EDIT
Here is response after i click on send button.
function:-[ChathistryViewController sendMessageNow:] line:414 content:Message sending fron Gmail
function:-[ChathistryViewController sendMessageNow:] line:421 content:message1ghfhxfghh
2015-06-12 13:03:22:071 projectname[7556:2f03] SEND: ghfhxfghh
2015-06-12 13:03:22:389 projectname[7556:7347] RECV: ghfhxfghh
2015-06-12 13:03:22:390 CloseChat[7556:2f03] SEND: ghfhxfghh
2015-06-12 13:03:22.393 projectname[7556:49110] Attempting to schedule a local notification {fire date = (null), time zone = (null), repeat interval = 0, repeat count = UILocalNotificationInfiniteRepeatCount, next fire date = Friday, June 12, 2015 at 1:03:22 PM India Standard Time, user info = (null)} with a sound but haven't received permission from the user to play sounds
2015-06-12 13:03:22:697 CloseChat[7556:7347] RECV:
2015-06-12 13:03:23:004 projectname[7556:7347] SEND:
2015-06-12 13:03:23:004 projectname[7556:7347] SEND: http://etherx.jabber.org/streams' version='1.0' to='jwchat.org'>
2015-06-12 13:03:23:619 projectname[7556:7347] RECV:
2015-06-12 13:03:23:619 projectname[7556:7347] RECV:
2015-06-12 13:03:23:619 CloseChat[7556:7347] SEND:
2015-06-12 13:03:23:925 projectname[7556:7347] RECV:
2015-06-12 13:03:23:926 projectname[7556:7347] SEND: http://etherx.jabber.org/streams' version='1.0' to='jwchat.org'>
2015-06-12 13:03:25:063 projectname[7556:7627] RECV:
2015-06-12 13:03:25:064 projectname[7556:7347] RECV: PLAINDIGEST-MD5SCRAM-SHA-1
2015-06-12 13:03:25:065 CloseChat[7556:607] SEND: biwsbj1jaGlyYWcscj1EMjUxMEQ2NC05MzZFLTQxMkUtQjY1Ri0zM0VFQjE1ODcxRjc=
2015-06-12 13:03:25:306 projectname[7556:7347] RECV: cj1EMjUxMEQ2NC05MzZFLTQxMkUtQjY1Ri0zM0VFQjE1ODcxRjdXVnB5eEp3b2lCRC9rUThvRkdhbGdRPT0scz1DZVZpSFFXNW9XRDVVNU90WUNMWExnPT0saT00MDk2
2015-06-12 13:03:25:321 projectname[7556:7347] SEND: Yz1iaXdzLHI9RDI1MTBENjQtOTM2RS00MTJFLUI2NUYtMzNFRUIxNTg3MUY3V1ZweXhKd29pQkQva1E4b0ZHYWxnUT09LHA9TWlsaW5TczI4b2VBd1dtQ3pWY21TWXZQWEFnPQ==
2015-06-12 13:03:25:562 projectname[7556:7627] RECV: dj1WeVdSaWRTTHVxYzhkV0E2aEg3OW9mU0FpYmc9
2015-06-12 13:03:25:562 projectname[7556:7627] SEND: http://etherx.jabber.org/streams' version='1.0' to='jwchat.org'>
2015-06-12 13:03:25:871 projectname[7556:7627] RECV:
2015-06-12 13:03:25:871 projectname[7556:7627] RECV:
2015-06-12 13:03:25:872 projectname[7556:7627] SEND:
2015-06-12 13:03:26:178 projectname[7556:7347] RECV: chirag#jwchat.org/341204969114349440629043
2015-06-12 13:03:26:179 projectname[7556:7347] SEND:
2015-06-12 13:03:26:485 projectname[7556:7347] RECV:
2015-06-12 13:03:26:486 projectname[7556:7627] SEND:
2015-06-12 13:03:26:487 projectname[7556:7347] SEND:
2015-06-12 13:03:26:488 projectname[7556:7627] SEND:
2015-06-12 13:03:26:714 projectname[7556:7347] RECV:
2015-06-12 13:03:26:946 projectname[7556:7347] RECV:
2015-06-12 13:03:26:947 projectname[7556:6e13] SEND:
2015-06-12 13:03:26:948 projectname[7556:6e13] RECV:
2015-06-12 13:03:27:180 projectname[7556:7627] RECV:
You must make sure first that your XMMP client is set up correctly. Then make sure that you are sending the message, and that you have the right sender.
For those who will now say that this is a comment, not an answer, I don't have enough reputation to comment!
The Control is just for UI purpose, I never wrote any code to send or receive a message from the server because I m not sure whether a user will use any third party SDK or XMPP or normal REST API.
So, you make the Server part & UI part separately.
Your question :
Both are sent by me but it looks in the same window when I click on one-time send button it looks in sender message and second time looks in receiver message. and receiver will not receive a message.
Ans: Yes, I have done that for Demo purpose, based on the response you will get from server you have to make the changes in code.
How to use:
1. Declare an NsmutableArray & initialize it on viewdidload.
2. When you send an Message, image, create a Bubbledata & add it to the array & then reload the Tableview.
[self adddMediaBubbledata:kTextByme mediaPath:#"Hi, check this new control!"
mtime:#"8:30 AM" thumb:#"NA" downloadstatus:#"" sendingStatus:kSent msg_ID:#"AB4353GH"];
Use Below types for send and receive:
kTextByme: if you sending a text
kImageByme : if you are sending an Image
kTextByOther : if you receiving an Text
kImageByOther : if you are receiving an Image
Now update the send Status
kSent : you successfully sent an message
kFailed : message sendig failed
kSending : your message is sending to server
So , based on the above information , make the changes and let me know if you require any other help
Please locate below delegate in XMPP Client(XMMPFramework), it will handle the received instant messages to you.
// XMPP Delegate method: xmpp client receives a message
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
// some computation stuff
return ;
}
I have gone through the XEP 0184 and have done following implementation.
If XMPP is connected and packet then is send then i set the status for each message as SENT (✔︎) if I don't get following callback.
-(void)xmppStream:(XMPPStream *)sender didReceiveError:(id)error
If i get the received status from XEP 0184 implemented in Objective C, I set the status as Delivered (✔︎✔︎)
RECV: < message xmlns="jabber:client" from="+122232322#wer.com/2323"
to="+3343232322#wer.com/2223" lang="" >< received
xmlns="urn:xmpp:receipts" id="avv-33343"/ >< /message >
But my question is how to show the SEEN status for each message as readh XMPP 0079 that is Advanced Messaging protocol is doing this. But I could not find in Objective C.
Can anyone please help? If my direction is correct and I am missing something could you let me know?
A code snippet guidance would be much appreciated.
Here is my implementation.
Using the stack documentation help I have added the following lines to get the delivery receipts.
XMPPMessageDeliveryReceipts* xmppMessageDeliveryReceipts = [[XMPPMessageDeliveryReceipts alloc] initWithDispatchQueue:dispatch_get_main_queue()];
xmppMessageDeliveryReceipts.autoSendMessageDeliveryReceipts = YES;
xmppMessageDeliveryReceipts.autoSendMessageDeliveryRequests = YES;
[xmppMessageDeliveryReceipts activate:self.xmppStream];
Now due to this I get the following response for the send and RECV xml.
SEND: 111111111 for avv-33343 Id message.
RECV: < message xmlns="jabber:client" from="+122232322#wer.com/2323"
to="+3343232322#wer.com/2223" lang="" >< received
xmlns="urn:xmpp:receipts" id="avv-33343"/ >< /message >
But this is just giving me info that the message is delivered but how to send the SEEN receipts like above to intimate the sender that the other end user have acknowledged + SEEN the message.
Something like this ... RECV: < seen xmlns="urn:xmpp:receipts" id="222-4444"/ >
For seen status use same functionality as send a normal message with same id which message received and you want to mark seen on Sender device,
When on sender device receive a static message #"to#fromSeen" with same message id for sent/delivered message, When receiver get exist msg id already in db then your purpose resolve .
Code for send seen status
NSString *bodymessageString = [NSString stringWithFormat:#"to#fromSeen"];
NSString *str_loginUser = [NSString stringWithFormat:#"%##%#", [[NSUserDefaults standardUserDefaults]valueForKey:#"mobile"],kXMPPServer ];
NSString *str_OtherUser = [NSString stringWithFormat:#"%##%#",str_OtherUserRegName,kXMPPServer];
NSXMLElement *body = [NSXMLElement elementWithName:#"body"];
[body setStringValue:bodymessageString];
NSXMLElement *message = [NSXMLElement elementWithName:#"message"];
[message addAttributeWithName:#"type" stringValue:#"chat"];
[message addAttributeWithName:#"from" stringValue:str_loginUser];
// [[[delegate xmppStream] myJID] bare]
[message addAttributeWithName:#"to" stringValue:str_OtherUser];
// NSString *messageID= [XMPPStream generateUUID];
[message addAttributeWithName:#"id" stringValue:str_msgID];
// NSXMLElement *request = [NSXMLElement elementWithName:#"request" xmlns:#"urn:xmpp:receipts"];
// [message addChild:request];
[message addChild:body];
[[delegate xmppStream] sendElement:message];
[ChatData GetUpdateToDatabase:str_msgID :#"Seen"];
Code for check message status in appdelegate file
if ([message isChatMessageWithBody])
{
if ([msg isEqualToString:#"to#fromSeen"])
{
BOOL is_Exist;
is_Exist = [ChatData GetAllReadyAvailable :message.elementID];
if (is_Exist == YES)
{
NSString *str_status = [ChatData getstatusChatBy:message.elementID];
if (![str_status isEqualToString:#"Seen"])
{
[ChatData GetUpdateToDatabase:message.elementID :#"Seen"];
}
}
}
else
{
BOOL is_Exist;
is_Exist = [ChatData GetAllReadyAvailable :message.elementID];
if (is_Exist == NO)
{
// Store message in DB
}
}
}
else if ([message hasReceiptResponse])
{
}
else if([message isErrorMessage])
{}
iPhone Chat app using xmpp/jabber.
This method i am not able register on server. it gives me "403" error.
Can anyone help me, how can i create a new account on server using xmpp/jabber in ios?
here my code :
NSString *username = loginField.text;
NSString *password = passwordField.text;
AppDelegate *del = (AppDelegate *)[[UIApplication sharedApplication] delegate];
del.xmppStream.myJID = [XMPPJID jidWithString:username];
NSLog(#"Does supports registration %hhd ",del.xmppStream.supportsInBandRegistration );
NSLog(#"Attempting registration for username %#",del.xmppStream.myJID.bare);
if (del.xmppStream.supportsInBandRegistration)
{
NSError *error = nil;
if (![del.xmppStream registerWithPassword:password error:&error])
{
NSLog(#"Oops, I forgot something: %#", error);
}
else
{
NSLog(#"No Error");
}
}
and i got error
ERROR :-
<iq xmlns="jabber:client" from="username#Testlocalhost" to="username#Testlocalhost/40751035661420464079722458" type="error">
<query xmlns="jabber:iq:register">
<username>newusername</username>
<password>userpassword</password>
</query>
<error code="403" type="auth">
<forbidden xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
I am developing a chat system in both iOS. The chat server which I am using is ejabbered server. I am using Robbiehanson xmppframework for iOS chat client.
The issue which I am facing is that I am not able to establish a proper xmppstream between the chat client and the server. The xmppstream state is in STATE_XMPP_REGISTERING. This holds a value of 8. Due to this,when I try to authenticate the just created registered user, I am encountering an exception
"Error authenticating: Error Domain=XMPPStreamErrorDomain Code=1 "Please wait until the stream is connected." UserInfo=0x166c1e30 {NSLocalizedDescription=Please wait until the stream is connected.}
But surprisingly, I am able to register a user using a password. When I try to authenticate the user, I am encountering this exception due to which the registered user is not able to appear ONLINE.
I am using ConnectWithTimeOut to connect the xmppstream to the server
NSString *myPassword = #"password";
if (myJID == nil || myPassword == nil) {
return NO;
}
[xmppStream setMyJID:[XMPPJID jidWithString:myJID]];
password = myPassword;
NSError *error = nil;
if (![xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error])
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:#"Error connecting"
message:#"See console for error details."
delegate:nil
cancelButtonTitle:#"Ok"
otherButtonTitles:nil];
[alertView show];
DDLogError(#"Error connecting: %#", error);
return NO;
}
Using this above code, I am able to establish a connection to the server.
Once the connectton is established, xmppStreamDidConnect is invoked.
when I checked the status of the XMPPStream, I am seeing the stream is connected.
Below is the code.
- (void)xmppStreamDidConnect:(XMPPStream *)sender
{
if ([xmppStream isDisconnected]){
NSLog(#"Is DisConnected");
[self connect];
}
if ([xmppStream isConnecting]){
NSLog(#"Is Connecting");
}
if ([xmppStream isConnecting]){
NSLog(#"Is Connecting");
}
if ([xmppStream isConnected]){
NSLog(#"Is Connected");
}
NSError *error = nil;
if (![[self xmppStream] registerWithPassword:#"password" error:&error]) {
NSLog(#"Registration error: %#", error);
}
if (![[self xmppStream] authenticateWithPassword:password error:&error])
{
DDLogError(#"Error authenticating: %#", error);
}else{
[self goOnline];
XMPPPresence *presence = [XMPPPresence presenceWithType:#"available"];
[sender sendElement:presence];
}
As per the above code, a user is registered and here comes the issue. When I try to authenticate the user, using authenticateWithPassword:password
XMPPLogTrace();
// The given password parameter could be mutable
NSString *password = [inPassword copy];
__block BOOL result = YES;
__block NSError *err = nil;
dispatch_block_t block = ^{ #autoreleasepool {
if (state != STATE_XMPP_CONNECTED)
{
NSString *errMsg = #"Please wait until the stream is connected.";
NSDictionary *info = [NSDictionary dictionaryWithObject:errMsg forKey:NSLocalizedDescriptionKey];
err = [NSError errorWithDomain:XMPPStreamErrorDomain code:XMPPStreamInvalidState userInfo:info];
result = NO;
return_from_block;
}
if (myJID_setByClient == nil)
{
NSString *errMsg = #"You must set myJID before calling authenticate:error:.";
NSDictionary *info = [NSDictionary dictionaryWithObject:errMsg forKey:NSLocalizedDescriptionKey];
err = [NSError errorWithDomain:XMPPStreamErrorDomain code:XMPPStreamInvalidProperty userInfo:info];
result = NO;
return_from_block;
}
the code below gets executed. But when I check the status of the xmppstream when I enter this delegate, I am seeing it in status 8 (which is STATE_XMPP_REGISTERING) though the user is successfully registered. This status makes to return a NO and hence the registered user is not appearing online.
Could anyone please help me in resolving this issue. I tried a lot of ways. But not able to progress.
Why I am not able to move to the next status and ultimately to status 12 before the authenticatewithpassword is invoked. Am I missing any intermediate steps after establishing a connection and successful registration. In nutshell, why the stream state stops at 8. and not going forward to
STATE_XMPP_AUTH,STATE_XMPP_BINDING,STATE_XMPP_START_SESSION, STATE_XMPP_CONNECTED, before getting into authenticatewithpassword
Logs for more info.
2014-05-30 07:40:20:995 konnectlinks[3249:8403] SEND: <?xml version='1.0'?>
2014-05-30 07:40:20:996 konnectlinks[3249:8403] SEND: <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' to='localhost'>
2014-05-30 07:40:21.246 konnectlinks[3249:60b] dhaval is here
2014-05-30 07:40:21:608 konnectlinks[3249:4717] RECV: <stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" id="114321716" from="localhost" version="1.0" stream1:lang="en"/>
2014-05-30 07:40:21:609 konnectlinks[3249:8403] RECV: <stream:features xmlns:stream="http://etherx.jabber.org/streams"><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>SCRAM-SHA-1</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism></mechanisms><c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.process-one.net/en/ejabberd/" ver="9DVbXp9C/vTyB5mLfy7wktk5Pfs="/><register xmlns="http://jabber.org/features/iq-register"/></stream:features>
2014-05-30 07:40:21.610 konnectlinks[3249:8403] -[XMPPReconnect xmppStreamDidConnect:]
2014-05-30 07:41:01.558 konnectlinks[3249:60b] Is Connected
2014-05-30 07:41:01.561 konnectlinks[3249:8403] -[XMPPReconnect setMultipleReachabilityChanges:]
2014-05-30 07:41:14.073 konnectlinks[3249:8403] -[XMPPReconnect setManuallyStarted:]
2014-05-30 07:41:14.076 konnectlinks[3249:8403] -[XMPPReconnect teardownReconnectTimer]
2014-05-30 07:41:14:076 konnectlinks[3249:60b] SEND: <iq type="set"><query xmlns="jabber:iq:register"><username>timop</username><password>password</password></query></iq>
2014-05-30 07:41:14.077 konnectlinks[3249:8403] -[XMPPReconnect teardownNetworkMonitoring]
2014-05-30 07:42:07:428 konnectlinks[3249:860b] RECV: <iq xmlns="jabber:client" from="localhost" type="result"><query xmlns="jabber:iq:register"><username>timop</username><password>password</password></query></iq>
2014-05-30 07:42:10:312 konnectlinks[3249:60b] Error authenticating: Error Domain=XMPPStreamErrorDomain Code=1 "Please wait until the stream is connected." UserInfo=0x166c1e30 {NSLocalizedDescription=Please wait until the stream is connected.}
I am sure someone would have encountered the issue.
Please help me in resolving this issue. Advance thanks for your time and help
I reviewed the code seems its right , Make sure the username and password you send it must be correct.
If nothing goes right then contact with your server/web team regarding this or try to connect with creating new user
I am using quickblox in my app to do 1 to 1 chat.
The user is already login.
But when I try to login the chat, I get the following error.
2014-03-31 12:42:09.532 MyChat[2175:3803] QBChat/didNotAuthenticate, error: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>
2014-03-31 12:42:09.533 MyChat[2175:3803] -[QBContactList dealloc] ->
2014-03-31 12:42:09.533 MyChat[2175:3803] QBChat/didDisconnect, error: (null)
What am I doing wrong.
QBUUser *currentUser = [QBUUser user];
[QBChat instance].delegate = self;
[[QBChat instance] loginWithUser:currentUser];
It's not a right way,
currentUser instance is empty, you should set ID and password at least to login to Chat
For example
QBUUser *user = [QBUUser user];
user.ID = 979387;
user.password = #"userpass";
[[QBChat instance] loginWithUser:user];