Реактивное push-уведомление onNotification не запускается

Я использую библиотеку zo0r реагировать-родной-push-уведомлений.

"react": "16.0.0-alpha.12",
"react-native": "^0.45.1",
"react-native-push-notification": "^3.0.0"

Этот код запускается каждый раз, когда я открываю приложение:

PushNotification.configure({
    onNotification: function(notification) {
        console.log('onNotification');
        ToastAndroid.show('onNotification', 3000);
    }
});

Я отправляю локальное push-уведомление из фоновой службы:

PushNotification.localNotification({
    message: 'Hello World',
    smallIcon: 'ic_launcher'
});

Уведомление доставлено. Когда я нажимаю на нее, onNotification метод не вызывается, тогда, когда я получаю другое уведомление, он на самом деле вызывается. Кажется, что это работает, только если приложение находится в памяти атм.

Я делаю что-то неправильно?

Я также открыл вопрос GitHub.

2 ответа

Решение

Это специально написано, чтобы не помещать конфигурацию в жизненный цикл React. В противном случае Android не будет иметь правильного поведения (у меня была такая большая боль с этим пунктом!). Здесь у вас есть хороший учебник: https://product.farewell.io/visible-react-native-push-notifications-that-work-on-both-ios-and-android-5e90badb4a0f Это плохо объяснено, но подход идеально. Используйте класс для инициализации и вызова методов. Инициализируйте класс в верхнем компоненте, как он предлагает. Работает хорошо. Заполните недостающую информацию с помощью этого учебного пособия: https://shift.infinite.red/react-native-node-js-and-push-notifications-e851b279a0cd Удачи!

Это общая проблема, проблема возникает при использовании экрана-заставки. Отредактируйте манифест следующим образом:

<activity
            android:name=".SplashActivity"
            android:theme="@style/SplashTheme"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustResize" >
          <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.INFO" />
          </intent-filter>
        </activity>

В моем коде я настроил уведомления снаружи App класс - это была проблема. Я просто переместил конфигурацию в конструктор приложения, и теперь она работает просто отлично, onNotification вызывается без проблем:

class App extends React.Component {
    constructor(props) {
        super(props);
        PushNotification.configure({ ... });
    }
}

В моем случае я следил за всем в соответствии с документом, включая жизненный цикл React для Android, за исключением изменения ниже, где я не настраивал правильное действие фильтра намерений, т.е.

<action android:name="com.google.firebase.MESSAGING_EVENT" />

Внесите изменения ниже, и это должно сработать

<service android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationListenerService" android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Раньше я использовал это действие, потому что слушатель не запускал

<action android:name="com.google.android.c2dm.intent.RECEIVE" />
Другие вопросы по тегам