smallseo.info

XMPPFramework

An XMPP Framework in Objective-C for Mac and iOS

How to get the message delivary status using XMPP framework

I am using the XMPP Framework for chatting between the users , Chatting is happening perfectly .Now I need to show the message is delivered perfectly to both devices like (What's app messenger). I am not getting any tutorial to follow. Below code represents while we send message to the other user.

//Sending the message to the other user
 NSXMLElement *body = [NSXMLElement elementWithName:@"body"];
 [body setStringValue:txtChat.text];

 NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
 [message addAttributeWithName:@"type" stringValue:@"chat"];
 [message addAttributeWithName:@"to" stringValue:self.userjid];
 [message addChild:body];
 [[APPDELEGATE xmppStream] sendElement:message];

While reterving the message by using XMPP Framework i was getting the data by using below code

- (void)loadarchivemsg
{        
    XMPPMessageArchivingCoreDataStorage *storage = [XMPPMessageArchivingCoreDataStorage sharedInstance];
    NSManagedObjectContext *moc = [storage mainThreadManagedObjectContext];
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject"
                                                         inManagedObjectContext:moc];
    NSFetchRequest *request = [[NSFetchRequest alloc]init];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(bareJidStr like %@) && (streamBareJidStr like %@)", self.userjid,[[NSUserDefaults standardUserDefaults] stringForKey:@"kXMPPmyJID"]];
    request.predicate = predicate;
    NSLog(@"%@",[[NSUserDefaults standardUserDefaults] stringForKey:@"kXMPPmyJID"]);
    [request setEntity:entityDescription];
    NSError *error;
    NSArray *messages_arc = [moc executeFetchRequest:request error:&error];

    [self print:[[NSMutableArray alloc]initWithArray:messages_arc]];    
}

