iOS上的DeviceEventEmitter

时间:2019-03-29 08:02:37

标签: android ios reactjs react-native deviceeventemitter

我正在开发本机应用程序。我正在尝试从本机代码向我的本机代码发出事件。这可以在Android上使用,但在iOS上很挣扎。

我正在成功侦听从本机Android代码发送的事件。但是,当在iOS上运行时,我的react native应用并没有“挑剔”相同的事件,并试图找出原因。

我有连接到MQTT代理的代码。该代码是为iOS和Android本机编写的。在连接过程中,我会将连接状态从本机代码发送到react-native。这在Android上运行良好。使用reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName,eventString)方法从我的Android代码发送的事件达到了我的React本机代码。但是,在我的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)

好吧,我知道了。我继续在我的本机代码中使用NativeEventEmitter而不是DeviceEmitter。现在,事件由本机在Android和iOS上捕获。