Android Native для реагирования на собственный мост
Некоторое время я искал способ создания моста между кодом React Native и Android Native, но до сих пор не совсем понял. Я прочитал документацию здесь, но я не совсем понимаю. Я хочу создать приложение, использующее push-уведомления, но так как мне нужно отправить сообщение в Китай, я не могу использовать GCM (благодаря отличному брандмауэру), поэтому я использую другой сторонний push-SDK,
Мне удалось интегрировать толчок в мои приложения (в результате console.log()
сообщение, когда я что-то нажимаю), следующий шаг - я хочу перенаправить его на определенную страницу
Любая помощь будет оценена:)
1 ответ
Примечание. Если вы используете обычное push-уведомление (например, GCM и APNS), используйте его вместо этого. Так как мне нужно использовать другую стороннюю push-службу, мне нужно найти способ самостоятельно соединить SDK (который является нативным) с React Native.
Поэтому после нескольких часов работы с этой проблемой я нашел решение для своей проблемы. Это решение разделено на 2 части:
emitter
это будет генерировать событие всякий раз, когда сервер отправляет push.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, и легко перейти к этому экрану.