How to detect when a React Native app is closed (not suspended)? How to detect when a React Native app is closed (not suspended)? reactjs reactjs

How to detect when a React Native app is closed (not suspended)?


Looks like you can detect the previous state and compare it to the next state. You can't detect that the app is closing vs going into the background, from what I can find online, but you can detect if it was inactive (closed), or in the background.

Example from React Native Docs

import React, {Component} from 'react'import {AppState, Text} from 'react-native'class AppStateExample extends Component {  state = {    appState: AppState.currentState  }  componentDidMount() {    AppState.addEventListener('change', this._handleAppStateChange);  }  componentWillUnmount() {    AppState.removeEventListener('change', this._handleAppStateChange);  }  _handleAppStateChange = (nextAppState) => {    if (this.state.appState.match(/inactive|background/) && nextAppState === 'active') {      console.log('App has come to the foreground!')    }    this.setState({appState: nextAppState});  }  render() {    return (      <Text>Current state is: {this.state.appState}</Text>    );  }}


Just ran into this same issue. The answer that's accepted does not actually do what is asked in the OP.

A hacky solution would be to set a flag on the first screen your application opens when opened fresh and to NOT SHOW THAT SCREEN when the app has just been backgrounded.

Not super elegant and I can't show example code, but it fixes my particular issue.


I suggest to use web socket and it will help you to solve your problem, as following :

react native app

import React from 'react';const io = require('socket.io-client/dist/socket.io');const App = ()=>{    React.useEffect(()=>{        // connect to web socket        window.appSocket = io.connect(`<server-origin>/?token=<string>&userAppId=<string>`);        window.appSocket.on('connect',()=>{            // do what you line        })    },[])    ...}export default App; 

express server side

const express   = require('express');const server    = express();const http      = require('http').Server(server);const io        = require('socket.io')(http);io.on('connection',(socket)=>{ // this callback function for each web socket connection    let { token , userAppId } = socket.handshake.query;    if( userAppId ){         console.log(`${userAppId} online`)        socket.on('disconnect',(resean)=>{            console.log(`${userAppId} shut down`)        })    }});

for more details, you can check socket.io