Every app

Getting your app compliant

You never decided to collect data. You chose features.

You added authentication, so you hold accounts. You plugged in an ad network, so an advertising identifier is circulating. You opened an Events section, so your app asks for access to your users' calendars. None of those moves looks like a privacy decision, and yet each one adds a line to what you'll have to declare to Apple and to Google.

That's the particular thing about building without code, and it's what this guide is about: taking inventory of what your app collects, starting from what you put in it, then turning that into settings and declarations.

The step-by-step for each form is in our help center. What follows is the other half, the half that decides what you're going to answer.

Chapter 1What your app collects

The screen that takes inventory for you

Go to Settings Privacy center, Permissions tab.

There you'll find the list of permissions your app may request from your users' devices, and, for each one, a Usage column naming the feature or features that trigger it.

That's what makes this screen valuable: it doesn't ask you to guess, it tells you where each permission comes from.

The list isn't the same length on every app, because it follows what your app carries. A shop shows twenty permissions; a content app carrying media playback and geolocated notifications shows more.

A few lines, to give you the flavor:

PermissionWhat triggers it
CalendarThe Events section, to add an event to the device's calendar
MicrophoneThe Form and Submission sections, to record videos
CameraQR code scanning, the loyalty card, submissions, forms, the user profile
Access to the photo gallerySubmissions, forms, and the profile picture
Foreground PositionMaps, events, push, forms that pick up an address
Background serviceThe audio player for podcasts and live streams, iBeacons
Advertising IDAnalytics and advertising tools

Read that column as an inventory. If a permission surprises you, look for the feature named next to it: that feature asked for it, not the platform.

The first tab of the Privacy Center. Under a bar of five tabs, a warning recalls that these permissions must be declared to the stores and that changing one means rebuilding and resubmitting the app. Below, a four-column table: a switch and the icon of the platform concerned, the name of the permission, its description, the feature that triggers it, and the message shown to the user when it is requested, editable, with a link back to the default wording.
The Usage column is the inventory: it names the feature that requests each permission.

The sentence your users are going to read

Every permission that interrupts the user carries a Message field. This is the text the system displays at the moment your app asks for access, and a default text is suggested.

That field deserves better than its default value, for a simple reason: it's the only place where you can explain why you're asking. A user who understands accepts, a user who doesn't refuses, and a refusal is paid for in degraded features. So write what the permission is for in your app, not what it is.

The Use default message link puts the original text back if you want to undo.

A change means recompiling

The screen says so itself: any change to permissions only reaches your users once your app has been recompiled and resubmitted to the stores. That's true of all three outputs, iOS, Android and the Progressive Web App.

This isn't a scheduling detail. It means this chapter is dealt with before your submission, not during it.

Chapter 2The screens, and which one concerns you

The Privacy center files its settings under tabs, and they don't all speak to every app.

TabIt concerns you if
PermissionsAlways. It's the inventory from the previous chapter
EU ConsentsYou run advertising or measure your audience, and you have European visitors
Age verificationYour app is published on the stores and its content isn't meant for all ages
Data PrivacyYou process personal data belonging to European residents
Terms and ConditionsYou publish a content app. A shop has its own screen, see below

EU Consents

The screen separates two mechanisms, because they don't apply in the same place.

For your native apps, the alert goes through Funding Choices, and it's switched on platform by platform, iOS, Android and Progressive Web App each having their own toggle, with your advertising account identifier to fill in. The screen leaves no doubt about what's at stake: without it, your ads stop being served to your European visitors.

For your Progressive Web App, it's the cookie alert. You choose between a quick consent and a detailed consent, you write its title and its text, you choose the page its link leads to, and you dress it in your logo, your main color and your font.

This chapter overlaps with "Making money with your content app", which covers the same screen from the advertising angle.

The second tab. A first block handles the consent notice of native apps through an external service, with a warning in bold: without that notice, ads stop being served to European visitors. Three switches follow, one per platform, the iOS one being on and followed by its advertising account field, blurred here. A second block, lower down, turns on the cookie notice of the web version.
Two separate mechanisms: native apps on one side, the web version on the other.

Age verification

This screen switches on age verification for native apps. Once it's on, your app adapts its features to the declared age and closes off the parts that aren't meant for minors.

It's the only one of these tabs that changes what your users see, rather than what you declare.

Data Privacy

Two contact blocks, each with a name, an address, a phone number and an email: your data protection officer, and your representative in the European Union. Fill in the ones that apply to you.

The same screen asks you to download and sign the data processing addendum, which is an integral part of the terms of service.

Terms and Conditions

This is the point where the two product lines diverge, and the confusion is common. A content app handles its terms and its privacy policy from a fifth tab of the Privacy center, and the guide "Charging for access to your content" describes that path. A shop doesn't have that tab: it has its own screen, Settings Terms and Conditions, where the shop's terms of sale and privacy policy are set.

Chapter 3The two store forms

Apple and Google both ask you to declare what your app collects, each in its own form. Our help center gives the step-by-step, screen by screen, including how to enter the address of your privacy policy on each side.

What matters here is where the answers come from.

Both forms ask their questions by data category: location, identifiers, in-app activity, photos and videos, personal information. And for almost every one of them, the answer depends on what you switched on. Location is only declared if the matching permission is active. A user identifier is only declared if you have authentication or in-app purchases. Advertising data is only declared if the advertising identifier is.

In other words, chapter 1 of this guide is the answer to the form. Take inventory first, fill in second, and you'll tick neither too much nor too little.

One point our help center states in black and white, and it bears repeating: you are responsible for the accuracy of what you declare. The platform tells you what it collects to make your app work, it doesn't know about the uses you add on top.

Chapter 4Timing

This whole guide comes down to a question of timing.

All four screens are set before submission. A change to permissions means recompiling and submitting again. A missing consent alert doesn't show up while you're building, it shows up when your ads stop being served in Europe, or when a reviewer rejects your app.

The cost of a rejection isn't the rejection itself, it's when it lands: once everything is built, announced, and often dated. A quarter of an hour on these four screens before you press the submit button saves you a round trip of several days.

And if a rejection comes anyway, our help center has a whole category for dealing with them, on Apple's side as well as Google's.