API iCloud (v1)

Mis à jour

Cette documentation couvre l'utilisation de l'ancienne API iCloud de Reincubate.

Vue d'ensemble

L'API - et en particulier les flux - offre un certain nombre d'avantages substantiels:

  • Facilité d'intégration . L’API est simple à utiliser pour les équipes de développement, quel que soit leur niveau. Elles évitent aux clients d’avoir des connaissances très spécialisées sur le stockage iCloud / CloudKit ou sur les applications tierces.

    Cet avantage n’est pas facilement surestimé: la complexité de développement et de maintenance d’une interface vers iCloud est considérable et s’ajoute la nécessité de prendre en charge plusieurs formats de données pour les fichiers de données et applications iOS principaux. Non seulement iOS utilise différents formats de données, mais chaque application (par exemple, WhatsApp) utilise un ensemble de formats et de structures de données qui peuvent changer de semaine en semaine avec les mises à jour des applications.

    L'API prend en charge toutes les fonctionnalités "difficiles" : iOS 9, iOS 10, CloudKit, fusion iCloud 8 + 9, 2SV / 2FA, instantanés partiels, création de jetons, A9 et A9X.

  • Vérification future . Reincubate s'est engagé à maintenir la prise en charge des formats de données iCloud et iOS actuels et passés, et possède une solide expérience dans cet espace:

    • 1er à prendre en charge l'accès aux données iOS (2008)
    • 1er à prendre en charge l'accès crypté aux données iOS (2009)
    • 1er à prendre en charge l'extraction de données iCloud (2011)
    • 1er et unique avec une API pour prendre en charge l' accès aux données iCloud / CloudKit iOS 9 (2015)
  • Support et accès à une expertise inégalée . En conséquence de la concentration et du positionnement de la société en tant que société de données d'applications , l'équipe de Reincubate possède une expérience et des connaissances inégalées dans le domaine. Cette expérience est particulièrement intéressante pour les clients explorant de nouvelles applications et des cas d'utilisation.

    Les utilisateurs des flux JSON sont en mesure de tirer parti des techniques exclusives de Reincubate pour l'extraction et la suppression des données d'application, de sorte que les données résultantes soient plus précises.

  • Prise en charge de l'application prête à l'emploi . Mis à part les iOS de base des types de données - qui sont pris en charge dans toutes les versions de tous les appareils iOS - l'API comporte des modules pour supporter des dizaines d'applications tierces. Parmi les applications prises en charge les plus populaires, citons WhatsApp, Viber, Kik, WeChat, Line, SnapChat, Facebook Messenger et Skype.

  • Prise en charge de la plateforme de développement prête à l'emploi . L'API dispose d'implémentations de clients open source disponibles dans un certain nombre de langages, notamment Python , .NET / C# et JavaScript .

  • Vitesse et évolutivité . La plate-forme API Reincubate iCloud est conçue pour évoluer, et le système de flux JSON est plus rapide et évolue mieux que l’accès aux fichiers bruts.

  • Options de personnalisation des flux riches . La plate-forme de flux est facilement personnalisable pour les déploiements de partenaires. Les exemples incluent les protobuf format protobuf et l'agrégation de pièces jointes d'applications de messagerie.

  • Confiance . Les utilisateurs de la sécurité, de la LEA et des gouvernements du monde entier font confiance à Reincubate. La société est soumise à une législation stricte en matière de protection des données au Royaume-Uni et est conforme aux réglementations européenne et américaine Safe Harbor.

Commencer

Les parties intéressées peuvent contacter l' équipe d'entreprise pour accéder à une clé API. Cependant, une clé de test est fournie dans toutes les implémentations de client exemple.

Installation de l'exemple de client Python

La bibliothèque Python iCloud peut être installée avec une seule commande. Pour obtenir la bibliothèque héritée, la dernière version 1.* doit être installée.

$ pip install ricloud==1.*

La source de ce client est disponible sur GitHub sous ricloud-py .

Installation de l'exemple de client JavaScript

La bibliothèque JavaScript iCloud peut être installée avec une seule commande. Pour obtenir la bibliothèque héritée, la dernière version 1.* doit être installée.

$ npm install ricloud==1.*

La source de ce client peut être trouvée sur GitHub sous ricloud-js .

Installation de l'exemple de client .NET / C #

La bibliothèque C # iCloud peut être installée avec une seule commande. Pour obtenir la bibliothèque héritée, la dernière version 1.* doit être installée.

$ nuget install ricloud==1.*

