This article is about fixing React native deep linking not working when app is in background state in Facebook React Native
  • 07-Feb-2023
Lightrun Team
Author Lightrun Team
Share
This article is about fixing React native deep linking not working when app is in background state in Facebook React Native

React native deep linking not working when app is in background state in Facebook React Native

Lightrun Team
Lightrun Team
07-Feb-2023

Explanation of the problem

In a React Native app, the deep link URL is not being retrieved when the app is in the background state. The URL can be retrieved when the app is closed, using Linking.getInitialURL(), but this method fails to retrieve the URL when the app is in the background.

To Reproduce: The following code has been added in the app.js file to handle the deep link URL:

componentDidMount() { 
    Linking.addEventListener(‘url’, this._handleOpenURL); 
}, 
componentWillUnmount() { 
    Linking.removeEventListener(‘url’, this._handleOpenURL); 
}, 
_handleOpenURL(event) { 
    console.log(event.url); 
}

Environment: The following is the React Native environment information:

System: OS: Linux 4.15 Ubuntu 18.04.1 LTS (Bionic Beaver) 
        CPU: (4) x64 Intel® Core™ i3-6098P CPU @ 3.60GHz 
        Memory: 1.73 GB / 15.57 GB 
        Shell: 4.4.19 - /bin/bash 
Binaries: 
        Node: 10.11.0 - /usr/bin/node 
        npm: 6.7.0 - /usr/bin/npm 
npmPackages: 
        react: 16.6.0-alpha.8af6728 => 16.6.0-alpha.8af6728 
        react-native: ^0.58.5 => 0.58.5 
npmGlobalPackages: 
        create-react-native-app: 2.0.2 
        react-native-cli: 2.0.1 
        react-native-rename: 2.4.0 
        react-native-slideshow: 1.0.1

Troubleshooting with the Lightrun Developer Observability Platform

Getting a sense of what’s actually happening inside a live application is a frustrating experience, one that relies mostly on querying and observing whatever logs were written during development.
Lightrun is a Developer Observability Platform, allowing developers to add telemetry to live applications in real-time, on-demand, and right from the IDE.

  • Instantly add logs to, set metrics in, and take snapshots of live applications
  • Insights delivered straight to your IDE or CLI
  • Works where you do: dev, QA, staging, CI/CD, and production

Start for free today

Problem solution for React native deep linking not working when app is in background state in Facebook React Native

The issue addressed in involves handling deep linking requests in a React Native app. Deep linking allows an app to open a specific location within the app by clicking on a link, for example, from an SMS or an email. The standard behavior of a deep link is to bring the app to the foreground and to pass a URL to the app. However, the standard behavior can be tricky to implement, especially when the URL is passed to the app asynchronously.

The proposed solution for handling deep linking requests in a React Native app is to use the Linking.addEventListener and Linking.getInitialURL methods. The first step is to call the handleDeepLinkingRequests method in componentDidMount(). This method retrieves the initial URL passed to the app by calling the Linking.getInitialURL method. If a URL is present, the handleOpenURL method is called to handle the URL and to implement the necessary navigation logic.

It is important to note that the Linking.getInitialURL method should only be called for the first time when the app is launched via app-swap. For subsequent app-swap calls, the handleOpenURL method will be called as it is configured with the linking event listener. This means that the handleOpenURL method will handle all subsequent deep link requests without the need to call the Linking.getInitialURL method again. Additionally, it is important to unsubscribe from the linking events in componentWillUnmount() to avoid any memory leaks in the app.

Other popular problems with Facebook React Native

Problem: Slow Initialization and Loading Time

One of the most common issues faced by developers using Facebook React Native is slow initialization and loading times. This can lead to a poor user experience, especially for larger apps that have many components and need to perform many tasks during the loading process. The root cause of slow loading times is often due to the overhead associated with loading and executing JavaScript code, as well as rendering the components on the screen.

Solution:

To solve this issue, developers can make use of various techniques to optimize their code and reduce the time it takes for the app to load. This can include using code-splitting, lazy loading components, and optimizing images and other assets. Additionally, developers can make use of tools like the React Native Debugger to profile the performance of their app and identify areas where they can make optimizations.

Problem: Lack of Native Modules and Components

React Native allows developers to build native mobile apps using JavaScript, however, there may be times when they need to access native components or APIs that are not currently supported by React Native. This can cause frustration and limit the functionality of an app, as developers may need to find alternative solutions or write their own custom native modules to access these components.

Solution:

To overcome this issue, developers can make use of third-party libraries and components that provide the missing functionality, or they can write their own custom native modules to access the native components or APIs that they need. Additionally, the React Native community is constantly growing, and new native modules and components are being developed all the time, so developers can also keep an eye out for new solutions as they become available.

Problem: Debugging and Error Handling

Debugging and error handling can be a challenge for developers using React Native, especially for those who are new to the platform. React Native uses JavaScript, which does not have the same level of debugging tools and error handling as native mobile platforms, making it difficult to track down and fix issues. Additionally, React Native apps often need to be run on both Android and iOS devices, which can further complicate the debugging process.

Solution:

To solve this issue, developers can make use of various tools and techniques to aid in debugging and error handling. This can include using the React Native Debugger, which provides a powerful debugging environment for React Native apps, as well as using tools like Sentry or Bugsnag to track and report errors in production. Additionally, developers can write thorough unit tests to catch bugs early in the development process, and they can also make use of logging and other debugging techniques to help track down and fix issues as they arise.

A brief introduction to Facebook React Native

Facebook React Native is a mobile application development framework that allows developers to build mobile applications for iOS, Android and the Web using JavaScript and React.js. React Native provides a solution to the challenge of cross-platform mobile app development by offering a consistent, native-like user experience, using a single codebase that can run on multiple platforms. With React Native, developers can use existing React.js knowledge and build a seamless experience for users without having to write platform-specific code.

React Native uses native components that are combined with JavaScript components, allowing for a more optimized and fast application. This is achieved by using JavaScript to trigger native rendering APIs, which results in faster performance compared to web-based solutions like PhoneGap or Ionic. In addition, the framework is designed for extensibility and flexibility, allowing developers to easily add new functionality and components to their applications. Furthermore, React Native offers a rich set of APIs and components, making it easy for developers to add advanced features such as geolocation, push notifications, and camera access, among others. Overall, Facebook React Native provides a powerful solution for cross-platform mobile application development.

Most popular use cases for Facebook React Native

  1. Building Cross-Platform Mobile Applications: Facebook React Native allows developers to build native mobile applications for iOS and Android using a single codebase, enabling faster and more efficient development of mobile applications. React Native uses JavaScript and a library of pre-built UI components, making it possible to develop applications that look and feel native to each platform.
  2. Optimizing User Experience: Facebook React Native allows developers to build high-performance mobile applications that can be optimized for a smooth and responsive user experience. React Native uses native components for platform-specific rendering, which results in smooth animations, scrolling, and navigation, providing an optimized user experience for each platform.
import React, { useState } from 'react';
import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';

const App = () => {
  const [count, setCount] = useState(0);

  return (
    <View style={styles.container}>
      <Text style={styles.text}>Count: {count}</Text>
      <TouchableOpacity onPress={() => setCount(count + 1)}>
        <Text style={styles.button}>Increase</Text>
      </TouchableOpacity>
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems:
Share

It’s Really not that Complicated.

You can actually understand what’s going on inside your live applications.

Try Lightrun’s Playground

Lets Talk!

Looking for more information about Lightrun and debugging?
We’d love to hear from you!
Drop us a line and we’ll get back to you shortly.

By submitting this form, I agree to Lightrun’s Privacy Policy and Terms of Use.