【问题标题】:PubNub delay to receive message from subscribed channel (Android)从订阅频道接收消息的 PubNub 延迟(Android)
【发布时间】:2016-12-21 12:49:03
【问题描述】:

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

当它刚刚连接并订阅频道时,它可以立即从订阅的频道接收消息,但如果我在几分钟后离开,我将无法再收到消息,有时消息会到达。

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

【问题讨论】:

    标签: android pubnub


    【解决方案1】:

    您似乎使用了过时的 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();
    

    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();
    }
    

    那就是它。尝试使用他们的调试控制台来查看延迟是否来自您发送消息的位置。

    【讨论】:

    • 完全正确,我使用的是旧版本的 PubNub Android SDK。谢谢!
    • 澄清一下,重新连接呼叫不算作任何形式的消息?因为这样可以安全地循环直到重新连接而不用完任何消息使用限额?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多