La source de ce client est disponible sur GitHub sous ricloud-csharp .

Configuration

Chaque implémentation client est livrée avec son propre ensemble de documentation fournie et un exemple de script qui montre comment l'utiliser. La configuration est généralement limitée à la spécification d'un user et d' key valeur de key pour l'authentification auprès de l'API.

Travailler avec l'API

Un utilisateur peut avoir besoin d'effectuer trois opérations principales avec l'API.

  • Authentification et énumération: sign-in , perform-2fa-challenge , submit-2fa-challenge
  • Accès aux données de flux: données de download-data
  • Accès au fichier brut: fichier de download-file

Les exemples dans cette section sont donnés en format curl .

Sur toutes les demandes adressées à l'API, il faut indiquer à curl de suivre les redirections avec le paramètre -L . Les informations d'identification de l'API de l'utilisateur doivent également être définies avec --user "USER:KEY" , ainsi que l'en-tête de version de l'API personnalisé, --header "Accept: application/vnd.icloud-api.v1" . Ainsi, tous les appels curl dans ces exemples doivent commencer par:

curl -L
     -v
     -X POST
     --user "USER:KEY"
     --header "Accept: application/vnd.icloud-api.v1"

Notez que l'option -X POST est également spécifiée, car toutes les demandes sont effectuées via POST . Comme cet appel ne va pas changer, il est appelé ci-dessous CURL_CALL .

En règle générale, toutes les demandes (sauf les erreurs) renvoient un champ session_key qui identifie la session en cours. S'il n'est pas envoyé, une demande de sign-in doit être utilisée pour générer une nouvelle session. session_key valeurs session_key doivent être utilisées de manière cohérente.

1. Authentification, 2FA / 2SV et récupération de la liste des périphériques et des données

Pour pouvoir vous connecter en tant qu'utilisateur avec l'authentification à deux facteurs ou la vérification en deux étapes activée sur son compte, sign-in devez utiliser la méthode de sign-in .

CURL_CALL --data-urlencode "email=ICLOUD_EMAIL"
          --data-urlencode "password=ICLOUD_PASSWORD"
          https://api.icloudextractor.com/c/sign-in/

L' email - email et le password de password du compte iCloud auquel vous souhaitez accéder sont transmis en tant que paramètres. Utilisez --data-urlencode pour vous assurer que les caractères de contrôle tels que @ sont protégés.

Connexion avec une paire de clés API non valide

Si un utilisateur fait une demande de l'API avec une paire de clés non valide, il ne renverra aucune donnée au-delà de 403 .

HTTP/1.1 403 FORBIDDEN

Connexion à un compte sur lequel l'utilisateur final n'a pas accepté les conditions iCloud

Si l'utilisateur tente de se connecter à un compte iCloud pour lequel un ensemble mis à jour de termes et conditions iCloud n'a pas été accepté.

HTTP/1.1 400 BAD REQUEST
{
 "error": "terms-of-service-update",
 "message": "User hasn't agreed to Apple's Terms of Service."
}

Se connecter avec de mauvaises références iCloud

Si un utilisateur tente de se connecter avec de mauvaises informations d'identification iCloud, un 403 sera renvoyé avec un message d'erreur.

HTTP/1.1 403 FORBIDDEN
{"message": "Unsuccessful login attempt: renate@reincubate.com",
 "error": "unable-to-login"}

Connexion à un compte que l'utilisateur final n'a pas validé

Si l'utilisateur tente de se connecter à un compte iCloud pour lequel l'adresse électronique principale n'a pas été validée par l'utilisateur.

HTTP/1.1 400 BAD REQUEST
{
 "error": "unverified-account",
 "message": "User's primary email hasn't been verified."
}

Se connecter sans 2FA / 2SV

La connexion à un compte autre que 2FA peut être effectuée avec une seule demande.

HTTP/1.1 200 OK
{"devices":
 {"7c7fba66680ef796b916b067077cc246adacf01d": {
    "ios_version":   "9.0.1",
    "colour":        "#e4e7e8",
    "device_name":   "Renate's iPhone",
    "latest-backup": "2015-11-17 16:46:39.000000",
    "model":         "N71mAP",
    "serial":        "D56DF63DYTBG",
    "name":          "iPhone 6s"},
 "8e281be6657d4523710d96341b6f86ba89b56df7": {
    "ios_version":   "9.1",
    "colour":        "#e1e4e3",
    "device_name":    "Renate's iPad",
    "latest-backup": "2015-11-13 19:35:52.000000",
    "model":         "J98aAP",
    "serial":        "E32VR64AFXVF",
    "name":          "iPad Pro"},
 },
 "key": "b3d11d6c-52c0-4754-a971-8f305047a0f6",
 "auth_token": "N28GZaKvTXAGrhBIx3UgRGml47oPVCCq4tqM5huyCKo2r7h2HfMtyBsZVc3SS2sh5h3I"}
}

