Deep Link with React Native App
Last updated
Was this helpful?
Last updated
Was this helpful?
Was this helpful?
We are going to support the URL (deep links) into the app:
pave://
POST
https://api.paveapi.com/v1/generate-session-id/:api-key
api-key
string
API - Key
redirect_url
string
The url you want to return.
{
"session_key": "TOA-3DFDC8Z64V",
"status": "IDLE",
"active": true,
"redirect_url": "pave://",
"start_date": "September 17th, 2021"
}
Open up your project and go to Targets > Info > URL Types and add the following:
Change com.discoveryloft.pavejs
to your project's identifier
You'll need to add the following lines to your *AppDelegate.m
:
// iOS 9.x or newer
#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 you're targeting iOS 8.x or older, you can use the following code instead:
// iOS 8.x or older
#import <React/RCTLinkingManager.h>
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [RCTLinkingManager application:application openURL:url
sourceApplication:sourceApplication annotation:annotation];
}
To create a link to your app content, add an intent filter that contains these elements and attribute values in your manifest:
<application
...>
<activity
android:name=".MainActivity"
android:label="MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter android:label="PAVE Filter">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "pave://...” -->
<data android:scheme="pave" />
</intent-filter>
</activity>
</application>
There are two ways to handle URLs that open your app.
You can handle these events with Linking.addEventListener('url', callback)
- it calls callback({ url })
with the linked URL
You can handle these events with Linking.getInitialURL()
- it returns a Promise that resolves to the URL, if there is one.
/* This is the example code */
import React, {useEffect, useState} from 'react';
import {Linking} from 'react-native';
import {View, Text} from 'react-native';
const App = () => {
const [url, setUrl] = useState('');
useEffect(() => {
Linking.getInitialURL()
.then(url => handleURL({url}))
.catch(console.error);
Linking.addEventListener('url', handleURL);
}, []);
function handleURL(event) {
/***********************************/
/* HANDLE THE URL IN THIS FUNCTION */
/***********************************/
setUrl(event.url);
console.log('url ======> ' + event.url);
}
return (
<View style={{justifyContent: 'center', flex: 1, alignItems: 'center'}}>
<Text>PAVE DEEP LINK: {url}</Text>
</View>
);
};
export default App;
After PAVE Capture successfully and tap on CLOSE
button, you will redirect to your app.
You can try deeplinking into your app by firing up Safari in your simulator and enter URL in there (i.e. pave://
).
Or an even better way is to execute deeplinks from the command line while your simulator is running with this command here:
xcrun simctl openurl booted pave://
Execute deeplinks from the command line while your simulator is running with this command here:
adb shell am start -a android.intent.action.VIEW -d "pave:\\" <your-app-package-name>
Source code example:
Reference Documents: