Я работаю над собственным приложением. Я пытаюсь передать события из нативного кода в мой реагирующий нативный код. Это работает в Android, но борется с iOS.
Я успешно слушаю события, отправленные из моего собственного кода Android. Однако те же события не «подхватывают» мое реагирующее нативное приложение при работе на iOS и пытаются выяснить, почему.
У меня есть код, который подключается к MQTT-брокеру. Код написан изначально для iOS и Android. Во время процесса подключения я отправляю статус подключения из моего исходного кода в реактивный. Это хорошо работает на Android. Событие, отправляемое из моего кода Android с использованием responseContext.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);
}