42

I'm going through the docs in React Native and can only find navigating to external links from the app I am in.

I want to be able to navigate to the Settings app (more specifically to the privacy > location services page) but, can not seem to find the necessary information on it. There is the native iOS way of doing it which I am trying to replicate through React Native.

Is this possible?

I have tried the following to detect if there is a Settings URL. The console logs that the Settings url works however, it does not navigate to that page.

Update: thanks to @zvona I am now navigating to the settings page but not sure how to get to a specific deep link.

Linking.canOpenURL('app-settings:').then(supported => {
            
    console.log(`Settings url works`)
    Linking.openURL('app-settings:'
}).catch(error => {
    console.log(`An error has occured: ${error}`)
})

11 Answers 11

68

You can access settings of the application with: Linking.openURL('app-settings:');

But I don't know (yet) how to open a specific deep-link.

2021 update use:

Linking.openSettings();

otherwise your app will be rejected due use of non-public URL scheme

Sign up to request clarification or add additional context in comments.

9 Comments

How did you find out which url the settings page was from? I could not find it in the docs
I'm poor with native code, but I just added NSLog(UIApplicationOpenSettingsURLString); (which I saw in the answer you linked) to Appdelegate.m and output was app-settings: :)
what about for android?
The API has changed for iOS, it should be like this: Linking.openURL("App-Prefs:root=WIFI"); For Android, this looks like the most comprehensive package: github.com/rmrs/react-native-settings
beware your app could get rejected for using private apis: stackoverflow.com/a/50167923/3499115
|
14

I successfully opened the settings by the code below, hope it's helpful :)

Linking.canOpenURL('app-settings:').then(supported => {
  if (!supported) {
    console.log('Can\'t handle settings url');
  } else {
    return Linking.openURL('app-settings:');
  }
}).catch(err => console.error('An error occurred', err));

Reference: https://facebook.github.io/react-native//docs/linking.html

Comments

12

Since React Native version 0.59 this should be possible using openSettings();. This is described in the React Native Linking documentation. Although it did not work for me. When I tried quickly I saw a _reactNative.Linking.openSettings is not a function error message.

Linking.openSettings();

2 Comments

Looks like the documentation might be out of sync with the code on this one. I see it in the code for 0.60, but not any of the 0.59 releases: github.com/facebook/react-native/blob/v0.60.0/Libraries/Linking/…
Note that this works only for apps using native code, not those using expo-cli. See warning at the top of reactnative.dev/docs/linking.html
7

You can deep-link referencing the settings's index like so:

    Linking.openURL('app-settings:{index}')

For example Linking.openURL('app-settings:{3}') would open the Bluetooth settings.

3 Comments

Not working on iOS10.3.3 + React Native 0.44.3, index=3 ( and other index such as 1, 2, 3...) will jump to Cellular data...
For iOS 14 you can call Linking.openURL('App-Prefs:Bluetooth') to open Bluetooth Settings
how to deep link to location peripheral settings in iOS ?
5

Linking.openURL('app-settings:1');

Comments

1

Adding an answer that worked for me and is easy to apply.

openSettings function in @react-native-community/react-native-permissions works for both iOS and Android.

Calling openSettings function will direct the user to the settings page of your app.

import { openSettings } from 'react-native-permissions';
openSettings();

Comments

1

You can import Linking from 'react-native' and then use Linking.openSettings() to trigger the call. This link explains it very concisely:

https://til.hashrocket.com/posts/eyegh79kqs-how-to-open-the-settings-app-in-reactnative-060

1 Comment

Updated, explained a bit more
1

For example: to navigate under Settings/Bluetooth you have to use Linking.openURL('App-Prefs:Bluetooth');

For iOS 14 and ReactNative 16.13

1 Comment

As of the end of 2020, no React Native 16.13 version exists
1

You can use the most easiest way to open the app setting from react-native. just, import { Linking } from 'react-native'; and user below line anywhere you want open the app setting. Linking.openSettings();

Comments

0

Old question, but this didn't work for me on Android and I found something that did. Hope this helps anyone looking for the same. :)

https://github.com/lunarmayor/react-native-open-settings I don't have the ability to test it for iOS though.

Opens the platform specific settings for the given application.

1 Comment

hey guys is it possible to open the mobile setting page from external web url too tried to search but didnt found anything...
0

You can handle your case using Linking from react-native. In my case, I accessed the touch id settings on IOS using:-

Linking.openURL('App-Prefs:PASSCODE');

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.