Android Native 到 React Native 的桥梁

Android Native to React Native bridge

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

我已经成功地将推送集成到我的应用程序中(每当我推送某些内容时都会出现 console.log() 消息),下一步是我想将其重新路由到特定页面

任何帮助将不胜感激:)

注意:如果您使用的是普通推送通知(即 GCM 和 APNS),请改用 this。由于我需要使用另一个第三方推送服务,我需要自己找到一种方法将 SDK(原生)桥接到 React Native。

经过几个小时的修改,我找到了解决问题的方法。此解决方案分为两部分:

  1. emitter,每当服务器发送推送时,这将发出一个事件。
  2. listener,这会监听你之前发出的事件。

发射器

这发生在原生端(Android 在我的例子中)

对于这部分,我是从 this 库如何使用 GCM 中学到的。并在 此处 找到了关于 RN 文档的教程。

基本上,在您收到 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);
}

推送通知的最佳方式是深层链接。如果您正在使用 React Navigation,那么操作起来非常简单。 Deep Linking React Native 您可以像 yorApp://employee/1 一样定义唯一的 URL 并轻松导航到该屏幕。