Уведомление Firebase, поддерживаемое React, появляется много раз и пустой заголовок - PullRequest
0 голосов
/ 16 июня 2020

Я реализовал облачный обмен сообщениями firebase. У меня есть тест на https://console.firebase.google.com и на Postman, следуя руководству из Реализовать Pu sh Уведомление с Firebase в React Native и React Native Firebase Cloud Messaging (FCM) Pu sh Уведомление .

Обе статьи действительно полезны для реализации firebase в react-native, поскольку я ищу реализацию облачных сообщений firebase в react-native cli.

Но есть две вещи, связанные с уведомлением firebase, которые похоже на ошибку в моем приложении. Когда я отправляю сообщение с консоли, когда мое приложение открыто, оно отображается как предупреждение. Когда я нажимаю ОК, оно повторяется примерно 10 раз. См. Gif ниже или потоковое видео Gif : -

Gif Image

Во-вторых, если я закрываю приложение, и я отправить новое сообщение, оно появится в панели уведомлений. Когда я нажимаю сообщение с уведомлением, оно открывает ПРИЛОЖЕНИЕ и снова появляется ПРЕДУПРЕЖДЕНИЕ, но с пустым содержимым. Ни заголовок, ни текст не отображались.

Ниже мой скрипт в приложении. js: -

import 'react-native-gesture-handler';
import React, { Component } from 'react';
import { Alert, View } from "react-native";
import AsyncStorage from '@react-native-community/async-storage';
import firebase from "react-native-firebase";
import { createSwitchNavigator, createAppContainer } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';
import InitSplash from './src/screens/init/InitSplash';
import InitAuthentication from './src/screens/init/InitAuthentication';
import AlreadyLogin from './src/screens/handler/AlreadyLogin';
import MainTabs from './src/components/AppTabs';
const AuthStack = createStackNavigator(
  {
    InitAuthentication: { screen: InitAuthentication },
    .
    .
    .
    . etc
  },
  {
    initialRouteName: 'InitAuthentication',
  }
);
const DashboardStack = createStackNavigator(
  {
    MainTabs: { screen: MainTabs, navigationOptions: { headerShown: false } },
    .
    .
    .
    . etc
  },
  {
    initialRouteName: 'MainTabs',
  }
);
const AppSwitchNavigator = createSwitchNavigator(
  {
    MainSplash: { screen: InitSplash, },
    AlreadyLogin: { screen: AlreadyLogin },
    MainAuth: { screen: AuthStack, },
    MainDashboard: { screen: DashboardStack },
  }
);
const AppContainer = createAppContainer(AppSwitchNavigator);
class App extends Component {
  async componentDidMount() {
    this.checkPermission();
    this.createNotificationListeners();
  }
  async checkPermission() {
    const enabled = await firebase.messaging().hasPermission();
    if (enabled) {
      this.getToken();
    } else {
      this.requestPermission();
    }
  }
  async getToken() {
    let fcmToken = await AsyncStorage.getItem('fcmToken');
    if (!fcmToken) {
      fcmToken = await firebase.messaging().getToken();
      if (fcmToken) {
        await AsyncStorage.setItem('fcmToken', fcmToken);
      }
    }
  }
  async requestPermission() {
    try {
      await firebase.messaging().requestPermission();
      this.getToken();
    } catch (error) {
      console.log('permission rejected');
    }
  }
  createNotificationListeners = async () =>  {
    this.notificationListener = firebase.notifications().onNotification((notification) => {
      console.log('notificationListener: ' + JSON.stringify(notification));
      const { title, body } = notification;
      this.displayNotification(title, body);
    });
    this.notificationOpenedListener = firebase.notifications().onNotificationOpened((notificationOpen) => {
      console.log('notificationOpenedListener: ' + JSON.stringify(notificationOpen));
      const { title, body } = notificationOpen.notification;
      this.displayNotification(title, body);
    });
    const notificationOpen = await firebase.notifications().getInitialNotification();
    if (notificationOpen) {
      console.log('notificationOpen: ' + JSON.stringify(notificationOpen.notification));
      const { title, body } = notificationOpen.notification;
      this.displayNotification(title, body);
    }
    this.createNotificationListeners = firebase.messaging().onMessage((message) => {
      console.log('createNotificationListeners'+JSON.stringify(message));
    });
  }
  displayNotification(title, body) {
    Alert.alert(
      title, body,
      [
        { text: 'Ok', onPress: () => console.log('ok pressed') },
      ],
      { cancelable: false },
    );
  }
  render() {
    return (<AppContainer />);
  }
}
export default App;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...