Se connecter avec 2SV / 2FA

Si le compte a été sécurisé avec une authentification à deux facteurs, la demande de sign-in retournera un message d'erreur indiquant que l' two-factor authentication is enabled on this account , la session_key et, dans le cas de 2SV, également une liste des trustedDevices de trustedDevices .

  • 2SV
HTTP/1.1 409 CONFLICT
{"message": "This account has Two Step Verification enabled, please select a device to challenge.",
 "data": {
  "trustedDevices": ["********12", "Renate's iPhone - iPhone 6s"],
  "key": "b3d11d6c-52c0-4726-a971-8f305047a0f6"
 },
 "error": "2fa-required"
}

Pour 2SV, l'étape suivante consiste à émettre un code de challenge 2SV à l'un des trustedDevices . Pour ce faire, il est demandé d' perform-2fa-challenge .

CURL_CALL --data-urlencode "key=SESSION_KEY"
          --data-urlencode "challenge=DEVICE_TO_CHALLENGE"
          https://api.icloudextractor.com/c/perform-2fa-challenge/

Les paramètres envoyés sont challenge , qui doit contenir les éléments énumérés sur trustedDevices , et la trustedDevices session_key , qui sera identique à la demande de sign-in renvoyée.

  • 2FA

Dans le cas de 2FA, la différence est que la demande retournera une liste vide de trustedDevices .

HTTP/1.1 409 CONFLICT
{"message": "This account has Two Factor authentication enabled, all devices will be challenged.",
 "data": {
  "trustedDevices": ["Challenge all 2FA devices"],
  "key": "b3d11d6c-52c0-4726-a971-8f305047a0f6"
 },
 "error": "2fa-required"
}

Pour 2FA, nous ne pouvons pas choisir quel appareil est mis au défi, car chaque appareil de confiance sera automatiquement mis au défi. Pour ce faire, il est demandé d' perform-2fa-challenge , sans l'argument challenge.

CURL_CALL --data-urlencode "key=SESSION_KEY"
          --data-urlencode
          https://api.icloudextractor.com/c/perform-2fa-challenge/

Par conséquent, pour 2FA, les seuls paramètres envoyés sont la session_key , qui sera identique à la demande de sign-in renvoyée.

Défier avec un mauvais appareil (2FA / 2SV)

Si un utilisateur fait une demande de l'API avec un device non valide, il ne renverra aucune donnée au-delà de 500 .

HTTP/1.1 500 INTERNAL SERVER ERROR

Défier avec une mauvaise clé (2FA / 2SV)

Si un utilisateur fait une demande à l'API avec une key non valide, il retournera un 403 avec un message de validation.

HTTP/1.1 400 BAD REQUEST
{"message": "Your iCloud session has expired. To continue, please sign in again.",
 "error": "key-invalid"}

Défier avec succès (2FA / 2SV)

HTTP/1.1 200 OK
{"message": "Challenge has been submitted."}

Une fois le défi envoyé au périphérique de l'utilisateur, les données envoyées doivent être retransmises à l'API à l'aide de submit-2fa-challenge .

CURL_CALL --data-urlencode "key=SESSION_KEY"
          --data-urlencode "code=2FA_CODE"
          https://api.icloudextractor.com/c/submit-2fa-challenge/

Envoi d'une mauvaise réponse au challenge (2FA / 2SV)

HTTP/1.1 403 FORBIDDEN
{"message": "Incorrect code supplied for Two Factor Authentication.",
 "error": "invalid-2fa-code"}

Soumettre la bonne réponse au défi (2FA / 2SV)

HTTP/1.1 200 OK
{"message": "Challenge has been submitted."}

Avec cette demande, l'utilisateur sera entièrement authentifié et la session de l'API sera active.

Pour terminer le processus de connexion et récupérer la liste des périphériques, envoyez une dernière demande de sign-in utilisant le même email et le même password de password que la première demande et en utilisant la même key utilisée lors du processus d'authentification 2FA / 2SV.

