где использовать firebase onDisconnect в реагировать на натив - PullRequest
1 голос
/ 12 октября 2019

Я работаю над тестовым приложением с native-реагированием и firebase. Я хочу реализовать статус присутствия, обновляя поле в документе пользователя, когда приложение закрыто. Тем не менее, я не знаю, где применить разъединение, но я предположил, что это будет в App.js в componentWillUnmount. Я новичок в том, чтобы реагировать как на родную, так и на базовую версию, будь добр, направь меня, если я ошибаюсь. ниже показано, как я реализовал это в своем App.js, но он не работает. Кроме того, я показал код, относящийся только к этой проблеме.

App.js

      import { Firebase } from './Fire';


      export default class App extends React.Component {
        constructor(props) {
          super(props);
          this.state = {
            offline: 'offline',
          };
        }

        componentWillMount() {
          Firebase.init();
        }

        async componentWillUnmount() {
          const userUid = await Firebase.auth.currentUser.uid;

          const docRef = Firebase.firestore.collection('users').doc(userUid);
          const disconnectRef = docRef.onDisconnect().update({
            presenceStatus: this.state.offline
          });
        }

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Вы, кажется, путаете две базы данных Firebase здесь:

  • База данных реального времени является исходной базой данных Firebase. Он поддерживает обнаружение, когда клиент отключается от сервера, и выполнение операции через его обработчик onDisconnect.

  • Cloud Firestore - более новая база данных в Firebase. Он имеет совершенно другую модель масштабируемости и использует протокол без установления соединения для связи между клиентами и серверами. По этой причине он не поддерживает обработчик onDisconnect.

Так что если вы хотите использовать onDisconnect, вам нужно будет использовать базу данных Firebase Realtime Database,Вы можете использовать это в дополнение к Cloud Firestore или в качестве альтернативы.

1 голос
/ 12 октября 2019

Вы можете использовать AppState для проверки состояния приложения. Может быть любым из трех:

active - приложение работает на переднем плане.

background- Приложение работает в фоновом режиме. Пользователь также: в другом приложении на домашнем экране [Android] в другом Activity (даже если он был запущен вашим приложением).

[iOS] неактивен - это состояние, которое возникает при переходе между передним планом& фон и в периоды бездействия, такие как вход в представление многозадачности или в случае входящего вызова.

Вот пример:

import { AppState } from 'react-native';

export default class App extends React.Component {
  state = {
    appState: AppState.currentState,
    offline: 'offline'
  }


  componentDidMount() {
    AppState.addEventListener('change', this._handleAppStateChange);
  }

  componentWillUnmount() {
    AppState.removeEventListener('change', this._handleAppStateChange);
  }

  _handleAppStateChange = async (nextAppState) => {
    if (nextAppState.match(/inactive|background/) && this.state.appState === 'active') {
      console.log('App has come to the foreground!');

      const userUid = await Firebase.auth.currentUser.uid;

      const docRef = Firebase.firestore.collection('users').doc(userUid);

      const disconnectRef = docRef.onDisconnect().update({
        presenceStatus: this.state.offline
      });
    }

    this.setState({appState: nextAppState});
  }
}

Подробнее о AppState иди сюда

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...