Контекст приложения React Native - PullRequest
0 голосов
/ 18 июня 2020

Я а, разработка приложения с использованием react Native версии 0.59.10 и react-native-navigation версии 1.1.493. Я использовал MobX для управления состоянием.

В настоящее время я пытаюсь интегрировать собственный SDK, который отслеживает сеансы вождения пользователя.

Перед инициализацией SDK запрашивает у пользователя разрешения на местоположение.

После инициализации SDK он транслирует событие на уровень JS, используя следующий код:

fun notifyJS(
  context: Context?,
  receiver: BroadcastReceiver,
  eventName: String,
  data: WritableMap?
) {
  val reactApplication = context?.applicationContext as? ReactApplication
  val instanceManager = reactApplication?.reactNativeHost?.reactInstanceManager
  val reactContext = instanceManager?.currentReactContext
  if (reactContext != null) {
    Log.d(
      LOG_TAG,
      "React context is available, sending event $eventName"
    )
    reactApplication.reactNativeHost?.reactInstanceManager?.currentReactContext?.getJSModule(
      DeviceEventManagerModule.RCTDeviceEventEmitter::class.java
    )?.emit(eventName, data)
  } else {
    Log.d(LOG_TAG, "React context is not available")
    val pendingResult = receiver.goAsync()
    instanceManager!!.addReactInstanceEventListener(
      object : ReactInstanceManager.ReactInstanceEventListener {
        override fun onReactContextInitialized(reactContext: ReactContext) {
          Log.v(
            LOG_TAG,
            "React context is initialized sending js event $eventName"
          )
          reactContext.getJSModule(
            DeviceEventManagerModule.RCTDeviceEventEmitter::class.java
          )?.emit(eventName, data)
          instanceManager.removeReactInstanceEventListener(this)
          pendingResult.finish()
        }
      })
    instanceManager.createReactContextInBackground()
    Log.d(LOG_TAG, "Called to create context in the background")
  }
}

в этот момент переменная responseContext всегда имеет значение null, даже если приложение находится в передний план, который заставляет приложение перезапускаться.

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

Итак, я предполагаю, что есть вероятность того, что, возможно, этот код получит неправильный контекст ...?

Мое приложение использует некоторые другие сторонние библиотеки, и это текущий пакет. json файл

"dependencies": {
    "@appdynamics/react-native-agent": "^1.0.223",
    "@types/react": "^16.9.1",
    "@types/react-native": "^0.57.65",
    "babel-plugin-macros": "^2.6.1",
    "bugsnag-react-native": "^2.19.1",
    "cross-env": "^6.0.3",
    "fsevents": "^2.1.3",
    "intent-router": "0.0.13",
    "mobx": "3.3.1",
    "mobx-react": "4.3.3",
    "moment": "^2.24.0",
    "moment-timezone": "^0.5.26",
    "react": "16.8.3",
    "react-native": "0.59.10",
    "react-native-audio": "^4.1.3",
    "react-native-base64": "^0.0.2",
    "react-native-cardview": "^1.1.5",
    "react-native-chart-kit": "^5.5.0",
    "react-native-circular-progress": "^1.3.6",
    "react-native-communications": "^2.2.1",
    "react-native-config": "^0.11.7",
    "react-native-device-info": "^2.3.2",
    "react-native-doc-viewer": "^2.7.8",
    "react-native-document-picker": "^3.2.4",
    "react-native-fetch-blob": "^0.10.8",
    "react-native-firebase": "^5.5.6",
    "react-native-image-picker": "^0.26.7",
    "react-native-maps": "0.25.0",
    "react-native-mime-types": "^2.2.1",
    "react-native-navigation": "1.1.493",
    "react-native-open-settings": "^1.0.1",
    "react-native-pages": "^0.9.0",
    "react-native-render-html": "^4.1.2",
    "react-native-restart": "^0.0.12",
    "react-native-settings": "^0.1.1",
    "react-native-signature-capture": "^0.4.9",
    "react-native-snackbar": "^2.2.0",
    "react-native-sound": "^0.10.9",
    "react-native-splash-screen": "^3.2.0",
    "react-native-svg": "^12.1.0",
    "react-native-swipe-list-view": "^3.0.1",
    "react-native-swipeable": "^0.6.0",
    "react-native-swiper": "^1.5.14",
    "react-native-timer": "^1.3.6",
    "react-native-zendrive": "latest",
    "typescript": "^3.5.3",
    "victory-native": "^34.1.0"
  }

В моем тестировании, чтобы выяснить, что вызывает такое поведение попытался удалить библиотеки из моего кода, даже когда я загрузил только: ReactNativePackage, ReactNativeConfigPackage и RNNPackage, чтобы возникали проблемы, поэтому я довольно сильно думаю, что проблема связана с использованием response-native-навигации.

Итак, я попробовал чтобы создать новое черное приложение для воспроизведения этой проблемы, но в совершенно новом приложении (та же самая реакция-native и версия rnn) проблема не воспроизводится. Поэтому я предполагаю, что со временем при разработке приложения некоторые конфигурации и исправления были помещены где-то в коде.

Мне очень трудно отлаживать и определять причину этой проблемы

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