Servicio Apple iCloud (v2)

Actualizado

La API de ricloud icloud servicio proporciona funcionalidad para acceder a la información almacenada en el iCloud, tanto en forma de lotes de copias de seguridad de dispositivos iOS, y en tiempo real y casi en tiempo de otras fuentes. La API ha admitido el acceso a iCloud desde su versión original.

Hay cuatro operaciones principales que un cliente puede necesitar realizar con el servicio iCloud.

  • Autenticación: log-in , perform-2fa-challenge , submit-2fa-challenge
  • Enumeración de dispositivos: list-devices
  • Solicitando feeds: fetch-data
  • Solicitando archivos en bruto: download-file

Trabajando con datos simulados desde la API

Con el fin de ayudar al desarrollo de las integraciones con la API, se pone a disposición una cuenta simulada con un conjunto de datos enriquecidos. Esto permite a los clientes probar muchas de las funciones de la API de ricloud sin necesidad de trabajar con datos de usuarios reales.

La cuenta simulada se llama Jonny Appleseed y se puede acceder utilizando la ID de cuenta de iCloud john.appleseed@reincubate.com y la contraseña joshua .

Autenticación

Iniciar log-in : log-in

El primer paso para interactuar con el servicio icloud es iniciar sesión.

Para la solicitud, debemos especificar:

  • El service para interactuar con: icloud
  • La action a realizar: log-in
  • La account parámetros, que representa el ID de cuenta de iCloud, como john.appleseed@reincubate.com
  • Los parámetros de acción requeridos por la acción, que en este caso es solo una password
  • También podemos especificar los parámetros de acción opcionales enumerados por /account/ endpoint
$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>"
    -d "service=icloud" \
    -d "action=log-in" \
    -d "account=<ACCOUNT>" \
    -d "password=<PASSWORD>" \
    <TASK_SUBMISSION_ENDPOINT>

El punto final asapi responderá, en formato JSON:

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_1>"
}

Si está conectado al stream_endpoint correcto en el punto final de un canal , verá un resultado que coincide con el <TASK_ID_1> que recibió del punto final de asapi .

{ "message": "Log-in successful",
  "auth_token": "ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG",
  "success": true
}

Los resultados incluirán un parámetro de success que será verdadero si la tarea de inicio de sesión tuvo éxito, junto con un mensaje y un token de autenticación de Apple para usar con otras acciones de servicio.

Solución de problemas de inicio de sesión

Consulte la sección sobre respuestas de error de inicio de sesión para obtener definiciones y soluciones de errores.

2FA y 2SV

Después de intentar iniciar sesión en una cuenta de iCloud que está configurada con 2SV o 2FA, el inicio de sesión normal fallará y se mostrará un mensaje de error similar al que se muestra a continuación.

{ "message": "This account has Two Step Verification enabled, please select a device to challenge.",
  "data": {
    "trustedDevices": ["********12", "Renate's iPhone - iPhone 6s"],
  },
  "error": "2fa-required"
}

El diccionario de data contendrá una lista de dispositivos, codificada por device_id . Estos son los dispositivos en los que la cuenta de iCloud confía para realizar el siguiente paso de autenticación.

Para la verificación de dos pasos (2SV)

En el caso de 2SV, la lista de trustedDevices contendrá uno o más dispositivos. Los clientes deben seleccionar un dispositivo listado para desafiar.

Esto se realiza ejecutando perform-2fa-challenge con challenge establecido en la clave del dispositivo elegido desde trustedDevices .

Para la autenticación de dos factores (2FA)

En el caso de 2FA, la lista de trustedDevices de trustedDevices se establecerá en ["Challenge all 2FA devices"] , lo que indica que se debe enviar un desafío a todos los dispositivos iOS conectados a esa cuenta. Esto se realiza ejecutando perform-2fa-challenge con challenge establecido en el valor de ["Challenge all 2FA devices"] .

Utilizando perform-2fa-challenge

Este método enviará una solicitud en tiempo real a todos los dispositivos en la cuenta en el caso de 2FA, o el dispositivo elegido en el caso de 2SV.

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>"
    -d "service=icloud" \
    -d "action=perform-2fa-challenge" \
    -d "challenge=<TRUSTED_DEVICE>" \
    <TASK_SUBMISSION_ENDPOINT>

<TRUSTED_DEVICE> must be set to a device_id, or to "Challenge all 2FA devices"

asapi responderá como siempre:

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_X>"
}

El punto final de recuperación responderá con:

{ "message": "Challenge has been submitted.",
  "success": true
}

Una vez que el desafío se ha enviado al dispositivo del usuario, el código de dos factores debe retransmitirse a la API utilizando submit-2fa-challenge . En la solicitud a continuación, <CODE> es el código numérico proporcionado por el usuario final, que representa los códigos transmitidos al dispositivo para el inicio de sesión de 2FA / 2SV.

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>"
    -d "service=icloud" \
    -d "action=submit-2fa-challenge" \
    -d "code=<CODE>" \
    <TASK_SUBMISSION_ENDPOINT>

