Obtenga el número de teléfono de las llamadas entrantes en el iPhone

Estoy intentando get identificador de llamadas (número de teléfono) en el momento de la llamada entrante. TrueCaller ha implementado esto y obtienen el número de teléfono de la persona que llama.

He encontrado esta información: 1. CoreTelephony Framework (Da solo estados de llamada) 2. Actualización de Apple 9.0: "Tal vez" contactos de synchronization. con la aplicación de correo y detecta el número de teléfono entrante.

###EDITAR###

iOS 10 y superior:

Use Callkit , eche un vistazo a la extensión del directory de llamadas

Según la documentation,

Identificación de las llamadas entrantes

Cuando un teléfono recibe una llamada entrante, el sistema primero consulta los contactos del usuario para encontrar un número de teléfono coincidente. Si no se encuentra ninguna coincidencia, el sistema consultará la extensión de Directorio de llamadas de su aplicación para search una input coincidente para identificar el número de teléfono. Esto es útil para las aplicaciones que mantienen una list de contactos para un usuario que está separado de los contactos del sistema, como una networking social, o para identificar las llamadas entrantes que pueden iniciarse desde la aplicación, como por ejemplo, para soporte de service al cliente o una notificación de entrega .

Por ejemplo, considere a un usuario que es amigo de Jane en una aplicación de networkinges sociales, pero no tiene su número de teléfono en sus contactos. La aplicación de networkinges sociales tiene una extensión de directory de llamadas, que descarga y agrega los numbers de teléfono de todos los amigos del usuario. Debido a esto, cuando el usuario recibe una llamada entrante de Jane, el sistema muestra algo como "(Nombre de la aplicación) Identificador de llamadas: Jane Appleseed" en lugar de "Llamadas desconocidas".

Para proporcionar información de identificación sobre las personas que llaman entrantes, usa el método addIdentificationEntry (withNextSequentialPhoneNumber: label 🙂 en la implementación de beginRequest (con :).

class CustomCallDirectoryProvider: CXCallDirectoryProvider { override func beginRequest(with context: CXCallDirectoryExtensionContext) { let labelsKeyedByPhoneNumber: [CXCallDirectoryPhoneNumber: String] = [ … ] for (phoneNumber, label) in labelsKeyedByPhoneNumber.sorted(by: <) { context.addIdentificationEntry(withNextSequentialPhoneNumber: phoneNumber, label: label) } context.completeRequest() } } 

Debido a que este método se llama solo cuando el sistema inicia la extensión de la aplicación y no para cada llamada individual, debe especificar la información de identificación de la llamada de una vez; no puede, por ejemplo, hacer una request a un service web para search información sobre una llamada entrante.

iOS 9 y versiones anteriores:

Como mencionó Kakshil, la Identificación del llamante no es posible en dispositivos sin jailbreak.

Y le daré algunos hallazgos sobre cómo funciona el verdadero llamador,

  1. No está leyendo el historial de llamadas, realmente creó la extensión de acción , donde quiera que intente compartir un contacto, mostrará la extensión de la aplicación truecaller, que codificó para mostrar los detalles de contacto que se obtuvieron de su server

  2. Es posible que también te confundas con la notificación de inserción recibida para pocas llamadas, diciendo "Alguna X te llama". Aquí es donde Truecaller usó un truco. Si notaste claramente, esa notificación de inserción solo se recibirá cuando recibas una llamada de un usuario de Android con Truecaller instalado. Déjame explicarte en detalle,

X (usuario de Android con truecaller instalado), llamando a Y (usuario de ios con truecaller instalado), la versión de Android notifica al server que X hace una llamada a Y. Y el server enviará notificación de inserción al iPhone de Y.

La identificación de llamadas no es posible en dispositivos sin jailbreak.

Sin embargo, hay una forma, en la que puede saber qué usuario está llamando, pero no estoy seguro de si será útil para usted.

Si tiene un dispositivo bluetooth, conectado al iPhone, recibirá todas las notifications, incluidas las llamadas entrantes, para las que puede get la identificación de llamadas.

Aparte de esto, actualmente no existe otra forma de conocer la ID llamada.