Servicio Apple iCloud
La API admite la recuperación de una variedad de datos y archivos de los servicios iCloud de Apple.
Sesiones
Configurar una sesión para los servicios de iCloud en la API es tan sencillo como iniciar sesión en una cuenta de iCloud. El proceso puede requerir múltiples intentos para crear la sesión si la cuenta ha habilitado la autenticación de múltiples factores, como 2FA o 2SV.
Crear una sesión para una cuenta sin 2FA / 2SV
La carga útil de la sesión para crear una sesión para una cuenta sin 2FA / 2SV habilitado contiene los siguientes parámetros.
nombre | tipo | descripción |
---|---|---|
password | cuerda | La contraseña de la cuenta de iCloud. |
Usando cURL
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>" } }'
Respuesta
{ "id": "<session ID>", "resource": "session", ... "state": "succeeded", "error": null, ... }
Crear una sesión para una cuenta con 2FA
Crear una sesión para una cuenta habilitada para 2FA es un proceso de dos pasos:
- Intente crear una sesión utilizando solo la contraseña de la cuenta de iCloud. Esto activará el proceso 2FA, que envía un código de autenticación a dispositivos iOS y macOS asociados con la cuenta. El intento de creación de sesión fallará con
error="code-required"
. - Use la contraseña de la cuenta de iCloud y el código de autenticación recibido en (1) para crear una sesión. Si se acepta el código, la sesión se creará con éxito.
Paso 1: crear sesión
nombre | tipo | descripción |
---|---|---|
password | cuerda | La contraseña de la cuenta de iCloud. |
Usando cURL
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>" } }'
Respuesta
Si el proceso 2FA se desencadena como se esperaba, la sesión no se creará con el error: code-required
.
{ "id": "<session ID>", "resource": "session", ... "state": "failed", "error": "code-required", ... }
Paso 2: crea una sesión con código
nombre | tipo | descripción |
---|---|---|
password | cuerda | La contraseña de la cuenta de iCloud. |
code | cuerda | El código de autenticación. |
Usando cURL
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>", "code": "<authentication code>" } }'
Respuesta
{ "id": "<session ID>", "resource": "session", ... "state": "succeeded", "error": null, ... }
Crear una sesión para una cuenta con 2SV
El proceso para crear una sesión para una cuenta habilitada para 2SV tiene tres pasos:
- Intente crear una sesión con la contraseña de la cuenta de iCloud. Como se requiere 2SV, esto fallará con
error="choice-required"
yerror_info={"choices": [<2SV enabled devices>]}
. - Intente crear una sesión nuevamente utilizando la contraseña de la cuenta de iCloud y una opción de la lista
error_info["choices"]
. Esta vez, el intento activará el proceso 2SV que envía un código de autenticación al dispositivo elegido. El intento fallará conerror="code-required"
. - Use la contraseña de la cuenta de iCloud y el código de autenticación recibido en (2) para crear una sesión. Si se acepta el código, la sesión se creará con éxito.
Esto activará el proceso 2SV, que envía un código de autenticación a los dispositivos iOS y macOS asociados con la cuenta. El intento de creación de sesión fallará con error="code-required"
.
Paso 1: crear sesión
nombre | tipo | descripción |
---|---|---|
password | cuerda | La contraseña de la cuenta de iCloud. |
Usando cURL
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>" } }'
Respuesta
Si 2SV está habilitado en la cuenta, el intento de creación de sesión fallará con la choice-required
error choice-required
.
{ "id": "<session ID>", "resource": "session", ... "state": "failed", "error": "choice-required", "error_info": { "choices": [ "********02 - SMS to Phone Number" ] } ... }
Paso 2: crear sesión con elección
nombre | tipo | descripción |
---|---|---|
password | cuerda | La contraseña de la cuenta de iCloud. |
choice | cuerda | El dispositivo elegido para enviar un código de autenticación. |
Usando cURL
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>", "choice": "********02 - SMS to Phone Number" } }'
Respuesta
Si el proceso 2FA se desencadena como se esperaba, la sesión no se creará con el error: code-required
.
{ "id": "<session ID>", "resource": "session", ... "state": "failed", "error": "code-required", ... }
Paso 3: crea una sesión con código
nombre | tipo | descripción |
---|---|---|
password | cuerda | La contraseña de la cuenta de iCloud. |
code | cuerda | El código de autenticación. |
Usando cURL
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>", "code": "<authentication code>" } }'
Respuesta
{ "id": "<session ID>", "resource": "session", ... "state": "succeeded", "error": null, ... }
Tipos de fuente
identificador | descripción |
---|---|
icloud.account | fuente primaria Corresponde a una cuenta de iCloud. |
Centro
El servicio de iCloud admite todos los atributos del esquema de carga útil de sondeo.
Recuperando información de origen
Este tipo de encuesta recupera información sobre el origen seleccionado. Los resultados se publican en formato JSON.
Usando cURL
curl https://ricloud-api.reincubate.com/polls \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "session": "<session ID>", "payload": { "info_types": ["*"] } }'
Usando * ricloud-py *
import ricloud # The ID of a session we made earlier. session_id = "<session ID>" poll = ricloud.Poll.create( session=session_id, payload={ "info_types": ["*"] } )
Recuperando datos
Este tipo de encuesta recupera y procesa datos de la sesión de destino. Los resultados se publican en formato JSON.
Consulte la lista de tipos de datos disponibles para obtener más información sobre tipos de datos específicos.
Usando cURL
curl https://ricloud-api.reincubate.com/polls \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "session": "<session ID>", "payload": { "data_types": ["icpl.photos"] } }'
Usando * ricloud-py *
import ricloud # The ID of a session we made earlier. session_id = "<session ID>" poll_payload = { "data_types": ["icpl.photos"] } poll = ricloud.Poll.create( session=session_id, payload=poll_payload, )
Recuperando archivos
El atributo de carga útil de sondeo de files
se utiliza para solicitar la recuperación de archivos binarios de la fuente de destino.
Los ID normalmente se recuperarán de una encuesta anterior para los tipos de datos que incluyen referencias directas a archivos, como iCloud Photo Library, o que incluyen archivos adjuntos, como los tipos de datos de mensajes.
Usando cURL
curl https://ricloud-api.reincubate.com/polls \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "session": "<session ID>", "payload": { "files": [ "icpl://ATnrIxddlwbCEjN33NBq8zXQwYgE", "icpl://AbfMRXQ55H4WfS5YguuUWxir4hq6" ] } }'
Usando * ricloud-py *
import ricloud # The ID of a session we made earlier. session_id = "<session ID>" poll_payload = { 'files': [ 'icpl://ATnrIxddlwbCEjN33NBq8zXQwYgE', 'icpl://AbfMRXQ55H4WfS5YguuUWxir4hq6', ] } poll = ricloud.Poll.create( session=session_id, payload=poll_payload, )
Tipos de datos
tipos de datos de iCloud
identificador | descripción |
---|---|
icpl.photos | Recupera los activos de iCloud Photo Library. |
mme_contacts.contacts | Recupera los datos de contactos de iOS almacenados en iCloud. |
mme_calendar.events | Recupera los datos del calendario iOS de iCloud almacenados. |
mme_notes.notes | Recupera los datos de iOS Notes almacenados en iCloud. |
callkit.calls | Recupera los datos del teléfono iOS sincronizados con CallKit. |
cloudkit_safari.history | Recupere los datos del historial del navegador Safari almacenados en iCloud. |
fmip.devices | Recupere el dispositivo Find My iPhone y los datos de ubicación. |
Biblioteca de fotos de iCloud
Fotos, videos y otros medios
Recupera información sobre fotos, videos y otros medios almacenados en iCloud Photo Library (ICPL).
Este módulo requiere que iCloud Photo Library esté habilitado en la cuenta de iCloud del usuario.
ID del tipo de datos | icpl.photos |
Entorno asociado | Settings > [username] > iCloud > Photos > iCloud Photo Library |
Atributos de datos
nombre | tipo | descripción |
---|---|---|
id | cuerda | Un identificador para el elemento de datos. Útil para deduplicar datos en múltiples encuestas. |
filename | cuerda | El nombre del archivo tal como está almacenado en ICPL. |
files | lista de elementos de image , video y audio | Archivos asociados con este activo ICPL. El archivo original, Live Photos, miniaturas se incluirán en esta lista. |
date_created | fecha y hora | Cuando el archivo fue creado originalmente. En el caso de fotos o videos tomados en un dispositivo iOS, esta será la fecha en que se tomaron. En el caso de los activos existentes importados a ICPL, esta será la fecha de importación original. |
date_uploaded | fecha y hora | Cuándo se cargó el archivo por última vez a ICPL. Esto corresponderá a cuando el archivo se pudo recuperar por primera vez a través de la API ricloud. |
local_date_created |
optional datetime | When the asset was originally created, in local time. This attribute is only populated if sufficient metadata is stored with the asset in ICPL, and is currently supported for parsing by the API. The value of this attribute can vary by a few seconds from that of date_created , as the two are determined from different sources. |
Filtros de datos
nombre | tipo | descripción |
---|---|---|
since | fecha y hora | Solo incluye elementos con una fecha de date_uploaded posterior al valor proporcionado. |
until | fecha y hora | Solo incluye elementos con una fecha de date_uploaded anterior al valor proporcionado. |
Data de muestra
[ { "id": "7f1384f5038255f5", "data_type": "icpl.asset", "filename": "IMG_0002.HEIC", "files": [ { "id": "icpl://AWo/lDeN8fEExAUJajRHzVx2j605", "data_type": "image", "extension": "heic", "size": 905818, "width": 4032, "height": 3024 }, { "id": "icpl://ASDPdJ/LvFWjsBy4YOOp7B5c+XOi", "data_type": "video", "extension": "mov", "size": 2456163, "width": 980, "height": 1308 }, { "id": "icpl://ASAwWOvwrvAUuO71uXcU6mm+nMU4", "data_type": "image", "extension": "jpg", "size": 595624, "width": 1536, "height": 2048 }, { "id": "icpl://ATy/qmemCas1jzYWuhR4mQywhpzz", "data_type": "image", "extension": "jpg", "size": 65407, "width": 360, "height": 480 } ], "date_created": "2020-09-18T12:32:17Z", "date_uploaded": "2020-09-18T12:41:19Z", "local_date_created": "2020-09-18T13:32:17+01:00" } ]
Contactos de MobileMe
Contactos
Recupera datos de contactos de iOS almacenados en iCloud.
ID del tipo de datos | mme_contacts.contacts |
Entorno asociado | Settings > [username] > iCloud > Contacts |
Atributos de datos
El tipo de datos mme_contacts.contact
hereda la mayoría de los atributos del tipo de datos de contact
base. La siguiente tabla describe atributos adicionales o diferentes.
nombre | tipo | descripción |
---|---|---|
id | cuerda | Un identificador para el elemento de datos. Útil para deduplicar datos en múltiples encuestas. |
data_type | cadena, siempre mme_contacts.contact | El tipo de datos del artículo. |
uid | cuerda | Un identificador único que se puede utilizar para deduplicar en diferentes fuentes de datos de contactos de iOS. |
image | elemento de image anidada, opcional | Imagen de perfil para el contacto. |
Data de muestra
[ { "id": "2cf6a837304d6614", "data_type": "mme_contacts.contact", "uid": "NzNlNjkxYjctOTBmYi00MTYxLWI5YzYtZTk0ZDlhZjljMmE5", "first_name": "John", "middle_name": "'Gala'", "last_name": "Appleseed", "prefix": "Mr.", "suffix": "Jr.", "nickname": "John'o", "records": [ { "type": "Phone", "name": "MAIN", "value": "1-800-MY-APPLE" }, { "type": "Phone", "name": "UK", "value": "0800 039 1010" }, { "type": "URL", "name": "HOMEPAGE", "value": "http://www.apple.com" }, { "type": "URL", "name": "HOMEPAGE", "value": "http://www.apple.com/uk/" }, { "City": "Cupertino", "State": "CA", "ZIP": "95014", "name": "WORK", "CountryCode": "US", "Country": "United States", "Street": "1 Infinite Loop", "type": "Address", "SubLocality": null, "Municipality": null } ], "organisation": "Apple Inc.", "department": "Marketing", "jobtitle": "VP Coring", "birthday": "1976-04-01", "image": { "id": "mme_contact_image://2cf6a837304d6614", "data_type": "image", "extension": "jpg" } } ]
MobileMe Calendar eventos mme_calendar.events
Recupera los datos del calendario iOS almacenados en iCloud.
Notas de MobileMe Notes mme_notes.notes
Recupera los datos de iOS Notes almacenados en iCloud.
CallKit
Llamadas desde CallKit callkit.calls
Recupera los registros de llamadas sincronizados con el servicio CallKit.
Los errores
callkit-uninitialised
Indica que el servicio CallKit no se ha configurado para esta cuenta. El propietario de la cuenta de iCloud puede resolver este error utilizando un dispositivo iOS asociado con la cuenta de iCloud a través de los siguientes pasos: - Asegúrese de que el dispositivo esté conectado a Wi-Fi. - Vaya a Settings > [username] > iCloud
. - Apague iCloud Drive, esperando entre 30 y 60 segundos para que el cambio surta efecto. - Encienda iCloud Drive una vez que se haya completado el cambio anterior. Esto debería desencadenar la inicialización.
Si el error persiste después de realizar este proceso, póngase en contacto con el servicio de asistencia.
callkit-sync-disabled
En este caso, el servicio CallKit se ha inicializado, pero no se han cumplido las condiciones necesarias para que los dispositivos comiencen a sincronizar el historial de llamadas con iCloud. La API resolverá esto de forma remota a través de iCloud, pero el dispositivo asociado con la cuenta de iCloud puede que no vuelva a evaluar su estado de sincronización, ya que se almacena en caché.
El propietario de la cuenta de iCloud puede activar un dispositivo para volver a verificar las condiciones de sincronización del historial de llamadas a través de los siguientes pasos:
- Vaya a
Settings > [username] > iCloud
. - Apague iCloud Drive, esperando de 30 a 60 segundos para que el cambio surta efecto.
- Active iCloud Drive una vez que se haya completado el cambio anterior. Esto debería desencadenar la inicialización.
Solución de problemas
- El historial de llamadas recientes no se está devolviendo en los resultados de la encuesta.
Esto suele deberse a que el dispositivo no ha sincronizado sus últimos registros de historial de llamadas con iCloud. El servicio CallKit es un servicio interno de iOS y no puede activarse o desactivarse en la configuración o activarse para sincronizarse manualmente. Esto puede dificultar la depuración de los datos faltantes, ya que no está claro qué ha sincronizado o no el dispositivo con iCloud.
Este problema es más común para las cuentas que no tienen mucha información para sincronizar (menos de ~ 3 llamadas), que a menudo puede ser el caso de las cuentas de prueba.
Recomendaciones:
- Asegúrese de que el dispositivo tenga más de un puñado de registros de historial de llamadas para sincronizar. Nuestras pruebas han demostrado que un dispositivo con solo un par de registros del historial de llamadas no activará el proceso de sincronización de iCloud.
- Espere a que el dispositivo realice una sincronización periódica. Esto puede llevar hasta 12 horas, dependiendo de cómo se use el dispositivo, su estado de conectividad y su estado de carga.
Conecte el dispositivo a la corriente. Es más probable que el dispositivo active una sincronización cuando se encuentra en este estado.
El historial de llamadas antiguo no se devuelve en los resultados de la encuesta.
El servicio CallKit está diseñado para sincronizar los registros del historial de llamadas entre dispositivos y no para almacenar estos registros por tiempo indefinido. Por lo general, los registros del historial de llamadas se podrán recuperar de CallKit durante aproximadamente 3 meses, pero esto puede variar de una cuenta a otra en función de los procesos de limpieza internos en iCloud.
CloudKit
Historial del navegador de iCloud cloudkit_safari.history
Recupere los datos históricos del navegador Safari almacenados en el servicio de sincronización de iCloud.
Encuentra mi y encuentra mi iPhone
Ubicaciones del dispositivo
Recupere Buscar mi dispositivo y datos de ubicación.
Tenga en cuenta que este tipo de datos puede requerir múltiples encuestas, con el segundo próximo ~ 10-30 segundos después del primero, para devolver datos completos. Esto se debe a cómo funciona Find My: la primera encuesta activará Find My para solicitar nuevos datos de dispositivos accesibles, pero los datos no estarán disponibles por otros 10-30 segundos.
ID del tipo de datos | fmip.devices |
Entorno asociado | Settings > [username] > Find My |
Atributos de datos
nombre | tipo | descripción |
---|---|---|
id | cuerda | Un identificador para el elemento de datos. Útil para deduplicar datos en múltiples encuestas. |
data_type | cadena, siempre fmip.devices | El tipo de datos del artículo. |
name | cuerda | El nombre establecido por el usuario para el dispositivo. |
model_name | cuerda | Nombre comercial de Apple para el modelo de dispositivo. |
model_identifier | cuerda | Identificador de Apple para el modelo de dispositivo. |
product_type | cuerda | La categoría del producto del dispositivo. |
location | location anidada opcional | La última ubicación informada para el dispositivo, si hay una disponible. |
battery_status | cuerda | El estado actual de la batería del dispositivo. |
battery_level | flotador | Si se conoce, el porcentaje de carga restante de la batería. |
Data de muestra
[ { "id": "e7694d7a0d2ab6cf", "data_type": "fmip.device", "name": "John's iMac", "model_name": "iMac with Retina 5K display", "model_identifier": "iMac15,1", "product_type": "iMac", "location": null, "battery_status": "Unknown", "battery_level": 0.0 }, { "id": "4d86a6181808d152", "data_type": "fmip.device", "name": "John's iPhone 11", "model_name": "iPhone 11", "model_identifier": "iPhone6,2", "product_type": "iPhone", "location": { "data_type": "location", "latitude": 51.507452392689146, "longitude": -0.07398372304584414, "altitude": 0.0, "horizontal_accuracy": 65.0, "vertical_accuracy": 0.0, "positioning_type": "Wifi", "date_created": "2020-01-01T00:00:00.000000Z" }, "battery_status": "Unknown", "battery_level": 0.0 } ]
Tipos de archivo
identificador | descripción |
---|---|
icpl | Un archivo de iCloud Photo Library. |
mme_contact_image | Una imagen de perfil de contacto mme_contacts.contacts . |