ping-identity
    Preparing search index...

    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.

    Add the package and let autolinking wire the native code:

    yarn add @ping-identity/rn-browser
    cd ios && pod install

    Optional integration packages:

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

    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 browser behavior is configured per call via the ios options on open(...). These options do not have a global configuration equivalent on iOS.

    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"
    }
    }

    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 });
    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).

    Native promise rejections map to the shared GenericError contract from @ping-identity/rn-types. Errors are rejected as exceptions; cancellations are resolved as { type: 'cancel' } instead of being rejected.

    Error codes:

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

    try {
    await open('https://example.com', { callbackUrlScheme: 'com.example.app' });
    } catch (e) {
    const error = e as BrowserError;
    // error.type, error.error, error.message, error.code, error.status
    }
    • Add an iOS test runner target to execute module unit tests.

    MIT