- (void)print:(NSMutableArray*)messages_arc{
    @autoreleasepool {
        for (XMPPMessageArchiving_Message_CoreDataObject *message in messages_arc) {

            NSXMLElement *element = [[NSXMLElement alloc] initWithXMLString:message.messageStr error:nil];
            XMPPMessage *message12=[[XMPPMessage alloc]init];
            message12 = [message message];
  }
}

In this why I was sending the message and retrieving the message,can you help me how to retrieve the delivery status of the message . Waiting for your valuable answers.


Source: (StackOverflow)

Using XMPP to send realtime-ish information to running iOS app

I'm developing an iOS app. There are different 'areas' to the app, and users can post 'things' to them. Other users watching the same area should have the posted thing sent to their phone (but only if the app is running).

I've started work on a Django backend with a RESTful API. I plan on hosting the backend on Amazon Web Services, and each time something is added to an 'area', placing the time of update and 'area' into a queue, using Amazon Simple Queue Service. I'm going to make a Python app that processes items in the queue, querying the database to see which users have new 'things' they can download - currently this part is planned to then send an Apple Push Notification to the phone, and if the app is running it can make a simple RESTful request to get the new data in JSON format.

However I believe XMPP would be a better solution (using XMPPFramework on the iOS side), and would make it possible to support Android in the future.


I've done a lot of research into how to use XMPP for this purpose, but the documentation suggests that you would be using the public XMPP network, that users would have to set up an XMPP account, and is unclear how to send non-chat information.

This project requires the use of XMPP purely to send information from the server to a users device. Thus it should be a private XMPP network, if necessary users can be registered for an XMPP account on this private network (but behind the scenes, they shouldn't know what technology is powering the app.)


Is it possible to use XMPP just to send information to a mobile app? A lot answers/tutorials on the internet basically just suggest using an XMPP server and client - with no mention of how you can hook up the two on a private network to send data as determined by something other than the XMPP server.

Thank you for your help in advance :)


Source: (StackOverflow)

Enable BOSH services in XMPP IOS framwork(https://github.com/robbiehanson/XMPPFramework) to creat chat based app

I have implemented Chat based application.I can able to do many functionality with https://github.com/robbiehanson/XMPPFramework library. It is very good library. But after some days my server side guys included bash services in server. My server side guys implementing xmpp using Strophe.js. And they are using following code to enable BOSH service while connecting.

BOSH_SERVICE = "http://host.com:5280/http-bind";
new Strophe.Connection(BOSH_SERVICE);

Now they told me enable BASH service in IOS side also. Now I can not connect to that server. Please can anyboady help me to how to include BOSH service in robbiehanson xmpp IOS library(https://github.com/robbiehanson/XMPPFramework).

Really appreciate anykind of help on this topic.

Thanks


Source: (StackOverflow)

node js for XMPP protocol?

I want to develop an instant messaging for mobile application, like whatsapp, with nodejs as my backend. I have gone through XMPP protocols and read xmpp.org documentation as well.

I referred to this link and I am able to build some of the basic XMPP functionality like creating and messaging users. But I am still unable to implement the complete functionality of XMPP in nodejs.

So: are there any node js libaries available to build the complete functionality of xmpp protocol, such as asmack? Alternatively, how do I send calls to XMPP server via XML?


Source: (StackOverflow)

XMPP frameworks

.h and .m files of the xmpp, I am trying work on a chat application.
But when i build the project I get the following error, I am trying to solve the problem from past 24 hours, but was not successful to get the solution, I even googled but didn't got the solution. The following is the error which i am getting,

Undefined symbols for architecture i386:
  "_dns_free_resource_record", referenced from:
      -[XMPPSRVResolver processRecord:length:] in XMPPSRVResolver.o
  "_dns_parse_resource_record", referenced from:
      -[XMPPSRVResolver processRecord:length:] in XMPPSRVResolver.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Source: (StackOverflow)

How to get prefrences in XEP-0136: Message Archiving?

My Message Archiving is fine , message is saving in database easily but for some reason i want to fetch the preference set for xep-0136 .

As stated in xep-0136 extension to get preference we need to send this IQ

<iq type="get" id="pref1">
    <pref xmlns="urn:xmpp:archive">
    </pref>
</iq>

But on sending this I am getting error in response that service is unavailable but i dont know how this can be possible ? because message archiving is working all fine. do i need to implement some other module.

error iq

<iq
    xmlns="jabber:client"
    from="ramu_gmail.com@##.##.##.##"
    to="ramu_gmail.com@##.##.##.##/42117879931439208568472324"
    type="error"
    id="pref1">
    <pref xmlns="urn:xmpp:archive"></pref>
    <error code="503" type="cancel">
        <service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"></service-unavailable>
    </error>
</iq>

Guys please suggest.Thanks in advance.


Source: (StackOverflow)

Accepting chatroom invitation

I'm able to create a MUC using XMPPFramework and send user invitation requests to join that room by using the code below.

// Creating
AppDelegate *dele =(AppDelegate *) [[UIApplication sharedApplication]delegate];

xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:dele jid:[XMPPJID jidWithString:self.roomName] dispatchQueue:dispatch_get_main_queue()];
[xmppRoom addDelegate:dele delegateQueue:dispatch_get_main_queue()];
[xmppRoom activate:dele.xmppStream];
[xmppRoom joinRoomUsingNickname:self.myNick history:nil];

// Inviting
[xmppRoom inviteUser:[XMPPJID jidWithString:@"abc@host"] withMessage:@"Come Join me"];

How does a user "abc" know that he has received an invitation and how can he react to it either by accepting or declining?

I could not find any class in XMPPFramework which directly deal with chat room invitation. My research says that whenever a user receives an chatroom invitation, xmmppStream's delegate method is called:

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message

In that message, I check whether the it contains NSXMLElement with name "invite", and if it contains then i send a callback to the user. Then i create chatroom with the same name as the name of the chatroom from which user received invitation and enter that newly created room. It works fine but quiet lengthy and not quiet efficient. I want to know if there is a class in XMPPFramework available here which could handle chat room invitation separately. For instance, detecting, accepting, and declining of room invitations.

My code for extracting room name:

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
    NSXMLElement * x = [message elementForName:@"x" xmlns:XMPPMUCUserNamespace];
    NSXMLElement * invite  = [x elementForName:@"invite"];
    NSXMLElement * decline = [x elementForName:@"decline"];
    NSXMLElement * directInvite = [message elementForName:@"x" xmlns:@"jabber:x:conference"];
    NSString *msg = [[message elementForName:@"body"]stringValue];
    NSString *from = [[[message attributeForName:@"from"]stringValue];
    if (invite || directInvite)
    {
        [self createAndEnterRoom:from Message:msg];
        return;
    }
    [self.delegate newMessageRecieved:msg];
}

Source: (StackOverflow)

Trouble creating xmpp muc room: Code 503 (service unavailable)

My code to create a room:

XMPPRoomCoreDataStorage *rosterstorage = [[XMPPRoomCoreDataStorage alloc] init];
XMPPRoom *xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:rosterstorage jid:[XMPPJID jidWithString:@"groupchat@xmpp.getkismet.com/groupchat"] dispatchQueue:dispatch_get_main_queue()];

[xmppRoom activate:[[self appDelegate] xmppStream]];
if ([xmppRoom preJoinWithNickname:@"nameToCreateRoom"]) 
{
    NSLog(@"room created");
    [xmppRoom joinRoomUsingNickname:self.userName history:nil];
}
[xmppRoom fetchConfigurationForm];
[xmppRoom configureRoomUsingOptions:nil];
[xmppRoom addDelegate:[self appDelegate] delegateQueue:dispatch_get_main_queue()];

Debug:

2012-08-03 07:46:29.204 iPhoneXMPP[9887:fb03] room created
2012-08-03 07:46:29:230 iPhoneXMPP[9887:15003] SEND: <iq type="get" to="groupchat@xmpp.getkismet.com" id="B793062B-0E09-492F-BC0F-703503AAA664"><query xmlns="http://jabber.org/protocol/muc#owner"/></iq>
2012-08-03 07:46:29:237 iPhoneXMPP[9887:15003] SEND: <iq type="set" to="groupchat@xmpp.getkismet.com" id="392D5BFC-707B-4F68-A829-56F949F4E96D"><query xmlns="http://jabber.org/protocol/muc#owner"><x xmlns="jabber:x:data" type="submit"/></query></iq>
2012-08-03 07:46:29:326 iPhoneXMPP[9887:14f03] SEND: <presence to="groupchat@xmpp.getkismet.com"><x xmlns="http://jabber.org/protocol/muc"/><x xmlns="vcard-temp:x:update"><photo>91217a961321f8f6380ea2feefd0632353ad296c</photo></x><c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://code.google.com/p/xmppframework" ver="VyOFcFX6+YNmKssVXSBKGFP0BS4="/></presence>
2012-08-03 07:46:29:327 iPhoneXMPP[9887:14f03] RECV: <iq xmlns="jabber:client" from="groupchat@xmpp.getkismet.com" to="lee@xmpp.getkismet.com/41068195801343976386548353" type="error" id="B793062B-0E09-492F-BC0F-703503AAA664"><query xmlns="http://jabber.org/protocol/muc#owner"/><error code="503" type="cancel"><service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>
2012-08-03 07:46:29:343 iPhoneXMPP[9887:fb03] iPhoneXMPPAppDelegate: xmppStream:didReceiveIQ:
2012-08-03 07:46:29:421 iPhoneXMPP[9887:15003] RECV: <iq xmlns="jabber:client" from="groupchat@xmpp.getkismet.com" to="lee@xmpp.getkismet.com/41068195801343976386548353" type="error" id="392D5BFC-707B-4F68-A829-56F949F4E96D"><query xmlns="http://jabber.org/protocol/muc#owner"><x xmlns="jabber:x:data" type="submit"/></query><error code="503" type="cancel"><service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>
2012-08-03 07:46:29:440 iPhoneXMPP[9887:fb03] iPhoneXMPPAppDelegate: xmppStream:didReceiveIQ:

I see that it is creating/joining groupchat@xmpp.getkismet.com and not groupchat@xmpp.getkismet.com/groupchat like I specified. I read that this is most likely the problem. However, I have specified for the full jid, so I'm lost.

Thanks in advance to all who help.


Source: (StackOverflow)

MUC How-to with XMPPFramework

I am developing an iOS XMPP chat app that utilizes Robbie Hanson's XMPPFramework.

The most important functionalities have been implemented - sending and receiving messages. Basically, I've built a basic functional chat app already, with a little eye candy of course.

Now, the problem I have is regarding MUC. The codes I saw from other websites show that there is a method initWithRoomName in XMPPRoom. However, this method is absent in the git repo I cloned. So, what is the alternative to this? Or, if there is none, how do I go about creating rooms using XMPPFramework?

Thanks.


Source: (StackOverflow)

xmppstream delegate methods not getting called on my custom class

I started with xmppframework recently,but i am stuck with an issue.i am able to connect to my server on my local network but the xmppstreamdelegate methods are not getting called on my custom class,but works absolutely fine on appdelegate class .Can anyone pls help me on this.Is the delegate only supported on the appdelegate class ?

Header:

@interface XmppClass : NSObject<XMPPStreamDelegate>{
    XMPPStream *xmppStream;
    Login * loginDetail;
    BOOL allowSelfSignedCertificates;
    BOOL allowSSLHostNameMismatch;
}
@property (nonatomic, strong, readonly) XMPPStream *xmppStream;

@property (nonatomic, strong) Login *loginDetail;
- (id)initWithLogin:(Login *) loginrefernce;
- (BOOL)connect;
- (void)disconnect;
- (void)setupStream;
@end

Implementation:

@implementation XmppClass

@synthesize xmppStream;
@synthesize loginDetail;
- (id)initWithLogin:(Login *) loginrefernce
{
    self = [super init];
    if (self) {
        self.loginDetail=loginrefernce;
        [DDLog addLogger:[DDTTYLogger sharedInstance]];
        [self setupStream];
        [self connect];
    }
    return self;
}
- (void)setupStream
{
NSAssert(xmppStream == nil, @"Method setupStream invoked multiple times");
// Setup xmpp stream
// 
// The XMPPStream is the base class for all activity.
// Everything else plugs into the xmppStream, such as modules/extensions and delegates.

xmppStream = [[XMPPStream alloc] init];
#if !TARGET_IPHONE_SIMULATOR
{
// Want xmpp to run in the background?
// 
// P.S. - The simulator doesn't support backgrounding yet.
//        When you try to set the associated property on the simulator, it simply fails.
//        And when you background an app on the simulator,
//        it just queues network traffic til the app is foregrounded again.
//        We are patiently waiting for a fix from Apple.
//        If you do enableBackgroundingOnSocket on the simulator,
//        you will simply see an error message from the xmpp stack when it fails to set the property.
xmppStream.enableBackgroundingOnSocket = YES;
}
#endif

NSLog(@"setup stream");
[xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];

[xmppStream setHostName:@"10.68.202.123"];
//[xmppStream setHostPort:8070];

allowSelfSignedCertificates = NO;
allowSSLHostNameMismatch = NO;

// You may need to alter these settings depending on the server you're connecting to

}

- (BOOL)connect
{
    NSLog(@"connect");
    if (![xmppStream isDisconnected]) {
        return YES;
    }


//
// If you don't want to use the Settings view to set the JID, 
// uncomment the section below to hard code a JID and password.
// 
// myJID = @"user@gmail.com/xmppframework";
// myPassword = @"";
if (self.loginDetail.emailId == nil || self.loginDetail.password == nil) {
    return NO;
}

[xmppStream setMyJID:[XMPPJID jidWithString:[self.loginDetail.emailId      stringByAppendingString:@"/pc"]]];


NSError *error = nil;
if (![xmppStream connect:&error])
{

    NSLog(@"Error connecting: %@", error);

    return NO;
}

return YES;
}

- (void)disconnect
{
    [xmppStream disconnect];
}
- (void)xmppStream:(XMPPStream *)sender socketDidConnect:(GCDAsyncSocket *)socket 
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}

