PubNub延迟接收来自订阅频道的消息(Android)

Bui*_*Huy 1 android pubnub

我正在将Android SDK集成到我的应用程序中,并按照本教程订阅并发布消息到频道:https://www.pubnub.com/docs/android-java/data-streams-publish-and-subscribe

当它只是连接并订阅频道时,它可以立即从订阅频道接收消息但是如果我在几分钟内离开它,我就不能再收到消息了,有时候消息会到达.

我使用方法successCallback(String channel,Object message)来接收和处理消息.那么有人像我一样得到这个问题吗?

ago*_*st_ 6

似乎您使用的是过时的SDK版本.尝试使用最新版本4.3.0

我就这样实现它

 PNConfiguration pnConfiguration = new PNConfiguration();
        pnConfiguration.setSubscribeKey(youKey);
        pnConfiguration.setReconnectionPolicy(PNReconnectionPolicy.LINEAR);

        pubnub = new PubNub(pnConfiguration);
        pubnub.addListener(this);
        pubnub.subscribe()
            .channels(Arrays.asList(channel))
            .execute();
Run Code Online (Sandbox Code Playgroud)

PNReconnectionPolicy.LINEAR 在断开连接时自动重新连接和接收消息很有用(并且它发生了很多)

那么我的类实现SubscribeCallback如下:

@Override
public void unsubscribeAndDisconnect() {
    pubnub.destroy();
}


@Override
public void status(PubNub pubnub, PNStatus status) {
    switch (status.getCategory()) {
        case PNConnectedCategory:
            logger.debug("Pubnub Connected");
            break;
        case PNReconnectedCategory:
            logger.debug("Pubnub reconnected");
            break;
        case PNDisconnectedCategory:
            logger.debug("Pubnub disconnected");
            break;
        case PNUnexpectedDisconnectCategory:
            logger.debug("Pubnub Unexcpected disconnect");
            pubnub.reconnect();
            break;
        case PNTimeoutCategory:
            logger.debug("Pubnub Timeout");
            pubnub.reconnect();
            break;
        default:
            logger.debug("Pubnub " + status.getCategory().name());
            break;
    }
}


@Override
public void message(PubNub pubnub, PNMessageResult message) {
    if (message.getMessage() != null) {
        String msg = message.getMessage().toString();
        //do what you want with the received message
    }
}

@Override
public void presence(PubNub pubnub, PNPresenceEventResult presence) {
  //not used in my case
}

  @Override
public void unsubscribeAndDisconnect() {
    pubnub.destroy();
}
Run Code Online (Sandbox Code Playgroud)

而且它.尝试使用他们的调试控制台,以查看延迟是否来自您发送消息的位置.