В настоящее время я работаю над приложением 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 и больше ничего, поэтому нам нужно заставить его работать с ним.