- (void)xmppStream:(XMPPStream *)sender willSecureWithSettings:(NSMutableDictionary *)settings
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    NSLog(@"some security thing");
    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 *serverDomain = xmppStream.hostName;
        NSString *virtualDomain = [xmppStream.myJID domain];
        if ([serverDomain isEqualToString:@"talk.google.com"])
        {
             if ([virtualDomain isEqualToString:@"gmail.com"])
             {
                  expectedCertName = virtualDomain;
             }
             else
             {
                  expectedCertName = serverDomain;
             }
        }
        else if (serverDomain == nil)
        {
             expectedCertName = virtualDomain;
        }
        else
        {
             expectedCertName = serverDomain;
        }
        if (expectedCertName)
        {
             [settings setObject:expectedCertName forKey:(NSString *)kCFStreamSSLPeerName];
        }
}

}

- (void)xmppStreamDidSecure:(XMPPStream *)sender
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}

- (void)xmppStreamDidConnect:(XMPPStream *)sender
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    NSLog(@"connected");
    NSError *error = nil;
    if (![[self xmppStream] authenticateWithPassword:self.loginDetail.password error:&error])
    {
            DDLogError(@"Error authenticating: %@", error);
    }
}

- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    NSLog(@"authenticated");

}

- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    NSLog(@"did not authenticate");
}

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    return NO;
}

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

    // A simple example of inbound message handling.

}

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
{
    DDLogVerbose(@"%@: %@ - %@", THIS_FILE, THIS_METHOD, [presence fromStr]);
}