Remarque: la réponse ne contiendra l'entrée auth_token si votre clé d'API a la tokenisation activée. Dans ce cas, nous vous recommandons de soumettre la demande finale à la refresh-session de refresh-session comme indiqué à la section 4 ci-dessous, au lieu de la soumettre à la sign-in . L'utilisation de auth_token est plus robuste car il s'agit d'un indicateur d'une session déjà établie sur les systèmes Apple.

Sur le nouvel adaptateur dorsal d’API, vous devriez vous attendre à voir une réponse différente. Ceci est dû aux optimisations dans le déroulement du processus 2FA / 2SV.

HTTP/1.1 200 OK
{"key": "b3d11d6c-52c0-4726-a971-8f305047a0f6",
"message": "Log-in successful",
"auth_token": "N28GZaKvTXAGrhBIx3UgRGml47oPVCCq4tqM5huyCKo2r7h2HfMtyBsZVc3SS2sh5h3I"
}

2. Récupération des données de flux: données de download-data

La méthode de download-data est utilisée pour accéder aux données de flux.

CURL_CALL --data-urlencode "key=SESSION_KEY"
          --data-urlencode "device=DEVICE_ID"
          --data-urlencode "mask=DATA_MASK"
          --data-urlencode "since=MIN_DATE"
          https://api.icloudextractor.com/c/download-data/

Les paramètres nécessaires à cette demande sont le courant session_key , le device_id de l' un des dispositifs de la réponse de connexion, et le data_mask , qui est une OR combinaison de tous les drapeaux du module d'alimentation à l'utilisateur est intéressé. Vous pouvez également spécifier un since date à partir de laquelle commencer la recherche de données.

En supposant que la clé API du client soit valide pour tous ces modules, la méthode renverra les données demandées au format JSON.

Envoi d'une demande de flux valide

Si les valeurs transmises à la méthode sont valides, le contenu du flux sera renvoyé dans le corps de la réponse HTTP.

HTTP/1.1 200 OK

Envoi d'une demande de flux avec des paramètres manquants

Si l'un des paramètres requis est manquant, la méthode renverra un code de réponse de requête incorrecte.

HTTP/1.1 400 BAD REQUEST
{"message": "mask missing from post.",
 "error": "invalid-request"
}

Envoi d'une demande de flux avec des paramètres non valides

Si une valeur non valide ou mal formatée est soumise pour un paramètre, la méthode renvoie un code de réponse de requête incorrect.

HTTP/1.1 400 BAD REQUEST
{"message": "Invalid since.",
 "error": "invalid-parameter"
}

Exemples de drapeaux de module d'alimentation

Les indicateurs de module suivants peuvent être masqués ensemble pour le paramètre mask de la méthode de download-data . Ce n'est pas une liste exhaustive.

  • 0000000000001 Messages
  • 0000000000002 Photos et vidéos
  • 0000000000004 Historique du navigateur
  • 0000000000008 Historique des appels
  • 0000000000016 contacts
  • 0000000000032 Applications installées
  • 0000000000256 (en direct)
  • 0000000000512 Messages WhatsApp
  • 0000000001024 Messages Skype
  • 0000000002048 Calendrier
  • 0000000004096 Messages de ligne
  • 0000000008192 Messages Kik
  • 0000000016384 Messages Viber
  • 0000000032768 Messages Facebook
  • 0000000065536 Messages WeChat
  • 0000000131072 Messages Snapchat
  • 0000000262144 Liste de fichiers
  • 0000000524288 Historique du navigateur (en direct)
  • 0000001048576 Historique des appels WhatsApp
  • 0000002097152 Historique des appels Viber
  • 0000004194304 Utilisation de l'application
  • 0000008388608 Notes
  • 0000033554432 HealthKit
  • 0000067108864 HealthKit étapes uniquement
  • 0000134217728 Cookies Safari
  • 0000268435456 Kik contacts
  • 0000536870912 Contacts Viber
  • 0001073741824 conversations Viber
  • 0002147483648 appels (en direct)
  • 0004294967296 Emplacements
  • 0008589934592 Messages de randonnée
  • 0017179869184 Snapchat histoires
  • 0034359738368 vocaux
  • 0068719476736 Enregistrements
  • 0137438953472 Vidéos
  • 0274877906944 Photos et vidéos (en direct)
  • 0549755813888 Messages d'amadou
  • 1099511627776 Montres Apple liées
  • 2199023255552 Messages de randonnée
  • 4398046511104 contacts (en direct)
  • 8796093022208 Informations sur le compte

