Service Apple iCloud

Mis à jour

L'API prend en charge la récupération d'une variété de données et de fichiers à partir des services iCloud d'Apple.

Sessions

La configuration d'une session pour les services iCloud sur l'API est aussi simple que la connexion à un compte iCloud. Le processus peut nécessiter plusieurs tentatives de création de session si le compte a activé l'authentification multi-facteurs, telle que 2FA ou 2SV.

Création d'une session pour un compte sans 2FA / 2SV

La charge utile de session pour créer une session pour un compte sans 2FA / 2SV activé contient les paramètres suivants.

Nom type la description
password chaîne Le mot de passe du compte iCloud.

Utiliser 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>"
  }
}'

Réponse

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "succeeded",
  "error": null,
  ...
}

Création d'une session pour un compte avec 2FA

La création d'une session pour un compte compatible 2FA est un processus en deux étapes:

  1. Essayez de créer une session en utilisant uniquement le mot de passe du compte iCloud. Cela déclenchera le processus 2FA, qui envoie un code d'authentification aux appareils iOS et macOS associés au compte. La tentative de création de session échouera avec error="code-required" .
  2. Utilisez le mot de passe du compte iCloud et le code d'authentification reçu en (1) pour créer une session. Si le code est accepté, la session sera créée avec succès.

Étape 1: créer une session

Nom type la description
password chaîne Le mot de passe du compte iCloud.

Utiliser 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>"
  }
}'

Réponse

Si le processus 2FA est déclenché comme prévu, la session ne doit pas être créée avec l'erreur: code-required .

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "failed",
  "error": "code-required",
  ...
}

Étape 2: créer une session avec du code

Nom type la description
password chaîne Le mot de passe du compte iCloud.
code chaîne Le code d'authentification.

Utiliser 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>"
  }
}'

Réponse

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "succeeded",
  "error": null,
  ...
}

Création d'une session pour un compte avec 2SV

Le processus de création d'une session pour un compte compatible 2SV comprend trois étapes:

  1. Essayez de créer une session à l'aide du mot de passe du compte iCloud. Comme 2SV est requis, cela échouera avec error="choice-required" et error_info={"choices": [<2SV enabled devices>]} .
  2. Essayez de recréer une session à l'aide du mot de passe du compte iCloud et d'un choix dans la liste error_info["choices"] . Cette fois, la tentative déclenchera le processus 2SV qui envoie un code d'authentification à l'appareil choisi. La tentative échouera avec error="code-required" .
  3. Utilisez le mot de passe du compte iCloud et le code d'authentification reçu en (2) pour créer une session. Si le code est accepté, la session sera créée avec succès.

Cela déclenchera le processus 2SV, qui envoie un code d'authentification aux appareils iOS et macOS associés au compte. La tentative de création de session échouera avec error="code-required" .

Étape 1: créer une session

Nom type la description
password chaîne Le mot de passe du compte iCloud.

Utiliser 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>"
  }
}'

Réponse

Si 2SV est activé sur le compte, la tentative de création de session échouera avec un choice-required erreur choice-required .

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "failed",
  "error": "choice-required",
  "error_info": {
    "choices": [
      "********02 - SMS to Phone Number"
    ]
  }
  ...
}

Étape 2: créer une session avec choix

Nom type la description
password chaîne Le mot de passe du compte iCloud.
choice chaîne L'appareil choisi auquel envoyer un code d'authentification.

Utiliser 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"
  }
}'

Réponse

Si le processus 2FA est déclenché comme prévu, la session ne doit pas être créée avec l'erreur: code-required .

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "failed",
  "error": "code-required",
  ...
}

Étape 3: créer une session avec du code

Nom type la description
password chaîne Le mot de passe du compte iCloud.
code chaîne Le code d'authentification.

Utiliser 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>"
  }
}'

Réponse

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "succeeded",
  "error": null,
  ...
}

Types de source

identifiant la description
icloud.account source principale Correspond à un compte iCloud.

Les sondages

Le service iCloud prend en charge tous les attributs du schéma de charge utile d'interrogation.

Récupération des informations sur la source

Ce type d'interrogation récupère des informations sur la source ciblée. Les résultats sont publiés au format JSON.

Utiliser 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": ["*"]
  }
}'

Utiliser * 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": ["*"]
  }
)

Récupération des données

Ce type d'interrogation récupère et traite les données de la session ciblée. Les résultats sont publiés au format JSON.

Consultez la liste des types de données disponibles pour plus d'informations sur des types de données spécifiques.

Utiliser 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"]
    }
}'