asapi responderá como siempre:

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_X>"
}

El punto final de recuperación responderá con un mensaje de inicio de sesión normal:

{ "message": "Log-in successful",
  "auth_token": "ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG",
  "success": true
}

Actualizar un inicio de sesión de cuenta utilizando tokens de autenticación

ricloud proporciona tokens de autenticación para usar en la actualización de inicios de sesión sin la necesidad de usar credenciales completas de iCloud. Los usuarios del mecanismo de tokenización no necesitan conservar ninguna credencial de usuario.

Para hacer esto, los clientes deben usar el campo auth_token recuperado durante el inicio de sesión. Esto debe enviarse al punto final de acción del servicio de refresh-session .

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>"
    -d "service=icloud" \
    -d "action=refresh-session" \
    -d "auth_token=<ICLOUD_AUTH_TOKEN>" \
    <TASK_SUBMISSION_ENDPOINT>

Con esto hecho, cualquier acción de servicio se puede realizar contra el servicio.

Enumeración de dispositivos

Enumeración de dispositivos: list-devices

Al iniciar sesión en una cuenta, los clientes pueden enumerar los dispositivos y las copias de seguridad del dispositivo asociadas con la cuenta de iCloud. Esto se hace ejecutando la acción list-devices contra el servicio iCloud.

Esto se hace de la misma manera que cualquier otra acción de servicio. Aquí hay un ejemplo de solicitud de curl para esta acción. El parámetro <ACCOUNT> continuación se puede completar con un ID de cuenta, como john.appleseed@reincubate.com .

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>"
    -d "service=icloud" \
    -d "action=list-devices" \
    -d "account=<ACCOUNT>" \
    <TASK_SUBMISSION_ENDPOINT>

El punto final asapi responderá, en formato JSON:

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_2>"
}

Su resultado aparecerá en breve en el punto final de recuperación. A continuación se muestra un ejemplo de respuesta:

{ "auth_token": "ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG",
  "devices": {
    "<DEVICE_ID_1>": {
      "ios_version": "10.0",
      "colour": "1",
      "device_name": "Johnny's iP7 iOS10 Black",
      "latest-backup": "2016-09-16 14:08:13.000000",
      "model": "D101AP",
      "serial": "ABC123AAAAAA",
      "name": "iPhone 7"
    },
    "<DEVICE_ID_2>": {
      "ios_version": "9.1",
      "colour": "#e1e4e3",
      "device_name": "Johnny's iPad",
      "latest-backup": "2016-11-16 16:36:33.000000",
      "model": "J98aAP",
      "serial": "ABC123BBBBBB",
      "name": "iPad Pro"
    },
    "<DEVICE_ID_3>": {
      "ios_version": "9.2.1",
      "colour": "#3b3b3c",
      "device_name": "Johnny's other iPhone",
      "latest-backup": "2016-06-16 16:00:49.000000",
      "model": "N49AP",
      "serial": "DFVDASDDSVAS",
      "name": "iPhone 5c"
    },
    "<DEVICE_ID_4>": {
      "ios_version": "9.0.2",
      "colour": "#e1e4e3",
      "device_name": "Johnny's white iPhone",
      "latest-backup": "2016-02-25 15:37:38.000000",
      "model": "N61AP",
      "serial": "HYTWGFHGHDSF",
      "name": "iPhone 6"
    }
  }
}

Esta respuesta contiene el auth_token para la sesión de iCloud de la cuenta especificada, junto con una lista de dispositivos asociados con esa cuenta en la sección de devices . Cada entrada de dispositivo contiene las siguientes claves:

  • ios_version : la versión iOS del dispositivo
  • colour : el color del dispositivo como un código hexadecimal
  • device_name : el nombre del dispositivo definido por el usuario
  • latest-backup : la fecha en que se realizó la latest-backup del dispositivo en iCloud
  • model : el número de modelo del dispositivo
  • serial : el número de serie del dispositivo
  • name : el name del producto del dispositivo como lo anuncia Apple

Solicitando feeds

Recuperación de los datos de alimentación: datos de fetch-data

La acción de fetch-data se utiliza para acceder a las fuentes de datos JSON desde la API. Requiere los siguientes parámetros:

  • device : el dispositivo para recuperar datos de o sobre
  • data : Un CSV de los módulos de alimentación solicitados.

Los parámetros opcionales son:

  • since : el período de tiempo desde el cual los resultados deben corresponder

A continuación se muestra un ejemplo fetch-data acción de fetch-data .

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>" \
    -d "service=icloud" \
    -d "action=fetch-data" \
    -d "account=<ACCOUNT>" \
    -d "device=<DEVICE_ID>" \
    -d "data=<FEED_MODULES>" \
    <TASK_SUBMISSION_ENDPOINT>

