Эта общая проблема также существует при написании собственных приложений-маяков для iOS или Android. Решение состоит в том, что вы должны настроить свой «крючок», который включает мониторинг маяка и добавляет прослушиватель событий (или обратный вызов делегата / уведомления, как он вызывается в собственном коде) в соответствующем месте для платформы:
iOS: AppDelegate.didFinishLanching(options: )
Android: Application.onCreate()
Ключ в том, что эта настройка должна быть завершена до возврата этих методов.
Это же правило применяется к ReactNative. Уловка с ReactNative заключается в том, что по умолчанию JavaScript не запускается для этих событий - он запускается только при запуске экрана, что слишком поздно настраивает ловушку, чтобы вышеуказанное сработало, когда ваше приложение убито. Чтобы это сработало, вам нужно будет удалить приложение, чтобы вы могли настроить собственный нативный код в вышеупомянутых обратных вызовах.
Два варианта:
- Реализация обнаружения маяков изначально (проще всего, но требует собственного кодирования для каждой платформы)
- Добавьте собственный код в вышеупомянутые собственные обратные вызовы, который запускает
RCTBridge
на iOS и запускает представление, которое выполняет код, который запускает наш код JavaScript для настройки обнаружения маяков. В Android эквивалент будет состоять в создании новых ReactRootView и ReactNativeInstanceManager таким образом, чтобы он вызывал ваш код JavaScript для настройки обнаружения маяков.
Я лично не проверял вариант 2, чтобы посмотреть, сможет ли он установить крючки достаточно быстро. Если это сработает, это, безусловно, будет сложнее, чем собственное решение, но позволит вам сохранить логику обнаружения маяков в JavaScript.