Utiliser * 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,
)

Récupérer des fichiers

L'attribut de charge utile d'interrogation des files est utilisé pour demander la récupération des fichiers binaires de la source ciblée.

Les ID seront généralement récupérés à partir d'un sondage précédent pour les types de données qui incluent des références de fichier directes, comme la bibliothèque de photos iCloud, ou qui incluent des pièces jointes, comme les types de données de message.

Utiliser 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"
        ]
    }
}'

Utiliser * 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,
)

Types de données

Types de données iCloud

identifiant la description
icpl.photos Récupère les ressources de la photothèque iCloud.
mme_contacts.contacts Récupère les données des contacts iOS stockés sur iCloud.
mme_calendar.events Récupère les données de calendrier iOS stockées sur iCloud.
mme_notes.notes Récupère les données iOS Notes stockées dans iCloud.
callkit.calls Récupère les données du téléphone iOS synchronisées par CallKit.
cloudkit_safari.history Récupérez les données d'historique du navigateur Safari stockées dans iCloud.
fmip.devices Récupérez les données de localisation de mon appareil iPhone.

Photothèque iCloud

Photos, vidéos et autres médias

Récupère des informations sur les photos, vidéos et autres supports stockés dans la bibliothèque de photos iCloud (ICPL).

Ce module nécessite que la bibliothèque de photos iCloud soit activée sur le compte iCloud de l'utilisateur.

ID du type de données icpl.photos
Paramètre associé Settings > [username] > iCloud > Photos > iCloud Photo Library

Attributs de données

prénom type la description
id chaîne Un identifiant pour l'élément de données. Utile pour dédupliquer les données sur plusieurs sondages.
filename chaîne Nom du fichier tel qu'il est stocké dans ICPL.
files liste des image , video , éléments audio Fichiers associés à cet actif ICPL. Le fichier d'origine, Live Photos, vignettes sera inclus dans cette liste.
date_created datetime Date de création du fichier. Dans le cas de photos ou de vidéos prises sur un appareil iOS, ce sera la date à laquelle elles ont été prises. Dans le cas des actifs existants importés dans ICPL, ce sera la date d'importation d'origine.
date_uploaded datetime Date du dernier téléchargement du fichier sur ICPL. Cela correspondra au moment où le fichier a été récupéré pour la première fois via l'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.

Filtres de données

Nom type la description
since datetime Inclut uniquement les éléments dont la date_uploaded est date_uploaded plus tard que la valeur fournie.
until datetime Inclut uniquement les éléments dont la date est date_uploaded plus tôt que la valeur fournie.

Exemples de données

[
  {
    "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"
  }
]

Contacts MobileMe

Contacts

Récupère les données des contacts iOS stockées dans iCloud.

ID du type de données mme_contacts.contacts
Paramètre associé Settings > [username] > iCloud > Contacts

Attributs de données

Le type de données mme_contacts.contact hérite de la plupart des attributs du type de données de contact base. Le tableau ci-dessous présente les attributs supplémentaires ou différents.

prénom type la description
id chaîne Un identifiant pour l'élément de données. Utile pour dédupliquer les données sur plusieurs sondages.
data_type chaîne, toujours mme_contacts.contact Type de données de l'élément.
uid chaîne Un identifiant unique qui peut être utilisé pour dédupliquer sur différentes sources de données de contacts iOS.
image élément d' image imbriqué, facultatif Image de profil du contact.

Exemples de données

[
  {
    "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"
    }
  }
]

Événements du calendrier MobileMe mme_calendar.events

Récupère les données de calendrier iOS stockées dans iCloud.

Notes MobileMe notes mme_notes.notes

Récupère les données iOS Notes stockées dans iCloud.

CallKit

Appels de CallKit callkit.calls

Récupère les journaux d'appels synchronisés avec le service CallKit.

les erreurs

callkit-uninitialised

Indique que le service CallKit n'a pas été configuré pour ce compte. Le propriétaire du compte iCloud peut résoudre cette erreur à l'aide d'un périphérique iOS associé au compte iCloud en procédant comme suit: - Assurez-vous que le périphérique est connecté au Wi-Fi. - Accédez à Settings > [username] > iCloud . - Mettez iCloud Drive hors tension en attendant 30 à 60 secondes pour que le changement prenne effet. - Allumez iCloud Drive une fois la modification précédente terminée. Cela devrait déclencher l'initialisation.

Si l'erreur persiste après l'exécution de ce processus, veuillez contacter le support.

callkit-sync-disabled