Par exemple, pour demander un flux de messages, l'historique des appels et l'historique du navigateur, le masque serait 1 + 4 + 8 = 13 .

Formats de flux JSON

Les flux JSON sont conçus pour être aussi simples à analyser que possible. Le flux renverra tous les types de données demandés dans une seule réponse.

Chaque module de flux spécifié dans l'indicateur de module aura sa propre clé dans le dictionnaire JSON de niveau supérieur renvoyé.

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

3. Récupération des fichiers bruts: fichier de download-file

La méthode de download-file est disponible pour télécharger des pièces jointes de message ou pour télécharger directement d'autres fichiers ésotériques à partir d'iCloud.

CURL_CALL --data-urlencode "key=SESSION_KEY"
          --data-urlencode "device=DEVICE_ID"
          --data-urlencode "file=FILE_ID"
          https://api.icloudextractor.com/c/download-file/
          -o PATH_TO_SAVE_FILE

Les paramètres nécessaires sont la session_key , le device_id cible et un file_id . La demande ci - dessus télécharger le fichier et le stocker le chemin spécifié à curl avec l' -o option.

file_ids are either stored files in iCloud, or identifiers for hosted files on the internet. In the former case, file_ids are built from SHA-1 hashes of a file's AppDomain and filename. In the latter case we may process and decrypt the file before returning it.

file_ids may be previously known for static files, or can be obtained from message feeds, where they are used as identifiers by attachments.

Soumettre une demande de fichier valide

Si les valeurs transmises à la méthode sont valides, le contenu du fichier binaire sera renvoyé dans le corps de la réponse HTTP.

HTTP/1.1 200 OK

Soumission d'une demande de fichier pour un fichier inexistant

Si un fichier n'est pas présent sur l'iCloud ou si nous ne pouvons pas le récupérer à partir du tiers approprié, la méthode retournera toujours avec succès, mais le corps du message sera vide.

HTTP/1.1 200 OK

Envoi d'une demande de fichier après expiration de la session

Si la session a expiré, un code de réponse aux requêtes incorrectes sera servi aux clients.

HTTP/1.1 400 BAD REQUEST
{"message": "Your iCloud session has expired. To continue, please sign in again.",
 "error": "key-invalid"}

Exemple file_id s

Les clés de hachage communes associées aux applications pour un accès direct aux fichiers sont les suivantes.

  • 3d0d7e5fb2ce288813306e4d4636395e047a3d28 SMS
  • 1b6b187a1b60b9ae8b720c79e2c67f472bab09c0 WhatsApp
  • 1c6a49018bcace96656e4fe8f08d572ce071b92c WhatsApp
  • 7c7fba66680ef796b916b067077cc246adacf01d WhatsApp
  • b39bac0d347adfaf172527f97c3a5fa3df726a3a Viber
  • 8e281be6657d4523710d96341b6f86ba89b56df7 Kik
  • ff1324e6b949111b2fb449ecddb50c89c3699a78 appels
  • a49bfab36504be1bf563c1d1813b05efd6076717 Appels
  • 2b2b0084a1bc3a5ac8c27afdf14afb42c61a19ca Appels
  • 5a4935c78a5255723f707230a451d79c540d2741 Appels
  • 12b144c0bd44f2b3dffd9186d3f9c05b917cee25 Photos
  • adb8c77534444e97c31ff15924d50f3ed1fbd3b1 contacts
  • 2041457d5fe04d39d0ab481178355df6781e6858 Nominations
  • 3ecf3efff3a55d6155efce2828579e8a3cd881c1 Historique de navigation
  • cd89f9e10d3497912bfc92e5dc674ca989cfdd44 Historique de navigation
  • Ligne 2d711a1f5613f5259730b98328a3f7e816698f88

Certaines applications de messagerie, telles que Skype, Facebook Messenger et WeChat, font varier le file_id fonction de la conversation.

4. Actualisation de la connexion à un compte à l'aide de jetons d'authentification

auth_token est un jeton de connexion avec Apple. Il dure au moins une journée et est actualisé lorsqu'une demande est adressée au point de terminaison de la refresh-session sur l'API. Une interrogation quotidienne du point de terminaison de la refresh-session suffit pour conserver ce jeton.

auth_token que le point de terminaison de refresh-session uniquement besoin de l'entrée auth_token et qu'il renvoie la liste des périphériques ainsi qu'une nouvelle clé de session, il peut être utilisé pour démarrer une nouvelle session sur l'API sans avoir à se connecter à nouveau au compte. Ceci est particulièrement utile pour les comptes activés 2FA / 2SV car le processus d'authentification ne doit être terminé que pour la demande de sign-in initiale.

