Skip to content

Linking

Randy Hsiao edited this page Aug 27, 2019 · 1 revision

LINKING

General API to interact with incoming and outgoing links.

Deep Link

Can handle from any component:

componentDidMount() {
  Linking.getInitialURL().then((url) => {
    if (url) {
      console.log('Initial url is: ' + url);
    }
  }).catch(err => console.error('An error occurred', err));
}

Android

Add deep link support on Android.

To receive intent in existing instance of MainActivity, set launchMode to singleTask in AndroidManifest.xml. See <activity> documentation for more info.

<activity
  android:name=".MainActivity"
  android:launchMode="singleTask">

iOS

Link RCTLinking to proj.

To listen to incoming app links, add following to AppDelegate.m:

#import <React/RCTLinkingManager.h>

- (BOOL)application:(UIApplication *)application
   openURL:(NSURL *)url
   options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
  return [RCTLinkingManager application:application openURL:url options:options];
}

// if using Universal Links (https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html)
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
 restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
 return [RCTLinkingManager application:application
                  continueUserActivity:userActivity
                    restorationHandler:restorationHandler];
}

On component can listen to Linking events:

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

Open Link

To start corresponding activity for link (web URL, email, contact etc.):

Linking.openURL(url).catch((err) => console.error('An error occurred', err));

To check if any installed app can handle URL:

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

Clone this wiki locally