Я работаю над реактивным приложением. Я пытаюсь передать события из собственного кода в собственный код реакции. Это работает в 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);
}
Ну, я понял это. Я перешел к использованию NativeEventEmitter вместо DeviceEmitter в своем реактивном коде. Теперь события подхватываются react-native как на Android, так и на iOS.
Можете ли вы предоставить код или пример того, как вы решили эту проблему?