Pour l'utiliser, il faut utiliser le champ auth_token récupéré lors de la connexion. Cela doit être envoyé au point de terminaison de la refresh-session .

Le paramètre auth_token est renvoyé à partir de la demande de sign-in initiale et doit être utilisé par rapport au point de terminaison de la refresh-session .

Nous vous recommandons également d'inclure le account paramètre facultatif dans la demande, car cela nous aide à surveiller la demande dans l'ensemble de notre système. La valeur de ce paramètre est simplement le nom d'utilisateur du compte iCloud de l'utilisateur.

CURL_CALL --data-urlencode "auth_token=AUTHENTICATION_TOKEN"
          --data-urlencode "account=ICLOUD_EMAIL"
          https://api.icloudextractor.com/c/refresh-session/

Envoi d'un jeton d'authentification invalide

Si le jeton n'est pas valide, le noeud final renvoie un code de requête incorrect.

HTTP/1.1 400 BAD REQUEST
{"message": "Invalid auth_token.",
 "error": "invalid-parameter"}

Envoi d'un jeton d'authentification valide

La réponse sera similaire au noeud final de connexion: une clé de session nouvellement créée et la liste mise à jour des périphériques avec toutes les métadonnées nécessaires pour les identifier. On peut utiliser la nouvelle session pour continuer à extraire des données.

HTTP/1.1 200 OK

5. Suppression de fichiers iCloud Photo Library: delete-file

La méthode de delete-file est disponible pour supprimer des photos de la photothèque iCloud. Il accepte le file , la key et un drapeau permament tant que paramètres.

CURL_CALL --data-urlencode "key=SESSION_KEY"
          --data-urlencode "file=FILE_ID"
          --data-urlencode "permanent=False"
          https://api.icloudextractor.com/c/delete-file/

Le paramètre de file contiendra l'identifiant de la photo (récupérable via le fil web_photos ) et l'indicateur permanent qui contrôle si le fichier va être supprimé ou supprimé. Si elle est définie sur False , la demande entraînera le déplacement du fichier vers l'album de photos "Supprimé récemment" (appelé suppression progressive). D'autre part, si la valeur est True , la demande supprimera le fichier de l'album "Récemment supprimé" et le supprimera définitivement (suppression définitive).

Suppression douce réussie

Si la suppression logicielle a réussi, la photo sera déplacée vers l'album "Récemment supprimé" et un message de réussite s'affichera.

HTTP/1.1 200 OK
{
  "message": "Success: File number: FILE_ID has been recycled."
}

Suppression définitive réussie

Si la suppression définitive a réussi, la photo sera supprimée des périphériques associés lors de la prochaine synchronisation de ces périphériques avec iCloud. Toutefois, en raison de la technique utilisée, les fichiers supprimés seront toujours détectables et téléchargeables à partir de l'API iCloud Photo de Reincubate pendant une durée indéterminée. Ce comportement peut être utilisé pour annuler la suppression de fichiers non répertoriés.

Veuillez noter que pour qu'un fichier soit supprimé, il doit d'abord avoir été supprimé.

HTTP/1.1 200 OK
{
  "message": "Success: File number: FILE_ID has been deleted permanently."
}

Échec de la suppression logicielle ou matérielle

Si la demande échoue, une réponse d'erreur sera renvoyée.

HTTP/1.1 400 BAD REQUEST
{
  "message": "Failure: File number: FILE_ID was not deleted."
}

Accélération des téléchargements avec le SDK natif

Pour les téléchargements de fichiers hautement parallélisés, nous proposons un SDK C ++ qui permet aux clients de télécharger et de déchiffrer les fichiers localement, en évitant la surcharge (mais en perdant la commodité) du noeud final du download-file . Ce SDK est disponible pour Linux (Ubuntu 12.04, Ubuntu 14.04, Debian Jessie) et Windows.

Il est intégré au reste du flux de travail de l'API.

Téléchargements

Les utilisateurs peuvent charger la bibliothèque actuelle et appeler DownloadFiles , le point d’entrée du SDK, qui porte la signature suivante:

int DownloadFiles(const wchar_t* clientID, const wchar_t* clientKey, const wchar_t* sessionKey,
                  const wchar_t* deviceID, const wchar_t** fileIDs, size_t fileIDs_count,
                  const wchar_t* targetDir, ProgressFunction progFunc, void* progParam,
                  GetWStringBuffer getErrorBuffer)

