Android Firebase云消息传递(FCM):subscribeToTopic会自动重试吗?

时间:2016-10-16 10:55:06

标签: android firebase firebase-cloud-messaging

要订阅Android客户端中的主题,我们应该致电:

<script>

    $(document).ready(function() {

        $('#calendar').fullCalendar({

            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month,listYear',
            },

            views: {
                listMonth: {
                    titleFormat: 'MMMM'
                }
            },

            defaultView: 'listMonth',

            displayEventTime: false, // don't show the time column in list view

            // THIS KEY WON'T WORK IN PRODUCTION!!!
            // To make your own Google API key, follow the directions here:
            // http://fullcalendar.io/docs/google_calendar/
            //googleCalendarApiKey: 'AIzaSyDcnW6WejpTOCffshGDDb4neIrXVUA1EAE',

            // US Holidays
            //events: 'en.usa#holiday@group.v.calendar.google.com',
                   events: [
    <?php if( $events->have_posts() ) :
        while ($events->have_posts()) : $events->the_post();
            $event_dates = get_post_meta(get_the_id(), 'date', true);
            $event_info = get_post_meta(get_the_id(), 'info', true);
            //foreach($event_dates as $event_date):
     ?>
        {

                    title: '<?php the_title(); ?>',
                    start: '<?php echo date('Y-m-d', strtotime($event_dates["start_date_time"])); ?>',
                    description: '<?php echo date('ga', strtotime($event_dates["start_date_time"])).', '.$event_info["venue"].', '.$event_info["place"]; ?>'
        },
    <?php endwhile; ?>
    <?php endif; ?>
        // more events here
    ],
    eventRender: function(event, element, view) {
        return $('<tr><td>' + event.description + '</td></tr>');
    },


            eventClick: function(event) {
                // opens events in a popup window
                window.open(event.url, 'gcalevent', 'width=700,height=600');
                return false;
            },

            loading: function(bool) {
                $('#loading').toggle(bool);
            }

        });

    });
</script>

我想知道如果此指令执行时互联网连接不可用会发生什么?

当互联网连接可用时,Google服务会自动重试订阅吗?或者开发人员应该处理此案例?

1 个答案:

答案 0 :(得分:3)

<强>更新

subscribeToTopic()现在返回Task<Void>,因此您可以附加OnCompleteListener()以检查其是否成功。

<强>更新

根据@ DiegoGiorgini在你之前的帖子中的评论,似乎还有更多订阅ToTopic:

  

subscribeToTopic将继续在后台重试,但它与您的应用生命周期(而不是谷歌服务)相关联。因此,如果您的应用程序被终止,它将停止重试,直到应用程序再次打开。 (存储操作,以便在再次启动应用程序时恢复该操作)

我之前尝试过的方式是在给定的时间段之后,我将会杀死该应用并且不会再将其拉出来。

所以我试过检查一下。似乎如果设备在发送订阅请求时处于脱机状态,它将重新尝试一段时间(20-30秒左右?)然后如果仍未连接则将停止。该请求可能已达到超时错误。但由于subscribeToTopic()没有返回值,因此您无法通过客户端应用确定此值。如果您愿意,可以发送Feature Request,与此相关。

然而,截至目前,我认为您可以做的一种方法是在您的客户端应用中设置检查器,如果只有设备在线,您将发送请求。

您也可以通过我的previous post中提及的应用服务器进行检查。