在取消订阅频道后,消息接收观察者无法正常工作

时间:2014-07-22 19:04:06

标签: ios objective-c pubnub

我正在检查AppDelegate.mRootViewController.mViewControllerB.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];

}

我错过了什么吗?在我取消订阅之前是否还有其他方法可以实施?

1 个答案:

答案 0 :(得分:1)

您应该订阅要接收消息的频道。如果客户端没有看到消息,Observer将不会通知消息,因为您取消了消息。 PubNub 客户端将通知您订阅频道的新消息,如果没有频道,则不会有任何活动。