What each platform can do
Read this page before you start. It saves you from planning a feature the operating system does not allow.Naming a caller on the incoming call screen is not something an app can do on its own. Apple and Google each own that screen, and each hands over control in a different way, with different limits.Side by side#
| Android | iOS 18 and later | iOS 13 to 17 |
|---|
| Name on the call screen | A card over the call screen | Yes, in the system call screen | No |
| Block spam automatically | Yes | Yes | Yes, from a downloaded list |
| Who must approve | The user, in one prompt | The user, plus Apple in advance | The user |
| Setup time | About 30 minutes | About half a day | About 2 hours |
| Works in a simulator | Partly | No | No |
Android#
The user grants your app the call screening role. Once granted, Android asks your app about every incoming call, and your app can reject the call.The SDK ships the screening service and the manifest entry, so you write no service code. You write the prompt that asks the user for the role.Android does not let an app write into the system call screen. To show a name, the SDK draws a card on top of it, which needs a second permission.iOS 18 and later: Live Caller ID#
Apple added a way for an app to answer "who is this" for an incoming call, without the app or the server learning the number. Your app ships a small extension. iOS asks that extension, and shows the answer in its own call screen.This is the best result available on iOS, and it is the longest setup:1.
Apple must approve your use of the feature before it works outside your own device.
2.
You add a second target to your Xcode project, with its own bundle identifier, entitlements, and build settings.
3.
The user must switch your app on in Settings > Apps > Phone > Call Blocking & Identification.
Several of these steps fail silently. The usual symptom is that your app never appears in that Settings screen, with no error anywhere.iOS 13 to 17: Call Directory#
Older iOS versions cannot ask your app a question during a call. They can only read a list your app prepared in advance.Your app downloads an encrypted block list and hands it to iOS. iOS blocks those numbers with no further help. Numbers outside the list ring normally, and get no name.This still needs an extension target, and the same signing work as Live Caller ID. Ship it alongside Live Caller ID if you support iOS 17.What to do if half a day is too much#
Ship the quickstart on its own. It names callers in your own recent calls list, contact cards, and search results. That needs none of the setup on this page, and it works the same on every platform.You can add call screening later. Nothing in the quickstart changes when you do.Order of work#
Do these in order. Each step is testable, so you find the problem near where you made it.1.
Finish the quickstart and confirm a lookup returns a name. 2.
Do Android first if you ship both. It is shorter, and it proves your credentials are right before you start the Xcode work.
3.
On iOS, request Apple's approval first. It is the only step you cannot rush, and nothing you build works outside your own device until it lands.
Modified at 2026-07-29 20:22:34