- (void)xmppStream:(XMPPStream *)sender didReceiveError:(id)error
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}

- (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    NSLog(@"%@",error);
}
@end

Source: (StackOverflow)

Send a message via XMPPFramework for iOS

How do I send a message through the XMPPFramework for objc and ios?

Its really bugging me now. I need to build a custom method with some custom XML and send it to a specific JID.

Any ideas?

Thank you.


Source: (StackOverflow)

Can't send message to FB

FB authentication is proper and i can receive messages. Only issue is when sending messages to a FB friend. No error messages or warnings are being shown, but the message is simply not delivered to the FB friend.

This is the string that i am sending

<message xmlns="http://www.facebook.com/xmpp/messages" to="-FB_ID@chat.facebook.com">
<body>my_message</body></message>

Any one having same issue?.


Source: (StackOverflow)

How to list only online users on facebook with xmpp framework

I have integrated xmpp in my app and able to list all the users in a table view, but I only want to display the online users and then want to implement the feature to send and recieve messages to my online friends...

Please suggest me some helpful code...

Here is my code, executed after facebook login.

    - (void)fbDidLogin
{
    NSLog(@"logged in.....................");
    [appDelegate.facebook requestWithGraphPath:@"me" andDelegate:self]; 

    DDLogVerbose(@"%s accessToken: %@ expirationDate: %@",__PRETTY_FUNCTION__,appDelegate.facebook.accessToken,appDelegate.facebook.expirationDate);
    self.accessToken = appDelegate.facebook.accessToken;

    if (xmppStreamFB) {  
        [xmppStreamFB release];  
        xmppStreamFB = nil;  
    }
    xmppStreamFB = [[XMPPStreamFacebook alloc] init];
    xmpReconnect = [[XMPPReconnect alloc] initWithStream:xmppStreamFB];  

    if (xmppRosterStorage) {  
        [xmppRosterStorage release];  
        xmppRosterStorage = nil;  
    }
    xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] init];

    if (xmppRoster) {  
        [xmppRoster release];  
        xmppRoster = nil;  
    } 
    xmppRoster = [[XMPPRoster alloc] initWithStream:xmppStreamFB rosterStorage:xmppRosterStorage];

    [xmppStreamFB addDelegate:self];
    [xmppRoster addDelegate:self];
    [xmppRoster setAutoRoster:YES];

    xmppStreamFB.myJID = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@chat.facebook.com", uid]];

    // You may need to alter these settings depending on the server you're connecting to
    allowSelfSignedCertificates = NO;
    allowSSLHostNameMismatch = YES;

    // Uncomment me when the proper information has been entered above.
    NSError *error = nil;
    if (![xmppStreamFB connect:&error]) 
        NSLog(@"Error connecting: %@", error);

    if(!tableView)
    {
        tableView = [[UITableView alloc]initWithFrame:CGRectMake(0,0, 480, 320) style:UITableViewStylePlain];
    }
    [tableView setFrame:CGRectMake(0,0, 480, 320)];
    [tableView setTag:2];
    [tableView setDelegate:self];
    [tableView setDataSource:self];
    [tableView setHidden:NO];
    [tableView setBackgroundColor:[UIColor clearColor]];
    [tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];
    [tableView setAlpha:1.0];

    [self.view addSubview:tableView];

    [self.tableView reloadData];
    [self showTopBar];

}