Avec ces définitions de rappel externes:

typedef wchar_t* (*GetWStringBuffer)(size_t size);
typedef bool(*ProgressFunction)(double percent, unsigned long long downloadedSize,
                                unsigned long long totalSize, void* param);

Les paramètres sont:

  • clientID L'ID client API.
  • clientKey La clé cliente de l'API.
  • sessionKey Clé de session actuelle.
  • deviceID ID de périphérique cible.
  • fileIDs Tableau des file_ids requis.
  • fileIDs_count Longueur du tableau fileIDs .
  • targetDir sortie où les fichiers seront téléchargés.
  • progFunc Fonction de rappel de progression, appelée à chaque fois qu'une mise à jour de progression est effectuée.
  • progParam Paramètre personnalisé pouvant être transmis au rappel progFunc .
  • getErrorBuffer Cette fonction de rappel devrait renvoyer un tampon getErrorBuffer les erreurs survenues lors du téléchargement.

Une fois le téléchargement terminé, les identifiants de fichier demandés seront dans le dossier désigné par targetDir .

Anciennes versions du SDK

Sur les versions antérieures, le point d’entrée DownloadFiles avait une signature légèrement différente:

int DownloadFiles(const wchar_t* clientID, const wchar_t* clientKey, const wchar_t* sessionKey,
                  const wchar_t* deviceID, const wchar_t** fileIDs, size_t fileIDs_count,
                  const wchar_t* targetDir, ProgressFunction progFunc, void* progParam,
                  GetWStringBuffer getReplyBuffer, GetWStringBuffer getErrorBuffer)

Le paramètre supplémentaire est:

  • getReplyBuffer Semblable à getErrorBuffer , cette fonction de rappel est chargée de renvoyer un tampon valide où la méthode DownloadFiles peut écrire. Dans ce cas, ce tampon contiendra la réponse avec un statut final du téléchargement.

Désactivation et réactivation de comptes et d'appareils

The `client-management` method allows for clients to deactive or reactivate billing for account or device access. The methods for deactivation and reactivation have separate endpoints.

##### Account deactivation

