Security News
Bun 1.2 Released with 90% Node.js Compatibility and Built-in S3 Object Support
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.
react-native-inappbrowser-reborn
Advanced tools
$ npm install react-native-inappbrowser-reborn --save
$ react-native link react-native-inappbrowser-reborn
Libraries
➜ Add Files to [your project's name]
node_modules
➜ react-native-inappbrowser-reborn
and add RNInAppBrowser.xcodeproj
libRNInAppBrowser.a
to your project's Build Phases
➜ Link Binary With Libraries
Cmd+R
)<ios/Podfile
pod 'RNInAppBrowser', :path => '../node_modules/react-native-inappbrowser-reborn'
pod install
android/app/src/main/java/[...]/MainActivity.java
import com.proyecto26.inappbrowser.RNInAppBrowserPackage;
to the imports at the top of the filenew RNInAppBrowserPackage()
to the list returned by the getPackages()
methodandroid/settings.gradle
:
include ':react-native-inappbrowser-reborn'
project(':react-native-inappbrowser-reborn').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-inappbrowser-reborn/android')
android/app/build.gradle
:
implementation project(':react-native-inappbrowser-reborn')
Methods | Action |
---|---|
open | Opens the url with Safari in a modal on iOS using SFSafariViewController, and Chrome in a new custom tab on Android. On iOS, the modal Safari will not share cookies with the system Safari. |
close | Dismisses the system's presented web browser |
openAuth | Opens the url with Safari in a modal on iOS using SFAuthenticationSession, and Chrome in a new custom tab on Android. On iOS, the user will be asked whether to allow the app to authenticate using the given url. |
closeAuth | Dismisses the current authentication session |
isAvailable | Detect if the device supports this plugin |
import InAppBrowser from 'react-native-inappbrowser-reborn';
...
async openLink() {
try {
await InAppBrowser.isAvailable()
const result = await InAppBrowser.open('https://www.google.com', {
// iOS Properties
dismissButtonStyle: 'cancel',
preferredBarTintColor: 'gray',
preferredControlTintColor: 'white',
readerMode: false,
// Android Properties
showTitle: true,
toolbarColor: '#6200EE',
secondaryToolbarColor: 'black',
enableUrlBarHiding: true,
enableDefaultShare: true,
forceCloseOnRedirection: false,
// Specify full animation resource identifier(package:anim/name)
// or only resource name(in case of animation bundled with app).
animations: {
startEnter: 'slide_in_right',
startExit: 'slide_out_left',
endEnter: 'slide_in_right',
endExit: 'slide_out_left',
},
headers: {
'my-custom-header': 'my custom header value'
},
});
Alert.alert(JSON.stringify(result));
} catch (error) {
Alert.alert(error.message)
}
}
...
import { Platform } from 'react-native'
export const getDeepLink = (path = "") => {
const scheme = 'my-scheme'
const prefix = Platform.OS == 'android' ? `${scheme}://my-host/` : `${scheme}://`
return prefix + path
}
import { Root } from 'native-base'
import { getDeepLink } from './utilities'
import { createStackNavigator } from 'react-navigation'
const Main = createStackNavigator(
{
LoginComponent: { screen: LoginComponent },
HomeComponent: { screen: HomeComponent },
SplashComponent: { //Redirect users to the Home page if they are authenticated, otherwise to Login page...
screen: SplashComponent,
path: 'callback/' //Deep linking to get the auth_token
}
},
{
index: 0,
initialRouteName: 'SplashComponent',
headerMode: 'none'
}
)
...
render() {
return (
<Root>
<Main uriPrefix={getDeepLink()} />
</Root>
)
}
...
import { Linking } from 'react-native'
import InAppBrowser from 'react-native-inappbrowser-reborn'
import { getDeepLink } from './utilities'
...
async onLogin() {
const deepLink = getDeepLink("callback")
const url = `https://my-auth-login-page.com?redirect_uri=${deepLink}`
try {
await InAppBrowser.isAvailable()
InAppBrowser.openAuth(url, deepLink, {
// iOS Properties
dismissButtonStyle: 'cancel',
// Android Properties
showTitle: false,
enableUrlBarHiding: true,
enableDefaultShare: true,
}).then((response) => {
if (response.type === 'success' &&
response.url) {
Linking.openURL(response.url)
}
})
} catch (error) {
Linking.openURL(url)
}
}
...
...
componentWillMount() {
const { navigation } = this.props
const { state: { params } } = navigation
const { access_token } = params || {}
if (access_token) {
// Opened by deep linking, the user is authenticated
// Redirect to the Home page
}
else {
// Detect if the stored token is still valid
// And redirect the user to Home or Login page
}
}
...
The StatusBar will keep the last one provided in your app. So if the StatusBar is dark-content
before you open the browser this will keep it. If you want to change before opening you can do something like
async openInBrowser(url) {
try {
StatusBar.setBarStyle('dark-content')
await InAppBrowser.open(url)
} catch (error) {
Alert.alert(error.message);
}
})
If you need to restore the old bar style, after the browser is dismissed, you can try and patch the StatusBar.setBarStyle function to store the old value like so:
// patch StatusBar.setBarStyle to make style accessible
const _setBarStyle = StatusBar.setBarStyle;
StatusBar.setBarStyle = (style) => {
StatusBar.currentStyle = style;
_setBarStyle(style);
};
You can than restore the old bar style after the browser has been dismissed like this:
async openInBrowser(url) {
try {
const oldStyle = StatusBar.currentStyle
StatusBar.setBarStyle('dark-content')
await InAppBrowser.open(url)
if(oldStyle) StatusBar.setBarStyle(oldStyle)
} catch (error) {
Alert.alert(error.message);
}
})
Thanks goes to these wonderful people:
Juan Nicholls ✉ | Emanuel Quimper ✉ | Jonathan Bones ✉ | Mihai Lazari | Kalle Haavisto ✉ | Worapot Pengsuk | Adam McArthur ✉ |
---|---|---|---|---|---|---|
Artem Emelyanov ✉ | Robert Scott |
I believe in Unicorns 🦄 Support me, if you do too.
Made with ❤️
FAQs
InAppBrowser for React Native
The npm package react-native-inappbrowser-reborn receives a total of 79,672 weekly downloads. As such, react-native-inappbrowser-reborn popularity was classified as popular.
We found that react-native-inappbrowser-reborn demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.
Security News
Biden's executive order pushes for AI-driven cybersecurity, software supply chain transparency, and stronger protections for federal and open source systems.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.