To handle real-time presence events on subscribed channels, add a presence event handling callback.
Click to copy the blue snippets and then paste them into your code.#import "AppDelegate.h" #import <PubNub/PubNub.h> #import <PubNubBridge/PubNub+FAB.h> @interface AppDelegate () <PNObjectEventListener> @property (nonatomic, strong) PubNub *client; @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.client = [PubNub client]; [self.client addListener:self]; [self.client subscribeToPresenceChannels:@[@"lobby"]]; return YES; } - (void)client:(PubNub *)client didReceiveStatus:(PNSubscribeStatus *)status { if (status.category == PNUnexpectedDisconnectCategory) { } else if (status.category == PNConnectedCategory) { } else if (status.category == PNReconnectedCategory) { } else if (status.category == PNDisconnectedCategory) { } else if (status.category == PNDecryptionErrorCategory) { } } - (void)client:(PubNub *)client didReceivePresenceEvent:(PNPresenceEventResult *)event { // Handle presence event event.data.presenceEvent (one of: join, leave, timeout, // state-change). if (event.data.actualChannel != nil) { // Presence event has been received on channel group stored in // event.data.subscribedChannel } else { // Presence event has been received on channel stored in // event.data.subscribedChannel } if (![event.data.presenceEvent isEqualToString:@"state-change"]) { NSLog(@"%@ \"%@'ed\" at: %@ on %@ (Occupancy: %@)", event.data.presence.uuid, event.data.presenceEvent, event.data.presence.timetoken, (event.data.actualChannel?: event.data.subscribedChannel), event.data.presence.occupancy); } else { NSLog(@"%@ changed state at: %@ on %@ to:\n%@", event.data.presence.uuid, event.data.presence.timetoken, (event.data.actualChannel?: event.data.subscribedChannel), event.data.presence.state); } } @end