I don't know the actual flow of the xmpp framework for showing users online and to implement chat feature...

i have the following delegate methods as well..

    - (void)xmppStreamDidSecure:(XMPPStreamFacebook *)sender
{
    NSLog(@"---------- xmppStreamDidSecure: ----------");
}

- (void)xmppStreamDidConnect:(XMPPStreamFacebook *)sender
{
    NSLog(@"---------- xmppStreamDidConnect: ----------");

    isOpen = YES;

    NSError *error = nil;

    if (![self.xmppStreamFB authenticateWithAppId:_APP_ID accessToken:self.accessToken error:&error])
    {
        NSLog(@"Error authenticating: %@", error);
    }
    else {
        NSLog(@"NO Error authenticating:");
        /*
        ChatViewController *cvc = [[ChatViewController alloc] init];
        [self.view addSubview:cvc.view];*/
    }

}
- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender
{
    NSLog(@"---------- xmppStreamDidAuthenticate: ----------");

    [self goOnline];
}

- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error
{
    NSLog(@"---------- xmppStream:didNotAuthenticate: ----------");
}

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
{
    NSLog(@"---------- xmppStream:didReceiveIQ: ----------");
    /*
    ChatViewController *cvc = [[ChatViewController alloc] init];
    [self.view addSubview:cvc.view];*/

    return NO;
}

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
    NSLog(@"---------- xmppStream:didReceiveMessage: ----------");
}

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
{
    NSLog(@"---------- xmppStream:didReceivePresence: ----------");

}

