Compatibility
Supported operating systems and browsers
Select a platform below to view the supported operating systems and browsers.
-
Android
-
iOS
-
JavaScript / Login Widget
The Ping SDK for Android supports the following versions of the Android operating system:
| Release | API Levels | Released |
|---|---|---|
Android 16 |
36 |
August, 2025 |
Android 15 |
35 |
September, 2024 |
Android 14 |
34 |
October, 2023 |
Android 13 |
33 |
March, 2022 |
Android 12 |
31, 32 |
October, 2021 |
Android 11 |
30 |
September, 2020 |
Android 10 |
29 |
September, 2019 |
Android 9 (Pie) |
28 |
August, 2018 |
|
We are updating how we determine which Android versions form our support policy for the Ping SDK for Android. From March 1st, 2025, the support policy is as follows:
|
Supported browsers on Android
-
Chrome - Two most recent major versions.
The Ping SDK for iOS supports the following versions of the iOS operating system:
| Release | Released |
|---|---|
iOS 18 |
September, 2024 |
iOS 17 |
September, 2023 |
iOS 16 |
September, 2022 |
|
We are updating how we determine which iOS versions form our support policy for the Ping SDK for iOS. From March 1st, 2025, the support policy is as follows:
|
Supported browsers on iOS
-
Safari - Two most recent major versions.
The Ping SDK for JavaScript, and the Ping (ForgeRock) Login Widget support the desktop and mobile browsers listed below.
Minimum supported Desktop browser versions
-
Chrome 83
-
Firefox 77
-
Safari 13
-
Microsoft Edge 83 (Chromium)
Supported Mobile browsers
-
iOS (Safari) - Two most recent major versions of the operating system.
-
Android (Chrome) - Two most recent major versions of the operating system.
Compatibility with in-app browsers and WebViews
Native Android and iOS applications use two main methods for opening a website or web app:
The Ping SDKs for Android and iOS use an in-app browser when authenticating using OIDC sign-on, rather than a WebView.
Understanding the distinction between WebViews and in-app browsers is critical for security and user experience, and explains why the Ping SDKs use an in-app browser by default.
WebViews
A WebView is a component that renders web pages as an integrated part of your native app’s UI.
| Control |
Your app has extensive control over a WebView. It can inspect traffic, inject JavaScript, and access content. You can set headers, URL parameters, and cookies in the requests. |
| Context |
WebViews run in the same process as your app, sharing memory and resources. The WebView does not share cookies or sessions with the device’s default browser. |
| Security |
As the app can manipulate the WebView, it is considered less secure for handling sensitive authentication redirects. An attacker who compromises the app could potentially intercept credentials. |
| Compatibility |
WebViews don’t support the entire web specification. Advanced features like WebAuthn and Passkeys do not work. |
In-App Browsers
In-app browsers appear separated from your native app’s user interface, often creating their own window to open the website or web app.
In-app browsers are platform-recommended components such as Chrome Custom Tabs on Android, and SFSafariViewController and ASWebAuthenticationSession on iOS.
| Control |
Your app has minimal control over an in-app browser window. It can’t inspect the content or inject scripts. It essentially hosts a sandboxed, secure browser tab. |
| Context |
An in-app browser runs as a separate, secure process. Critically, certain components like This sharing of cookies is the key mechanism for enabling Web SSO. |
| Security |
This separation between the app and the in-app browser makes it the most secure and recommended option for user authentication flows. It prevents the host app from interfering with the login process. |
| Compatibility |
In-App browsers are fully-featured browsers that run on the same engine as Safari and Chrome. Features like WebAuthn and Passkeys are fully supported. |
In-app browser implementation on iOS
On iOS there are two main implementations of in-app browsers; SFSafariViewController and ASWebAuthenticationSession.
This section outlines some of the differences between the two iOS implementations.
SFSafariViewController
The SFSafariViewController implementation is designed to display general web content within your app while maintaining a secure, sandboxed environment.
| Cookie storage |
Since iOS 11, If a user is logged into a website on Safari, they will not be logged in when that same site is opened by using |
| SSO within the same app |
Instances of This means if you have multiple |
| Other storage |
Instances of |
| Use case |
Ideal for displaying external, non-authentication-related web pages. |
ASWebAuthenticationSession
The ASWebAuthenticationSession implementation is a specialized API built for handling authentication flows like OAuth 2.0.
It is the recommended and most secure method for logging a user in to a web app.
| Cookie Storage |
It shares cookies and website data with the native Safari browser by default. This cookie sharing enables a seamless web SSO experience. |
| Ephemeral sessions |
You can optionally configure it using the This prevents it from sharing any existing cookies, and it discards any new ones after the session. |
| UI and consent |
The This explicit user consent is a critical security feature. |
| Use case |
The only appropriate choice for handling third-party login flows, such as signing in with through your Ping Identity solutions. |
Summary of iOS in-app browser implementations
The following table summarizes the key differences between the two iOS implementations of an in-app browser:
| Feature | SFSafariViewController |
ASWebAuthenticationSession |
|---|---|---|
Primary Use Case |
Displaying general web content |
User authentication flows (OAuth) |
Ephemeral Session Option |
No |
Yes |
Shares Cookies with Safari |
No (iOS 11+) |
Yes (unless ephemeral) |
Shares Other Data with Safari |
No (iOS 11+) |
Yes (unless ephemeral) |
Data Returned to App |
Nothing (Custom schemes are possible but not recommended for auth) |
Callback URL with tokens and codes |
UI Customization |
Minimal (tint color) |
None (System-provided alert) |