<FEED_MODULES> can be any of the feed modules listed in feed modules.

Por ejemplo, al usar el valor sms en <FEED_MODULES> en el comando anterior, se puede acceder a SMS, MMS e iMessages en una copia de seguridad. Usando el valor sms,whatsapp_messages,snapchat_messages en <FEED_MODULES> en el comando podemos acceder a SMS, MMS e iMessages, mensajes de WhatsApp y mensajes de Snapchat, todo en el mismo resultado JSON.

El asapi responderá con:

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_3>"
}

Poco después, los resultados aparecerán en el punto final de resultados con el mismo task_id :

{ "sms": [
    { "group_handles": [
        "+441234567890",
        "renate@reincubate.com"
      ],
      "attachments": [],
      "deleted": false,
      "text": "Welcome to Vodafone!",
      "conversation_id": "vodafone",
      "from_me": false,
      "date": "2015-10-28 09:18:17.000000",
      "handle": "vodafone",
      "type": "SMS",
      "id": 6
    }
  ]
}

Otros módulos de alimentación proporcionan información que se puede utilizar para acceder a otras formas de contenido. Por ejemplo, una acción de <FEED_MODULES> fetch-data que usa 'fotos' como <FEED_MODULES> para un dispositivo dado se vería así:

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>" \
    -d "service=icloud" \
    -d "action=fetch-data" \
    -d "account=<ACCOUNT>" \
    -d "device=<DEVICE_ID>" \
    -d "data=photos" \
    <TASK_SUBMISSION_ENDPOINT>

Hará que asapi responda con:

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_4>"
}

El siguiente resultado aparecerá en el punto final apropiado:

{ "photos": [{
    "file_path": "Media/DCIM/100APPLE/IMG_0001.PNG",
    "last_modified": "2016-10-05 10:24:03.000000",
    "file_id": "c8ada38b9acf7368c6347be1c353dc68ed2c7741",
    "filename": "IMG_0001.PNG"
  }, {
    "file_path": "Media/DCIM/100APPLE/IMG_0002.MOV",
    "last_modified": "2016-10-11 09:39:25.000000",
    "file_id": "5c3e35cc01689340a34d13d34a0591e2ed450e63",
    "filename": "IMG_0002.MOV"
  }]
}

Formatos de alimentación JSON

Los feeds JSON están diseñados para ser lo más sencillos de analizar que sea posible. La fuente devolverá todos los tipos de datos solicitados en una sola respuesta.

Cada módulo de alimentación especificado en el indicador de módulo tendrá su propia clave en el diccionario JSON de nivel superior que se devuelve.

{
    "first_module_name": "Module's data",
    "second_module_name": "Module's data",
    "etc.": "etc."
}

Solicitando archivos en bruto

Recuperación de archivos en bruto: download-file

La acción de download-file está disponible para descargar archivos o adjuntos de mensajes directamente desde iCloud. Los parámetros necesarios son el objetivo <DEVICE_ID> y un <FILE_ID> .

Algunos de los módulos de alimentación, incluidos la lista de file_list y los módulos de fotos, contienen referencias a archivos o archivos adjuntos disponibles para descargar. Estos contienen un <FILE_ID> usa para identificar y descargar el archivo y, a menudo, algunos metadatos adicionales, como filename , file_path , size y type . Por favor, consulte los extractores de información para más detalles.

El comando

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>" \
    -d "service=icloud" \
    -d "action=download-file" \
    -d "account=<ACCOUNT>" \
    -d "device=<DEVICE_ID>" \
    -d "file=<FILE_ID>" \
    <TASK_SUBMISSION_ENDPOINT>

asapi responderá con:

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_5>"
}

Poco después aparecerán los resultados en el punto final con el mismo task_id .

Solución de problemas de respuestas de error

Respuestas de error generales

La siguiente tabla muestra los códigos de error que cualquier acción puede provocar.

Respuesta Resumen
task-failed Falla desconocida
deactivated-account Cuenta desactivada
deactivated-device Dispositivo desactivado
client-account-disabled Token de API deshabilitado
account-locked Cuenta bloqueada
account-credentials-blocked Cuenta bloqueada y protegida
push-api-timeout Tiempo de espera interno
icloud-unauthorised Tiempo de espera de sesión de Apple
service-inactive-error Servicio de Apple sin inicializar.

Falla desconocida

La tarea de inicio de sesión falló y la razón era desconocida. En caso de falla de la tarea con este código, los clientes deben comunicarse con el equipo de soporte .

Cuenta desactivada

Esto significa que la cuenta se ha desactivado mediante el comando de administración de desactivación de cuenta. No será accesible a menos que se envíe un comando de activación manual.

