-
Notifications
You must be signed in to change notification settings - Fork 0
Linking
Randy Hsiao edited this page Aug 27, 2019
·
1 revision
General API to interact with incoming and outgoing links.
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));
}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">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);
}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));