DeviceEventEmitter на iOS - PullRequest
       28

DeviceEventEmitter на iOS

0 голосов
/ 29 марта 2019

Я работаю над собственным приложением. Я пытаюсь передать события из нативного кода в мой реагирующий нативный код. Это работает в 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);
    }

1 Ответ

1 голос
/ 29 марта 2019

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

...