Displaying Privacy Policies in Mobile Apps
Mobile app store reviewers expect users to read your privacy policy without leaving your app—especially before they accept a consent banner. This guide shows how to keep Transcend-hosted policies in-app using the Privacy Center simple mode query parameter, your own WebView, or the published policy CDN.
Apple's App Store Review Guidelines require a privacy policy link in App Store Connect and accessible within the app. Google's Play User Data policy requires a privacy policy URL and that users can review it in-app. In practice, reviewers have rejected consent flows that send users to an external browser before they can accept or decline tracking. See Apple App Store Review Guidelines 5.1.1(i) and the Google Play User Data policy for the official requirements.
Append simple=true to your Privacy Center policy URL to strip navigation chrome and show only the policy body. Select a specific policy with the name query parameter (the policy slug from the Admin Dashboard).
https://{privacy-center-host}/policies?simple=true&name={policy-slug}
# Localized example
https://{privacy-center-host}/policies/fr/?simple=true&name={policy-slug}- Removed in simple mode: hero banner, header navigation, sidebar, and Make a Privacy Request entry points.
- Kept in simple mode: the policy HTML body and a minimal footer (organization logo and locale toggle when enabled).
simple=true only changes how the Privacy Center page is laid out. Policy content, translations, and publishing workflows are unchanged. Publish updates from the Admin Dashboard as usual.
In the Admin Dashboard, open Privacy Center → Policies. Each policy has a slug used in the name parameter. If your main policy links out to other sites, consider a mobile-only policy copy with fewer outbound links for App Store review. See Configuring the Privacy Center for setup details.
If you render your own consent banner or use the headless mobile SDK, load the simple=true URL in an in-app surface instead of opening the system browser. Point your Privacy Policy link at the URL from Step 1.
// iOS — present in a WKWebView or SFSafariViewController
let url = URL(string: "https://privacy.example.com/policies?simple=true&name=privacy-policy")!
let webView = WKWebView(frame: view.bounds)
webView.load(URLRequest(url: url))// Android — present in a WebView or Chrome Custom Tab
val url = "https://privacy.example.com/policies?simple=true&name=privacy-policy"
webView.loadUrl(url)// React Native
<WebView source={{ uri: 'https://privacy.example.com/policies?simple=true&name=privacy-policy' }} />When Transcend renders the consent banner, the Privacy Policy link comes from your consent experience footer links (Admin Dashboard → Consent Manager → Display Settings → Privacy Policy Link). Set that URL to your simple=true policy link. How the SDK opens the link depends on the platform:
| SDK | Default behavior | In-app option |
| Android SDK | Opens the system browser | Set openLinksInApp(true) on TranscendCoreConfig to open Chrome Custom Tabs (still leaves the app, but stays in an in-app browser surface) |
| iOS SDK | Opens the system browser via UIApplication.shared.open | No built-in in-app option today |
| React Native UI (@transcend-io/cm-mobile-ui-react-native) | Opens the system browser via Linking.openURL | No built-in in-app option today |
If App Store review requires the policy to stay fully in-app on iOS or React Native, use the headless SDK with your own UI (Step 2 above) so you control how the link is presented. See Implementing Mobile Consent for the high-level integration flow.
For a fully native experience (custom typography, offline caching, or no hosted page load), fetch the published policy JSON module from your Privacy Center CDN and render the HTML in your own WebView.
GET https://{privacy-center-host}/static/{privacy-center-host}/privacyCenterPolicies.json
# Localized module (when translations are published)
GET https://{privacy-center-host}/static/{privacy-center-host}/privacyCenterPolicies-fr.jsonEach entry includes a slug and versions[].content (HTML). Match the slug from Step 1, then load the HTML with a base URL set to your Privacy Center host so relative assets resolve. Treat the HTML as untrusted content and render it safely. Policy updates still publish from the Admin Dashboard—no app release required.
- Tap Privacy Policy from your consent UI on a physical device or simulator.
- Confirm the policy is readable before the user accepts or declines consent.
- Confirm back/close returns to the consent banner without losing state.
- Verify the correct locale when your app supports multiple languages.
- Check links inside the policy body behave as expected (in-app vs external).
Configuring the Privacy Center · Privacy Center Internationalization · Implementing Mobile Consent · Mobile Consent - iOS Quickstart · Mobile Consent - Android Quickstart · Saving and Publishing to the Privacy Center