Когда приходит push-уведомление Firebase, мой обработчик фоновых сообщений (_firebaseMessagingBackgroundHandler) подключается к моему серверу WebSocket, расшифровывает все ожидающие сообщения и сохраняет их в локальной базе данных SQLite.
Это прекрасно работает на Android, обработчик запускается каждый раз, даже когда приложение закрывается.
В iOS поведение непоследовательно:
- Иногда фоновый обработчик выполняется нормально (подключается, расшифровывает, сохраняет)
- В других случаях он никогда не срабатывает, даже если устройство получает нажатие
- Четкой закономерности нет; какое-то время он может работать нормально, затем полностью перестать
- Включены фоновые режимы → Удаленные уведомления и push-уведомления в Xcode
- Правильно настроил Firebase и зарегистрировал фоновый обработчик
- Проверено что VoIP и другие фоновые функции работают
Кто-нибудь сталкивался с этим при отправке только данных Firebase на iOS?
Есть ли надежный способ разбудить приложение для синхронизации и расшифровки сообщений, или это известное ограничение iOS?
В моем main.dart есть это:
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
@pragma('vm:entry-point')
Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
try {
WidgetsFlutterBinding.ensureInitialized();
DartPluginRegistrant.ensureInitialized();
await Firebase.initializeApp();
final ok = await _bootstrapBackground()
.timeout(const Duration(seconds: 20), onTimeout: () => false);
if (!ok) return;
await websocketServices.connect();
// decrypt + save to DB here (omitted)
} catch (_) {
} finally {
await websocketServices.close();
}
}
Future _bootstrapBackground() async {
for (var attempt = 1; attempt Bool {
FirebaseApp.configure()
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self
}
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
и вот как мой сервер отправляет уведомления, которые в настоящее время предназначены для тестирования.
Message message = Message.builder()
.setToken("")
.putData("type", "chat_message")
.putData("chatId", "")
.setApnsConfig(ApnsConfig.builder()
.putHeader("apns-push-type", "alert")
.putHeader("apns-priority", "10")
.putHeader("apns-topic", "")
.putHeader("apns-collapse-id", "chat:")
.setAps(Aps.builder()
.setMutableContent(true)
.setAlert(ApsAlert.builder().setTitle("New message").setBody("...").build())
.build())
.build())
.build();
Подробнее здесь: https://stackoverflow.com/questions/798 ... on-android
Мобильная версия