- (void)xmppStream:(XMPPStream *)sender didReceiveError:(id)error
{
    NSLog(@"---------- xmppStream:didReceiveError: ----------");
}

- (void)xmppStreamDidDisconnect:(XMPPStream *)sender
{
    NSLog(@"---------- xmppStreamDidDisconnect: ----------");

    if (!isOpen)
    {
        NSLog(@"Unable to connect to server. Check xmppStream.hostName");
    }
}

And the two methods for online and offline user presence, but don't know how to modify them for my task:

    - (void)goOnline
{
    NSXMLElement *presence = [NSXMLElement elementWithName:@"presence"];

    [[self xmppStream] sendElement:presence];
}

- (void)goOffline
{
    NSXMLElement *presence = [NSXMLElement elementWithName:@"presence"];
    [presence addAttributeWithName:@"type" stringValue:@"unavailable"];

    [[self xmppStream] sendElement:presence];
}

Source: (StackOverflow)

How to send message using XMPP Framework

I am creating a chat application using XMPP Framework in iphone. i could get received messages but i am not able to send a message. can any one give me solution for this??


Source: (StackOverflow)

XMPP iOS Framework detect internet disconnection issue with OpenFire server

I have implemented chatting application using XMPP iOS Framework with OpenFire server.

Fortunately, application is running successfully but I am facing one issue of internet disconnection in application.

When user is getting logout or went in offline mode manually then it sends stanza to his/her rosters. So his/her rosters knows that user went in offline mode.

Now when internet will disconnect from user's device at that time application is not able to send presence stanza to server due to internet disconnection. So his/her rosters won't get information about that offline user and user will be shown in online mode only.

I thought something like OpenFire server might be able to check connected users and whenever any user gets disconnected it should send presence stanza with offline status to his rosters so they can know that this user is on offline mode.

Can anybody please help me if there is any way through which I can implement this feature.

It will be very helpful for me to solve this issue.

Thanks in advance.


Source: (StackOverflow)