Облачные сообщения Firebase: случайная задержка между отправкой и получением сообщения? - PullRequest
0 голосов
/ 27 декабря 2018

В настоящее время я работаю над приложением Android для школы.По сути, одна из его целей - чтобы вы и ваши друзья могли найти друг друга на карте.Для этого мы используем Firebase Cloud Messaging.Я следовал учебному пособию, предоставленному Google , и все, кажется, работает нормально.

Я настроил FirebaseMessagingService, как показано в учебном пособии, переопределяя onNewToken, onMessageReceived и onMessageDeleted.Токен сохраняется в нашей школьной базе данных, поэтому в режиме реального времени я могу проверить, какие учетные записи связаны с каким токеном Firebase, что позволяет мне тестировать устройство с помощью консоли FCM.

Вот здесь и возникает проблема: я получаю сообщения, но есть какая-то случайная задержка.Иногда сообщения приходят мгновенно, а иногда нам приходится ждать более 20 минут, даже не зная, происходит ли проблема в нашей реализации или в Firebase.Мы абсолютно не знаем, почему появляется такая задержка.Иногда мы просто думаем, что наше приложение не работает, и делаем что-то еще, но затем мы возвращаемся в Android Studio и видим, что приложение получило все ожидающие сообщения одновременно.

Вот мое объявление службы в манифесте:

<service android:name=".domains.FirebaseService" android:enabled="true">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
</service>

А вот моя реализация FirebaseMessagingService

public class FirebaseService extends FirebaseMessagingService {

    [...]        

    @Override
    public void onNewToken(String token) {
        // Save on DB
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Map<String, String> data = remoteMessage.getData();
        if(data.size() > 0) {
            // Do stuff
        }
    }

    [...]
}

Так что это кажется довольно логичным, здесь нет ничего фантастического.Тем не менее, задержка перед получением любого сообщения является полностью случайной и, похоже, не связана с состоянием службы.

Опять же, проблема возникает даже при отправке сообщения с консоли Firebase, поэтому я думаю, что мы можемсмело исключайте возможность того, что проблема связана с отправкой сообщения, поскольку, в конце концов, приложение получает 80% времени сообщения.

Поскольку я получаю сообщения, я не думаю, что проблема действительно возникаетиз службы ... Может я ошибаюсь?

Кроме того, я почти уверен, что токен Firebase не меняется до и после отправки сообщения, что объясняет, почему устройство не меняется.получить сообщение.

Есть ли у вас какие-либо идеи, откуда может возникнуть эта задержка?Мы искали по всему интернету, чтобы найти решение, не найдя ответа.

Заранее спасибо.

РЕДАКТИРОВАТЬ: Для чего это стоит, яотправляю каждое сообщение с помощью токена Firebase устройства, и в нашем случае мы используем эмулятор, так что, возможно, это может быть причиной того, что он не работает нормально.

РЕДАКТИРОВАТЬ 2: Как я упоминал в комментариях ниже, наша школа ожидает, что мы будем использовать FCM и больше ничего, поэтому нам нужно заставить его работать с ним.

1 Ответ

0 голосов
/ 29 декабря 2018

Поскольку мой телефон - картофель, я не смогу установить на него свое приложение.До сих пор.И теперь, когда код работает на моем телефоне и не использует эмулятор, все работает отлично.Задержка прошла, и все сообщения получены мгновенно.

Что меня удивляет, так это то, что я настроил свой эмулятор так, как должно быть (с сервисами Google Play и т. Д.) И сделал то, что было необходимо, чтобы убедиться в этомне было проблем.Поискав в Интернете, я не смог найти ни одной темы, говорящей на эту тему, а не просто установить службы Google Play на эмуляторе (что уже было сделано).

Итак, на случай, если ваш эмулятор не 'Если вы не получаете никаких push-уведомлений, или случается, что перед их получением возникает какая-то случайная задержка, вам лучше попробовать приложение на реальном устройстве.

Большое спасибо @madlymad и @AL.за попытку помочь мне решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...