```bash
CURL_CALL --data-urlencode "account=ACCOUNT_ID"
          https://api.icloudextractor.com/c/client-management/deactivation/
Réactivation du compte
CURL_CALL --data-urlencode "account=ACCOUNT_ID"
          https://api.icloudextractor.com/c/client-management/activation/
Désactivation de l'appareil
CURL_CALL --data-urlencode "device=DEVICE_ID"
          https://api.icloudextractor.com/c/client-management/deactivation/
Réactivation de l'appareil
CURL_CALL --data-urlencode "device=DEVICE_ID"
          https://api.icloudextractor.com/c/client-management/activation/

Soumettre une demande valide

Si les valeurs transmises à la méthode de désactivation de compte sont valides, un message sera renvoyé dans le corps de la réponse HTTP.

HTTP/1.1 200 OK
{"message": "deactivation has been set to True for account: ACCOUNT_ID"}

Si un utilisateur demande la désactivation d'un périphérique, un message similaire est renvoyé dans le corps de la réponse HTTP:

HTTP/1.1 200 OK
{"message": "deactivation has been set to True for device: DEVICE_ID"}

Envoi d'une demande avec des informations d'identification non valides

Si l'utilisateur effectue une demande de désactiver ou réactiver un compte avec un invalide account_id ou invalide device_id , ou si le account_id ou device_id ne sont pas associés à l'utilisateur, il renvoie un HTTP 400.

HTTP/1.1 400 BAD REQUEST
{"message": "no device with device ID: BAD_DEVICE_ID",
 "error": "bad-device"}

Une erreur similaire et un message sont renvoyés pour account_id non account_id ou un account_id qui n'est pas associé à l'utilisateur.

HTTP/1.1 400 BAD REQUEST
{"message": "no account with account ID: ACCOUNT_ID",
 "error": "bad-account"}

Répéter une demande

Si un utilisateur demande un dispositif ou un compte doit être désactivé ou réactivé quand il existe déjà dans cet état, un message sera retourné dans le corps de réponse HTTP, informant l'utilisateur que la demande device_id ou account_id est déjà dans l'État requis:

HTTP/1.1 200 OK
{"message": "deactivation is already set to True for account: ACCOUNT_ID "}

Un message similaire est affiché en cas de demande répétée de désactivation et de réactivation de l'appareil et de réactivation de compte.

Demande de données pour un compte ou un appareil désactivé

Si un utilisateur demande des données à un compte ou à un appareil qui a été désactivé, un HTTP 403 sera envoyé:

HTTP/1.1 403 FORBIDDEN
{"message": "The requested account has been deactivated",
 "error": "deactivated-account"}

De nouveau, un message similaire est envoyé en cas de demande de données d'un compte désactivé.

Le flux renvoie un message: "Contactez enterprise@reincubate.com pour accéder à ces données"

Ce message sera renvoyé lorsque la clé de démonstration est utilisée. Veuillez nous contacter pour une clé d'essai avec accès à plus de données. Si vous avez déjà une clé d'évaluation, la spécifiez-vous correctement dans votre implémentation client?

J'essaie d'extraire le fichier de base de données d'une application par file_id mais je ne récupère aucune donnée.

file_ids are derived from an SHA-1 hash of the file's path and name, so they are constant for any given file. If the file's attributes or content change, it won't affect the hash.

Cependant, il arrive que les auteurs d'applications modifient le nom du fichier dans lequel ils stockent les données (et parfois, Apple le fait dans les nouvelles versions iOS). C’est pourquoi, par exemple, il existe plusieurs file_id différents à examiner lors de l’obtention des données WhatsApp. Ces file_id peuvent être modifiés chaque fois qu'une application est mise à jour.

Il est recommandé aux utilisateurs d'extraire les flux JSON au lieu de travailler avec des fichiers et de les manipuler directement. Avec les flux, il n’est pas nécessaire de s’inquiéter de l’efficacité de SQL, de l’analyse PList ou de la suppression de la suppression, et les flux sont plus rapides et beaucoup plus simples à utiliser.

Je reçois des erreurs limitant le débit du serveur

L'API limite les demandes sur une fenêtre de 15 minutes et cette limitation est configurée par clé. La plupart des clés ont un débit limité pour des raisons de sécurité.

Les clients API reçoivent des données sur leur utilisation par rapport aux limites définies dans les réponses à l' HTTP tête HTTP qu'ils reçoivent. Ces réponses utilisent les en-têtes suivants:

  • X-Rate-Limit-Limit Nombre de demandes autorisées dans une fenêtre de 15 minutes.
  • X-Rate-Limit-Remaining Nombre de demandes restantes dans l'attribution de la fenêtre en cours.
  • X-Rate-Limit-Reset (Temps X-Rate-Limit-Reset Temps restant, en millisecondes, jusqu'à la fin de la fenêtre de limite de taux actuelle.

Voici un exemple d’en-têtes dynamiques d’une clé sur une limite de débit de 1 000 demandes.

X-Rate-Limit-Remaining: 995
X-Rate-Limit-Limit: 1000
X-Rate-Limit-Reset: 3546.3297081

Si la limite de débit est atteinte, le serveur répondra par:

HTTP/1.1 429 TOO MANY REQUESTS

Le serveur inclura les trois en-têtes de limite de débit dans cette réponse.

Le comportement correct du client consiste à patienter pendant la durée spécifiée par X-Rate-Limit-Reset , auquel moment X-Rate-Limit-Remaining sera réinitialisé.

J'ai reçu un e-mail sur l'accès à distance au compte iCloud auquel j'ai accédé

L'interrogation des anciens modules de flux en direct (comme indiqué ci-dessus dans la section des indicateurs de module de flux de données) peut déclencher l'envoi d'un courrier électronique à l'adresse associée à ce compte iCloud. Notez que cela se produit uniquement pour les modules de flux en direct hérités, et non pour les modules de production.

Comment pouvons nous aider?

Notre équipe de support est là pour vous aider!

Nos bureaux sont ouverts du lundi au vendredi, de 9 h à 17 h GMT. L’heure est actuellement 7:53 Après-midi GMT.

Notre objectif est de répondre à tous les messages en un jour ouvrable.

Aller à la section support › Contacter l'équipe de l'entreprise ›
Notre superbe équipe de support

Pouvons-nous améliorer cet article?

Nous aimons entendre les utilisateurs: pourquoi ne pas nous envoyer un email, laisser un commentaire ou tweet @reincubate?

© 2008 - 2019 Reincubate Ltd. Tous droits réservés. Enregistré en Angleterre et au Pays de Galles #5189175, VAT GB151788978. Reincubate® est une marque déposée. Confidentialité et modalités. Nous recommandons l'authentification multi-facteurs. Construit avec à Londres.