npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@ping-identity/rn-browser

v1.0.0

Published

Ping Identity Browser for React Native

Downloads

838

Readme

Ping Identity

Ping Identity React Native Browser

The Ping Identity React Native Browser module provides a safe, system-browser flow for OIDC/OAuth logins. It launches Custom Tabs/Auth Tabs on Android and ASWebAuthenticationSession on iOS, then returns the redirect URL to JavaScript.

Table of contents

Integrating the SDK into your project

Note: This module requires that the @ping-identity/rn-core module is already set up and installed.

# Install & setup the core module
yarn add @ping-identity/rn-core
# Install the rn-browser module
yarn add @ping-identity/rn-browser
# If you are developing your app using iOS, run this command
cd ios && pod install

Optional integration packages:

yarn add @ping-identity/rn-logger
  • @ping-identity/rn-logger: optional JS/native logger integration.

How to Use the SDK

Configure (Android only)

Apply global customization for Custom Tabs/Auth Tabs. iOS currently ignores these options.

import { configureBrowser } from '@ping-identity/rn-browser';

configureBrowser({
  android: {
    customTabs: {
      showTitle: false,
      urlBarHidingEnabled: true,
      colorScheme: 'system',
    },
    authTabs: {
      ephemeral: true,
    },
  },
});

iOS per-call configuration

iOS browser behavior is configured per call via the ios options on open(...). These options do not have a global configuration equivalent on iOS.

Android manifest placeholder

Configure the manifest placeholder for your app's redirect URI scheme. This is used as a fallback when Auth Tabs are not available and Custom Tabs must rely on the manifest scheme:

android {
  defaultConfig {
    // For redirect URI "com.example.app://callback", configure:
    manifestPlaceholders["appRedirectUriScheme"] = "com.example.app"
  }
}

Configure logging (optional)

If you install the logger package, pass a JS logger instance per call via BrowserLoggerOptions. The logger must be created via @ping-identity/rn-logger. If the logger package is not installed/configured, omit the logger option.

import {
  open,
  configureBrowser,
  resetBrowser,
} from '@ping-identity/rn-browser';
import { logger } from '@ping-identity/rn-logger';

const jsLogger = logger({ level: 'debug' });

// Pass as the last argument to any browser call
const result = await open(
  'https://example.com',
  { callbackUrlScheme: 'com.example.app' },
  { logger: jsLogger },
);

// Also supported on configureBrowser and resetBrowser
configureBrowser(
  { android: { customTabs: { showTitle: true } } },
  { logger: jsLogger },
);
resetBrowser({ logger: jsLogger });

Open a browser session

import { open } from '@ping-identity/rn-browser';

const result = await open('https://example.com', {
  callbackUrlScheme: 'com.example.app',
  redirectUri: 'com.example.app://callback',
  ios: {
    browserType: 'authSession',
    browserMode: 'login',
  },
});

// result: { type: 'success', url } | { type: 'cancel' }

Security note: The module does not validate or sanitize the url you pass to open. Only launch trusted URLs in your app (for example, enforce an https scheme and allow-listed hosts).

Error handling

Promise rejections throw a BrowserError instance, which extends PingError extends Error. Cancellations resolve as { type: 'cancel' } rather than rejecting.

Error codes:

  • BROWSER_OPEN_ERROR for validation/launch failures
import { BrowserError } from '@ping-identity/rn-browser';

try {
  await open('https://example.com', { callbackUrlScheme: 'com.example.app' });
} catch (err) {
  if (err instanceof BrowserError) {
    console.log(err.code, err.type, err.message);
  }
}

License

This project is licensed under the MIT License - see the LICENSE file for details