我正在检查AppDelegate.m
,RootViewController.m
和ViewControllerB.m
中收到的消息。
用户打开应用程序(首次启动 - 安装)后,注册然后登录,一切正常。 5秒或50分钟后(无关紧要)当前用户退出并来到新用户,该用户创建新帐户或使用现有配置文件登录。现在,当前用户(成功)向他自己的频道发送消息,但这次消息观察者不起作用,没有来自观察者的日志。但是,如果我从Xcode关闭应用程序并再次启动它,它将再次正常工作。
我确定这不是网络问题,因为历史记录包含我发送的每条消息,客户端每次都会连接。但遗憾的是,这些信息会让观察者感觉不存在。
我怀疑当用户退出并取消订阅他收听的频道时会发生问题。我曾经和removeMessageReceiveObserver:
一起尝试过,但没有帮助我。
这是我在用户注销时拆除订阅的方式:
if (cell == staticCell ) {
...
NSArray *unsubscribe = @[channel1, channel2];
//unsubscribe user from channels
[PubNub unsubscribeFromChannels:unsubscribe];
// remove observer and disconnect from PubNub.
[[PNObservationCenter defaultCenter] removeMessageReceiveObserver:self];
[PubNub disconnect]; // also tried without closing the connection
//log out user
[PFUser logOut];
[self presentLoginViewControllerAnimated:YES];
这是我的观察员:
// I'm using this in RootViewController.m and ViewControllerB.m
[[PNObservationCenter defaultCenter] addMessageReceiveObserver:self withBlock:^(PNMessage *message) {
if ([message.channel.name isEqualToString:my_channel] ) {
NSLog(@" message: %@ ", message.message);
}
// AppDelegate.m
- (void)pubnubClient:(PubNub *)client didReceiveMessage:(PNMessage *)message {
if ([message.channel.name isEqualToString:my_channel] ) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"New message"
message: messageContent delegate:self
cancelButtonTitle:@"Ok!"
otherButtonTitles:nil, nil];
[alertView show];
}
我错过了什么吗?在我取消订阅之前是否还有其他方法可以实施?
答案 0 :(得分:1)
您应该订阅要接收消息的频道。如果客户端没有看到消息,Observer将不会通知消息,因为您取消了消息。 PubNub 客户端将通知您订阅频道的新消息,如果没有频道,则不会有任何活动。