Фоновый обработчик Firebase на iOS работает нестабильно (работает на Android)IOS

Программируем под IOS
Ответить
Anonymous
 Фоновый обработчик Firebase на iOS работает нестабильно (работает на Android)

Сообщение Anonymous »

Я создаю приложение для чата со сквозным шифрованием, используя Flutter.

Когда приходит push-уведомление Firebase, мой обработчик фоновых сообщений (_firebaseMessagingBackgroundHandler) подключается к моему серверу WebSocket, расшифровывает все ожидающие сообщения и сохраняет их в локальной базе данных SQLite.
Это прекрасно работает на Android, обработчик запускается каждый раз, даже когда приложение закрывается.
В iOS поведение непоследовательно:
  • Иногда фоновый обработчик выполняется нормально (подключается, расшифровывает, сохраняет)
  • В других случаях он никогда не срабатывает, даже если устройство получает нажатие
  • Четкой закономерности нет; какое-то время он может работать нормально, затем полностью перестать
Что я уже сделал:
  • Включены фоновые режимы → Удаленные уведомления и push-уведомления в Xcode
  • Правильно настроил Firebase и зарегистрировал фоновый обработчик
  • Проверено что VoIP и другие фоновые функции работают
Похоже, что iOS иногда ограничивает или блокирует мою фоновую работу для экономии ресурсов, но я не уверен.
Кто-нибудь сталкивался с этим при отправке только данных 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»