DeviceEventEmitter на iOS

Я работаю над реактивным приложением. Я пытаюсь передать события из собственного кода в собственный код реакции. Это работает в Android, но не работает с iOS.

Я успешно прослушиваю события, отправляемые из моего собственного кода Android. Однако те же события не «подхватываются» моим родным приложением React при работе на iOS и пытаются выяснить, почему.

У меня есть код, который подключается к брокеру MQTT. Код написан нативно для iOS и Android. В процессе подключения я отправляю статус подключения из своего нативного кода в react-native. Это хорошо работает на Android. Событие, отправляемое из моего кода Android с помощью метода reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, eventString), достигает моего собственного кода реакции, как и ожидалось. Однако в моем коде iOS сообщения, переданные с помощью метода sendEvent(), отправляются, но я не получаю их в своем коде, отвечающем за реакцию. Я даже получаю желтое предупреждение в своем эмуляторе iOS о том, что «Отправка Status без зарегистрированных слушателей. Мой класс Swift, который отправляет событие, расширяет класс RCTEventEmitter.

Надеюсь, это все детали, которые нужны людям, чтобы помочь. У меня мало опыта использования DeviceEventEmitter и очень мало опыта работы со Swift и iOS. В основном парень с Android, так что это немного сбивает с толку. Я предполагаю, что это на самом деле очень просто, но я немного потерян.

this.handleMqttStatusChange = this.handleMqttStatusChange.bind(this);
DeviceEventEmitter.addListener("Status", this.handleMqttStatusChange);

Следующий код Swift отправляет событие.

self.sendEvent(withName: "Status", body: ["status":"Connecting"]);

Класс Swift, отправляющий событие, расширяет RCTEventEmitter.

class AwsIotModule: RCTEventEmitter {

Мой файл Android Java расширяет ReactContextBaseJavaModule.

public class AwsIotModule extends ReactContextBaseJavaModule {

И для отправки событий используется следующий метод Java.

private void sendEvent(ReactContext reactContext,
                           String eventName,
                           @Nullable WritableMap params) {
        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit(eventName, params);
    }
1
0
1 263
1

Ответы 1

Ну, я понял это. Я перешел к использованию NativeEventEmitter вместо DeviceEmitter в своем реактивном коде. Теперь события подхватываются react-native как на Android, так и на iOS.

Можете ли вы предоставить код или пример того, как вы решили эту проблему?

CraZyDroiD 29.10.2021 09:09

Другие вопросы по теме

Как исправить ошибку Domain=NSCocoaErrorDomain Code=3840 «Недопустимое значение вокруг символа 52»
Что такое @dynamicCallable в Swift?
Требовать строку цели для сборки iOS «TestFlight»
Увеличьте зазор между двумя метками точек на линейной диаграмме
Как реализовать расширения поставщика учетных данных для автозаполнения — iOS 11, swift4
Как проверить приложение, работающее на переднем или заднем плане в Cordova, особенно на платформе ios (у меня не работают onResume и onPause)
Функция более высокого порядка sort() использовала ее с другой функцией более высокого порядка, она также работала с контентом let
Как проверить, вошел ли пользователь в учетную запись Google в Swift?
GMSPlacePickerViewController всегда возвращает ошибку — для вашего ключа API настроено ограничение для каждого IP-адреса или реферера
Невозможно вызвать инициализатор для типа "String" со списком аргументов типа "(RemoteConfigValue)"