Android Native to React Native bridge

时间:2017-03-20 10:01:40

标签: android react-native native-module

我一直在寻找如何在React Native和Android Native代码之间建立桥梁一段时间,但我仍然不太明白。我已阅读文档here,但我不太明白。 我想要做的是,我想构建一个利用推送通知的应用程序,但由于我需要将消息推送到中国,我不能使用GCM(多亏了防火墙),所以我使用另一个第三方推送SDK

我设法将推送集成到我的应用中(每当我推送一些内容时都会产生console.log()消息),下一步是我想将其重新路由到某个页面

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

注意:如果您使用的是公共推送通知(即GCM和APNS),请改用this。由于我需要使用另一个第三方推送服务,我需要找到一种方法将SDK(本机)与React Native连接起来。

所以经过几个小时修补这个问题后,我找到了解决问题的方法。该解决方案分为两部分:

  1. emitter,只要服务器发送推送,就会发出一个事件。
  2. listener,这会听你之前发出的事件。
  3. <强>发射极

    这种情况发生在原生方面(在我的情况下是Android)

    对于这部分,我从this库使用GCM的方式中了解到了这一点。并在RN文档中找到了教程here

    基本上,在您收到推送SomeBroadCastReceiver onReceive()函数后,您可以将该包作为参数传递给此函数

    reactContext
      .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
      //this eventName is a key so you need to remember it, because you need to call it on the listener
      .emit(eventName, params);
    

    <强>听者

    听众将建立在RN方面。这个documentation帮助了我。之前我错过了这个文档,因为它只出现在RN iOS文档中。

    import { NativeEventEmitter, NativeModules } from 'react-native';
    //import your already created package name here
    const { YourCustomPackageName} = NativeModules;
    

    然后在ComponentWillMount()

    const yourCustomPackageEmitter = new NativeEventEmitter(YourCustomPackageName);
    pushListenerEmitter.addListener(eventName, this.handlePush, this);
    

    然后你只需要创建handlePush函数并获取参数

    handlePush = (event) => {
        console.log('event triggered..');
        console.log(event);
    }
    

答案 1 :(得分:0)

进行推送通知的最佳方法是深度链接。如果您使用的是React Navigation,则操作起来非常简单。 Deep Linking React Native 您可以定义唯一的URL(例如yorApp:// employee / 1),然后轻松导航至该屏幕。