Linking
Official documentation Only for projects supporting Native Code. Requires the project to have been created using react-native init or ejected afterwards if created using expo init or create-react-native-app.
To be used with the sendIntentWithExtras method for sending text and data. May be created by the constructor of the same name.
external extra: (~key: string, ~value: 'a) => extratype url = {url: string};To attempt opening a URL. URL should be specified as string, and the method returns unit wrapped in a promise. Promise is resolved if the user approves the request (through the open dialog) or the link is opened automatically. If the user rejects the request or there are no registered applications supporting the URL, the promise is rejected. It is recommended to use the canOpenURL method beforehand, to verify that the URL can indeed be opened.
openURL: string => Js.Promise.t(unit)To determine whether a URL can be opened by registered applications. URL should be specified as string, and the method returns bool wrapped in a promise. The promise will be rejected if it is impossible to check if the URL can be opened on Android or for iOS 9 and later, an appropriate entry does not exist for the LSApplicationQueriesSchemes key in Info.plist.
canOpenURL: string => Js.Promise.t(bool)Returns a nullable string wrapped in a promise. If the app was launched to open a link, that link will be returned as a Js.Null(string) value, otherwise Js.null will be returned.
getInitialURL: unit => Js.Promise.t(Js.Null.t(string))As of React Native 0.60
Attempts to open the Settings app and display custom settings for the app, if any. This method returns an unspecified object (type any) wrapped in a promise.
openSettings: unit => Js.Promise.t('a)As of React Native 0.59.8
sendIntent: string => unit
To use Intent actions on Android for sending text to other apps. This method returns unit.
As of React Native 0.59.8
To use Intent actions on Android for sending text and data (to be provided as an array of type extra objects) to other apps. This method returns unit.
sendIntentWithExtras: (string, array(extra)) => unit
where the type extra can be created with the extra constructor
extra: (~key: string, ~value: 'a) => extra
To specify a handler for the specified event type. Only the "url" event is supported, which should be specified using the polymorphic variant `url. The handler should be of type url=> unit. The URL can be obtained from the returned object using the .url property. This method returns unit.
addEventListener: ([ `url], url => unit) => unitTo remove a handler for the specified event type. Only the "url" event is supported, which should be specified using the polymorphic variant `url. The handler should be of type url=> unit. This method returns unit.
removeEventListener([ `url], url => unit) => unitopen ReactNative;
let windowHeight = Dimensions.get(`window).height;
let windowWidth = Dimensions.get(`window).width;
let containerStyle =
Style.(
style(
~width=windowWidth->dp,
~height=windowHeight->dp,
~justifyContent=`center,
~alignItems=`center,
(),
)
);
type state = {url: option(string)};
type action =
| SetURL(option(string));
[@react.component]
let make = () => {
let (state, dispatch) =
React.useReducer(
(state, action) =>
switch (action) {
| SetURL(v) => {url: v}
},
{url: None},
);
let handler = s => {
s.url->Js.Console.warn;
};
let handlePromise = url =>
Js.Promise.(
Linking.openURL(url)
|> then_(() => resolve(dispatch(SetURL(Some(url)))))
|> catch(err => resolve(err->Js.Console.warn))
|> ignore
);
// Listener will only receive URLs which your app is
// registered to handle
// https:// resource below will not be captured here
React.useEffect0(() => {
Linking.addEventListener(`url, handler);
Some(() => Linking.removeEventListener(`url, handler));
});
<View style=containerStyle>
<Text>
{{Belt.Option.getWithDefault(state.url, "No URL requested")}
->React.string}
</Text>
<Button
onPress={_ =>
handlePromise(
"https://github.com/reason-react-native/reason-react-native/",
)
}
title="Open Repo"
/>
// This will only work if you have registered myapp:// as
// custom URL scheme for your app
// Otherwise this will throw an error on the Yellow Box
<Button
onPress={_ => handlePromise("myapp://screen")}
title="Internal URL"
/>
</View>;
};