How to Properly Request Full Access to Contacts After User Selects Limited Access?

Hello Apple Developers,

I’m developing an iOS app that requires access to the user’s contacts. I understand that starting from iOS 14, Apple introduced two levels of contact permissions: 1️⃣ Full Access – The app can read all contacts. 2️⃣ Limited Access – The app can only access contacts selected by the user.

My Question: If a user initially grants Limited Access, is it allowed by Apple’s guidelines to request Full Access later?

🔹 I understand that re-requesting permission immediately after the user denies it is against Apple’s policies. 🔹 However, if the user has already granted Limited Access, and we first show an explanation modal explaining why Full Access is beneficial, can we then prompt them to change their settings via openAppSettings()? 🔹 Alternatively, can we use Permission.contacts.request() again to re-prompt the user for Full Access, or will iOS prevent the permission prompt from appearing again?

How We Handle This in the App: 1️⃣ If a user selects Limited Access, we respect their choice and only access their selected contacts. 2️⃣ Later, if Full Access is necessary for an enhanced experience, we display a clear explanation modal explaining why the app needs Full Access. 3️⃣ If the user agrees, we attempt to guide them to openAppSettings(), allowing them to manually change the permission. 4️⃣ However, if Permission.contacts.request() can be used to directly request Full Access again, we would like to know if this is acceptable.

We want to ensure that our implementation follows Apple’s privacy guidelines while providing the best user experience.

Any official guidance or best practices on this matter would be greatly appreciated.

Thank you in advance!

I understand that re-requesting permission immediately after the user denies it is against Apple’s policies. ...Alternatively, can we use Permission.contacts.request() again to re-prompt the user for Full Access, or will iOS prevent the permission prompt from appearing again?

The system remembers your app’s authorization status so that subsequent calls to requestAccess(for:completionHandler:) or requestAccess(for:) don’t prompt the person again.

However, if the user has already granted Limited Access, and we first show an explanation modal explaining why Full Access is beneficial, can we then prompt them to change their settings via openAppSettings()?

You can prompt them to change their permission settings. However, the user may choose to not change it.

If a user selects Limited Access, we respect their choice and only access their selected contacts

Use ContactAccessButton to let people choose contacts to share with your app. If your app needs to read or modify contacts, consider presenting the contact access picker to let people update which contacts you can access. For more information, see Use Contacts with limited access.

How to Properly Request Full Access to Contacts After User Selects Limited Access?
 
 
Q