Android Native для реагирования на собственный мост

Некоторое время я искал способ создания моста между кодом React Native и Android Native, но до сих пор не совсем понял. Я прочитал документацию здесь, но я не совсем понимаю. Я хочу создать приложение, использующее push-уведомления, но так как мне нужно отправить сообщение в Китай, я не могу использовать GCM (благодаря отличному брандмауэру), поэтому я использую другой сторонний push-SDK,

Мне удалось интегрировать толчок в мои приложения (в результате console.log() сообщение, когда я что-то нажимаю), следующий шаг - я хочу перенаправить его на определенную страницу

Любая помощь будет оценена:)

1 ответ

Решение

Примечание. Если вы используете обычное push-уведомление (например, GCM и APNS), используйте его вместо этого. Так как мне нужно использовать другую стороннюю push-службу, мне нужно найти способ самостоятельно соединить SDK (который является нативным) с React Native.

Поэтому после нескольких часов работы с этой проблемой я нашел решение для своей проблемы. Это решение разделено на 2 части:

  1. emitterэто будет генерировать событие всякий раз, когда сервер отправляет push.
  2. listener, это будет слушать событие, которое вы излучаете раньше.

эмиттер

Это происходит на родной стороне (Android в моем случае)

В этой части я узнал, как эта библиотека использовала 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. эта документация мне помогает. Я пропустил эту документацию раньше, потому что она появляется только в документации 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);
}

Лучший способ сделать push-уведомление - это Deep Linking. Если вы используете React Navigation, это очень просто сделать. Deep Linking React Native Вы можете определить уникальный URL-адрес, например, yorApp://employee/1, и легко перейти к этому экрану.

Другие вопросы по тегам