Dans ce cas, le service CallKit a été initialisé, mais les conditions nécessaires pour que les appareils commencent à synchroniser l'historique des appels sur iCloud ne sont pas remplies. L'API résoudra ce problème à distance via iCloud, mais le périphérique associé au compte iCloud peut ne pas réévaluer son état de synchronisation car celui-ci est mis en cache.

Le propriétaire du compte iCloud peut demander à un appareil de revérifier les conditions de synchronisation de l'historique des appels en procédant comme suit:

  • Accédez à Settings > [username] > iCloud .
  • Mettez iCloud Drive hors tension en attendant 30 à 60 secondes pour que la modification soit prise en compte.
  • Allumez iCloud Drive une fois la dernière modification effectuée. Cela devrait déclencher l'initialisation.

Dépannage

  • L'historique des appels récents n'est pas renvoyé dans les résultats du sondage.

Cela est généralement dû au fait que l'appareil n'a pas synchronisé ses derniers enregistrements d'historique d'appels avec iCloud. Le service CallKit est un service iOS interne et ne peut pas être activé ou désactivé dans les paramètres ni déclencher la synchronisation manuelle. Cela peut rendre difficile le débogage des données manquantes car il est difficile de savoir ce que le périphérique a synchronisé ou non avec iCloud.

Ce problème est plus courant pour les comptes qui n'ont pas beaucoup de données à synchroniser (moins de ~ 3 appels), ce qui peut souvent être le cas pour les comptes de test.

Recommandations:

  • Assurez-vous que l'appareil dispose de plus d'une poignée d'enregistrements d'historique d'appels à synchroniser. Nos tests ont montré qu'un appareil avec seulement quelques enregistrements d'historique d'appels ne déclenchera pas le processus de synchronisation iCloud.
  • Attendez que le périphérique effectue une synchronisation périodique. Cela peut prendre jusqu'à 12 heures en fonction de l'utilisation du périphérique, de son état de connectivité et de son état de charge.
  • Branchez l'appareil au pouvoir. Le périphérique est plus susceptible de déclencher une synchronisation dans cet état.

  • L’ancien historique des appels n’est pas renvoyé dans les résultats du sondage.

Le service CallKit est conçu pour synchroniser les enregistrements de l'historique des appels entre les périphériques et non pour stocker ces enregistrements indéfiniment. En règle générale, les enregistrements de l'historique des appels peuvent être récupérés depuis CallKit pendant environ 3 mois, mais cela peut varier d'un compte à l'autre en fonction des processus de nettoyage internes dans iCloud.

CloudKit

Historique du navigateur de iCloud cloudkit_safari.history

Récupérez les données d'historique du navigateur Safari stockées dans le service de synchronisation iCloud.

Find My et Find My iPhone

Emplacements des appareils

Récupérez les données de localisation de mon appareil et de localisation.

Notez que ce type de données peut nécessiter plusieurs sondages, le second venant ~ 10-30 secondes après le premier, afin de renvoyer des données complètes. Cela est dû au fonctionnement de Find My: le premier sondage déclenchera Find My pour demander de nouvelles données aux appareils accessibles, mais les données ne seront pas disponibles avant 10 à 30 secondes.

ID du type de données fmip.devices
Paramètre associé Settings > [username] > Find My

Attributs de données

prénom type la description
id chaîne Un identifiant pour l'élément de données. Utile pour dédupliquer les données sur plusieurs sondages.
data_type chaîne, toujours fmip.devices Type de données de l'élément.
name chaîne Nom défini par l'utilisateur pour le périphérique.
model_name chaîne Nom marketing d'Apple pour le modèle d'appareil.
model_identifier chaîne Identifiant d'Apple pour le modèle d'appareil.
product_type chaîne La catégorie de produit de l'appareil.
location location imbriqué facultatif Le dernier emplacement signalé pour l'appareil, le cas échéant.
battery_status chaîne L'état actuel de la batterie de l'appareil.
battery_level flotte S'il est connu, le pourcentage de charge restante de la batterie.

Exemples de données

[
  {
    "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
  }
]

Types de fichier

identifiant la description
icpl Un fichier de la bibliothèque de photos iCloud.
mme_contact_image Une image de profil de contact mme_contacts.contacts .

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 1:35 Après-midi GMT.

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

Notre superbe équipe de support

© 2008 - 2024 Reincubate Ltd. Tous droits réservés. Enregistré en Angleterre et au Pays de Galles #5189175, VAT GB151788978. Reincubate® et Camo® sont des marques déposées. Politique de confidentialité & termes.