有两种情况:
您需要做的是在这些事件发生时得到通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(appWillResignActive)
name:UIApplicationWillResignActiveNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(appWillTerminate)
name:UIApplicationWillTerminateNotification
object:nil];
现在,在相应的方法中,使用 PubNub 的 API 设置状态
-(void)appWillResignActive
{
// Sample dictionary
NSDictionary *dicState = @{ @"userName" : senderName, // Optional
@"status" : @"Away", // Or whatever
@"isTyping" : @FALSE // Optional
};
[AppDel.client setState: dicState
forUUID: senderId // current user's UUID
onChannel: KPubNubChannelName // channel name
withCompletion: ^(PNClientStateUpdateStatus *status)
{
NSLog(@"%@", status);
}];
}
一旦 PubNub 上的状态更新,该频道的所有订阅者都会收到通知,即会调用以下方法:
- (void)client:(PubNub *)client didReceivePresenceEvent:(PNPresenceEventResult *)event
{
if (![event.data.channel isEqualToString:event.data.subscription])
{
// Presence event has been received on channel group stored in event.data.subscription.
}
else
{
// Presence event has been received on channel stored in event.data.channel.
}
if (![event.data.presenceEvent isEqualToString:@"state-change"]) {
NSLog(@"%@ \"%@'ed\"\nat: %@ on %@ (Occupancy: %@)", event.data.presence.uuid,
event.data.presenceEvent, event.data.presence.timetoken, event.data.channel,
event.data.presence.occupancy);
}
else {
NSLog(@"%@ changed state at: %@ on %@ to: %@", event.data.presence.uuid,
event.data.presence.timetoken, event.data.channel, event.data.presence.state);
}
}
当它被调用时,您必须相应地更新您的数据源,这将反映状态更新。