Dispositivo desactivado

Esto significa que el dispositivo se ha desactivado mediante el comando de administración de desactivación del dispositivo. No será accesible a menos que se envíe un comando de activación manual.

Token de API deshabilitado

El token que se usa para acceder a la API se ha deshabilitado, comuníquese con el equipo de soporte.

Tiempo de espera interno

Si la sesión de la API caduca al realizar otras acciones de servicio, los clientes recibirán el código de error: push-api-timeout y deben iniciar sesión nuevamente.

{ "message": "Unable to recover the session. Please re-login and try again",
  "error": "push-api-timeout"
}

iCloud no autorizado

Si la sesión con Apple ha caducado antes o se invalida durante una acción, la acción tendrá que abortarse y la sesión debe restablecerse volviendo a autenticarse a través de una nueva tarea de log-in . El uso de refresh-session no funcionará en este caso, ya que el token utilizado para esta llamada está vinculado a la sesión con Apple, que ahora está vencida.

En ciertos casos, una sesión puede caducar parcialmente. Por ejemplo, list-devices siguen devolviendo una list-devices actualizada y válida, pero fetch-data fallan con icloud-unauthorised . En este caso, la sesión puede seguir utilizándose para datos accesibles, pero debe actualizarse completamente mediante una tarea de log-in para obtener más datos.

Error de servicio inactivo

Esta respuesta se devuelve si la API intentó inicializar un servicio pero recibió una respuesta de Apple que indica que no se ha desactivado en la cuenta del usuario. Verifique la configuración correspondiente para el tipo de datos que se consulta y asegúrese de que esté activado e inicializado.

Respuestas de error de inicio de sesión

La siguiente tabla muestra los códigos de error que pueden plantearse las acciones de log-in y submit-2fa-challenge además de los códigos generales anteriores.

Respuesta Resumen
unable-to-login Las credenciales son incorrectas
2fa-required 2FA requerido
invalid-2fa-code Código 2FA no válido
too-many-2fa-requests 2FA tasa limitada
account-locked Cuenta bloqueada
account-credentials-blocked Cuenta bloqueada y protegida
terms-of-service-update-client Términos de servicio no aceptados
session-creation-error Error recuperable durante la inicialización de la sesión.
session-corrupt-error Error no recuperable durante la inicialización de la sesión.

Las credenciales son incorrectas

Las credenciales especificadas para la cuenta eran incorrectas y la autenticación no es posible.

2FA requerido

Iniciar sesión en cuentas que usan autenticación de dos factores (2FA) o verificación de dos pasos (2SV) requiere algunos pasos adicionales. Consulte las secciones "2FA y 2SV" a continuación.

Código 2FA no válido

Se envió un código 2FA inválido o incorrecto en respuesta al desafío 2FA.

2FA tasa limitada

Se han enviado demasiadas solicitudes 2FA recientemente para la cuenta: se ha limitado la tasa. Vuelva a intentarlo después de 30 minutos.

Cuenta bloqueada

La cuenta de iCloud ha sido bloqueada por Apple. Si se realiza otro intento para acceder a la cuenta en un corto período de tiempo, en su lugar se devolverá un error account-credentials-blocked .

Cuenta bloqueada y protegida

La cuenta de iCloud ha sido bloqueada por Apple y ricloud ya ha informado al cliente con la account-locked . Este mensaje se sustituye para indicar que el servicio no está retransmitiendo la solicitud a Apple.

Términos de servicio no aceptados

La cuenta de iCloud está deshabilitada en espera de la aceptación de los términos y condiciones más recientes de iCloud. El usuario puede aceptarlos en su dispositivo o iniciando sesión en icloud.com.

Error de creación de sesión

El backend de iCloud respondió con un error durante la inicialización de la sesión, pero volver a intentarlo probablemente solucionará el problema y tendrá éxito.

Error de sesión corrupta

El backend de iCloud respondió con un error durante la inicialización de la sesión y el reintento no generará un resultado diferente. Póngase en contacto con el servicio de asistencia técnica (preferiblemente con credenciales de cuenta) para que este caso perimetral se pueda investigar.

¿Cómo podemos ayudar?

¡Nuestro equipo de soporte está aquí para ayudar!

Nuestro horario de atención es de lunes a viernes de 9 a.m. a 5 p.m. GMT. El tiempo es actualmente 7:41 AM GMT.

Intentamos responder todos los mensajes en un plazo de un día laboral.

Ir a la sección de soporte › Póngase en contacto con el equipo de la empresa. ›
Nuestro increíble equipo de soporte.

© 2008 - 2019 Reincubate Ltd. Todos los derechos reservados. Registrado en Inglaterra y Gales #5189175, VAT GB151788978. Reincubate® es una marca registrada. Términos y privacidad. Recomendamos la autenticación de múltiples factores. Construido con en Londres.