Apple iCloud-Dienst
Die API unterstützt das Abrufen einer Vielzahl von Daten und Dateien aus den iCloud-Diensten von Apple.
Sitzungen
Das Einrichten einer Sitzung für die iCloud-Dienste auf der API ist so einfach wie das Anmelden bei einem iCloud-Konto. Der Vorgang kann mehrere Versuche zum Erstellen der Sitzung erfordern, wenn das Konto die Multifaktorauthentifizierung wie 2FA oder 2SV aktiviert hat.
Erstellen einer Sitzung für ein Konto ohne 2FA / 2SV
Die Sitzungsnutzlast zum Erstellen einer Sitzung für ein Konto ohne aktiviertes 2FA / 2SV enthält die folgenden Parameter.
Name | Art | Beschreibung |
---|---|---|
password | Zeichenfolge | Das iCloud-Kontokennwort. |
CURL verwenden
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>" } }'
Antwort
{ "id": "<session ID>", "resource": "session", ... "state": "succeeded", "error": null, ... }
Erstellen einer Sitzung für ein Konto bei 2FA
Das Erstellen einer Sitzung für ein 2FA-fähiges Konto erfolgt in zwei Schritten:
- Versuchen Sie, eine Sitzung nur mit dem Kennwort des iCloud-Kontos zu erstellen. Dies löst den 2FA-Prozess aus, der einen Authentifizierungscode an iOS- und MacOS-Geräte sendet, die dem Konto zugeordnet sind. Der Versuch zur Sitzungserstellung schlägt mit
error="code-required"
fehl. - Verwenden Sie das iCloud-Kontokennwort und den in (1) empfangenen Authentifizierungscode, um eine Sitzung zu erstellen. Wenn der Code akzeptiert wird, wird die Sitzung erfolgreich erstellt.
Schritt 1: Sitzung erstellen
Name | Art | Beschreibung |
---|---|---|
password | Zeichenfolge | Das iCloud-Kontokennwort. |
CURL verwenden
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>" } }'
Antwort
Wenn der 2FA-Prozess wie erwartet ausgelöst wird, sollte die Sitzung nicht mit dem Fehler erstellt werden: code-required
.
{ "id": "<session ID>", "resource": "session", ... "state": "failed", "error": "code-required", ... }
Schritt 2: Sitzung mit Code erstellen
Name | Art | Beschreibung |
---|---|---|
password | Zeichenfolge | Das iCloud-Kontokennwort. |
code | Zeichenfolge | Der Authentifizierungscode. |
CURL verwenden
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>" } }'
Antwort
{ "id": "<session ID>", "resource": "session", ... "state": "succeeded", "error": null, ... }
Erstellen einer Sitzung für ein Konto bei 2SV
Das Erstellen einer Sitzung für ein 2SV-fähiges Konto umfasst drei Schritte:
- Versuchen Sie, eine Sitzung mit dem Kennwort des iCloud-Kontos zu erstellen. Da 2SV erforderlich ist, schlägt dies mit
error="choice-required"
underror_info={"choices": [<2SV enabled devices>]}
. -
error_info["choices"]
erneut, eine Sitzung mit dem iCloud-error_info["choices"]
und einer Auswahl aus der Listeerror_info["choices"]
zu erstellen. Diesmal löst der Versuch den 2SV-Prozess aus, der einen Authentifizierungscode an das ausgewählte Gerät sendet. Der Versuch schlägt miterror="code-required"
fehl. - Verwenden Sie das iCloud-Kontokennwort und den in (2) empfangenen Authentifizierungscode, um eine Sitzung zu erstellen. Wenn der Code akzeptiert wird, wird die Sitzung erfolgreich erstellt.
Dies löst den 2SV-Prozess aus, der einen Authentifizierungscode an iOS- und MacOS-Geräte sendet, die dem Konto zugeordnet sind. Der Versuch zur Sitzungserstellung schlägt mit error="code-required"
fehl.
Schritt 1: Sitzung erstellen
Name | Art | Beschreibung |
---|---|---|
password | Zeichenfolge | Das iCloud-Kontokennwort. |
CURL verwenden
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>" } }'
Antwort
Wenn 2SV für das Konto aktiviert ist, schlägt der Versuch zur Sitzungserstellung mit choice-required
Fehlerauswahl fehl.
{ "id": "<session ID>", "resource": "session", ... "state": "failed", "error": "choice-required", "error_info": { "choices": [ "********02 - SMS to Phone Number" ] } ... }
Schritt 2: Sitzung mit Auswahl erstellen
Name | Art | Beschreibung |
---|---|---|
password | Zeichenfolge | Das iCloud-Kontokennwort. |
choice | Zeichenfolge | Das ausgewählte Gerät, an das ein Authentifizierungscode gesendet werden soll. |
CURL verwenden
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" } }'
Antwort
Wenn der 2FA-Prozess wie erwartet ausgelöst wird, sollte die Sitzung nicht mit dem Fehler erstellt werden: code-required
.
{ "id": "<session ID>", "resource": "session", ... "state": "failed", "error": "code-required", ... }
Schritt 3: Sitzung mit Code erstellen
Name | Art | Beschreibung |
---|---|---|
password | Zeichenfolge | Das iCloud-Kontokennwort. |
code | Zeichenfolge | Der Authentifizierungscode. |
CURL verwenden
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>" } }'
Antwort
{ "id": "<session ID>", "resource": "session", ... "state": "succeeded", "error": null, ... }
Quelltypen
Kennung | Beschreibung |
---|---|
icloud.account | Primärquelle Entspricht einem iCloud-Konto. |
Umfragen
Der iCloud-Dienst unterstützt alle Attribute des Poll-Payload-Schemas.
Quelleninformationen werden abgerufen
Dieser Abfragetyp ruft Informationen zur Zielquelle ab. Die Ergebnisse werden im JSON-Format veröffentlicht.
CURL verwenden
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": ["*"] } }'
Verwendung von * 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": ["*"] } )
Daten abrufen
Dieser Abfragetyp ruft Daten aus der Zielsitzung ab und verarbeitet sie. Die Ergebnisse werden im JSON-Format veröffentlicht.
Weitere Informationen zu bestimmten Datentypen finden Sie in der Liste der verfügbaren Datentypen .
CURL verwenden
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"] } }'
Verwendung von * 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, )
Dateien werden abgerufen
Das Attribut "Pay-Payload" für files
wird verwendet, um das Abrufen von Binärdateien von der Zielquelle anzufordern.
Die IDs werden normalerweise aus einer früheren Umfrage für Datentypen abgerufen, die direkte Dateiverweise wie iCloud Photo Library oder Anhänge wie Nachrichtendatentypen enthalten.
CURL verwenden
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" ] } }'
Verwendung von * 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, )
Datentypen
iCloud-Datentypen
Kennung | Beschreibung |
---|---|
icpl.photos | Ruft iCloud Photo Library-Assets ab. |
mme_contacts.contacts | Ruft in iCloud gespeicherte iOS-Kontaktdaten ab. |
mme_calendar.events | Ruft in iCloud gespeicherte iOS-Kalenderdaten ab. |
mme_notes.notes | Ruft in iCloud gespeicherte iOS Notes-Daten ab. |
callkit.calls | Ruft mit CallKit synchronisierte iOS-Telefondaten ab. |
cloudkit_safari.history | Rufen Sie in iCloud gespeicherte Safari-Browserverlaufsdaten ab. |
fmip.devices | Abrufen von Find My iPhone-Geräte- und Standortdaten. |
iCloud-Fotobibliothek
Fotos, Videos und andere Medien
Ruft Informationen zu Fotos, Videos und anderen Medien ab, die in der iCloud Photo Library (ICPL) gespeichert sind.
Für dieses Modul muss die iCloud-Fotobibliothek im iCloud-Konto des Benutzers aktiviert sein.
Datentyp-ID | icpl.photos |
Zugehörige Einstellung | Settings > [username] > iCloud > Photos > iCloud Photo Library |
Datenattribute
Name | Art | Beschreibung |
---|---|---|
id | Zeichenfolge | Eine Kennung für das Datenelement. Nützlich zum Deduplizieren von Daten über mehrere Umfragen hinweg. |
filename | Zeichenfolge | Der Name der Datei, wie sie in ICPL gespeichert ist. |
files | Liste der image , video und audio | Mit diesem ICPL-Asset verknüpfte Dateien. Die Originaldatei, Live-Fotos und Miniaturansichten werden in diese Liste aufgenommen. |
date_created | Terminzeit | Wann die Datei ursprünglich erstellt wurde. Bei Fotos oder Videos, die auf einem iOS-Gerät aufgenommen wurden, ist dies das Datum, an dem sie aufgenommen wurden. Bei vorhandenen Assets, die in ICPL importiert werden, ist dies das ursprüngliche Importdatum. |
date_uploaded | Terminzeit | Wann wurde die Datei zuletzt auf ICPL hochgeladen? Dies entspricht dem Zeitpunkt, zu dem die Datei zum ersten Mal über die Ricloud-API abgerufen werden konnte. |
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. |
Datenfilter
Name | Art | Beschreibung |
---|---|---|
since | Terminzeit | Enthält nur Elemente mit einem date_uploaded später als der angegebene Wert date_uploaded wird. |
until | Terminzeit | Enthält nur Elemente mit einem date_uploaded das vor dem angegebenen Wert date_uploaded . |
Beispieldaten
[ { "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" } ]
MobileMe-Kontakte
Kontakte
Ruft in iCloud gespeicherte iOS-Kontaktdaten ab.
Datentyp-ID | mme_contacts.contacts |
Zugehörige Einstellung | Settings > [username] > iCloud > Contacts |
Datenattribute
Der mme_contacts.contact
Datentyp erbt die meisten Attribute von dem contact
In der folgenden Tabelle sind zusätzliche oder abweichende Attribute aufgeführt.
Name | Art | Beschreibung |
---|---|---|
id | Zeichenfolge | Eine Kennung für das Datenelement. Nützlich zum Deduplizieren von Daten über mehrere Umfragen hinweg. |
data_type | Zeichenfolge, immer mme_contacts.contact | Der Datentyp des Elements. |
uid | Zeichenfolge | Eine eindeutige Kennung, mit der Sie über verschiedene Quellen von iOS-Kontaktdaten hinweg deduplizieren können. |
image | verschachteltes image , optional | Profilbild für den Kontakt. |
Beispieldaten
[ { "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-Kalenderereignisse mme_calendar.events
Ruft in iCloud gespeicherte iOS-Kalenderdaten ab.
MobileMe Notes Notizen mme_notes.notes
Ruft in iCloud gespeicherte iOS Notes-Daten ab.
CallKit
Anrufe von CallKit callkit.calls
Ruft mit dem CallKit-Dienst synchronisierte Anrufprotokolle ab.
Fehler
callkit-uninitialised
Zeigt an, dass der CallKit-Dienst nicht für dieses Konto eingerichtet wurde. Der iCloud-Kontoinhaber kann diesen Fehler mithilfe eines iOS-Geräts beheben, das dem iCloud-Konto zugeordnet ist. Führen Sie dazu die folgenden Schritte aus: - Stellen Sie sicher, dass das Gerät mit Wi-Fi verbunden ist. - Navigieren Sie zu Settings > [username] > iCloud
. - Schalten Sie iCloud Drive aus und warten Sie 30 bis 60 Sekunden, bis die Änderung wirksam wird. - Schalten Sie iCloud Drive ein, sobald die vorherige Änderung abgeschlossen ist. Dies sollte die Initialisierung auslösen.
Wenn der Fehler nach dem Ausführen dieses Vorgangs weiterhin besteht, wenden Sie sich an den Support.
callkit-sync-disabled
In diesem Fall wurde der CallKit-Dienst initialisiert, aber die Voraussetzungen, unter denen Geräte die Synchronisierung des Anrufprotokolls mit der iCloud starten können, wurden nicht erfüllt. Die API löst dies remote über die iCloud auf, aber das mit dem iCloud-Konto verknüpfte Gerät kann den Synchronisierungsstatus möglicherweise nicht neu bewerten, da dieser zwischengespeichert wird.
Der iCloud-Kontoinhaber kann ein Gerät auslösen, um die Synchronisierungsbedingungen für das Anrufprotokoll anhand der folgenden Schritte erneut zu überprüfen:
- Navigieren Sie zu
Settings > [username] > iCloud
. - Schalten Sie iCloud Drive aus und warten Sie 30 bis 60 Sekunden, bis die Änderung wirksam wird.
- Schalten Sie iCloud Drive ein, sobald die vorherige Änderung abgeschlossen ist. Dies sollte die Initialisierung auslösen.
Fehlerbehebung
- Der Verlauf der letzten Anrufe wird in den Umfrageergebnissen nicht zurückgegeben.
Dies wird normalerweise dadurch verursacht, dass das Gerät seine letzten Anruflisteneinträge nicht mit der iCloud synchronisiert hat. Der CallKit-Dienst ist ein interner iOS-Dienst und kann in den Einstellungen nicht aktiviert oder deaktiviert oder manuell synchronisiert werden. Dies kann das Debuggen fehlender Daten erschweren, da unklar ist, welches Gerät mit der iCloud synchronisiert wurde oder nicht.
Dieses Problem tritt häufiger bei Konten auf, bei denen nicht viele Daten synchronisiert werden müssen (weniger als ~ 3 Anrufe), was beim Testen von Konten häufig der Fall ist.
Empfehlungen:
- Vergewissern Sie sich, dass auf dem Gerät mehr als eine Handvoll Anruflistenaufzeichnungen synchronisiert werden müssen. Unsere Tests haben gezeigt, dass ein Gerät mit nur wenigen Anruflisteneinträgen den iCloud-Synchronisierungsprozess nicht auslöst.
- Warten Sie, bis das Gerät eine regelmäßige Synchronisierung durchgeführt hat. Dies kann bis zu 12 Stunden dauern, je nachdem, wie das Gerät verwendet wird, in welchem Konnektivitäts- und Ladezustand es sich befindet.
Stecken Sie das Gerät in die Steckdose. In diesem Zustand löst das Gerät eher eine Synchronisierung aus.
Das alte Anrufprotokoll wird in den Umfrageergebnissen nicht zurückgegeben.
Der CallKit-Dienst dient zum Synchronisieren von Anruflisteneinträgen zwischen Geräten und nicht zum unbegrenzten Speichern dieser Einträge. In der Regel können Anrufverlaufsdatensätze für ca. 3 Monate aus CallKit abgerufen werden. Dies kann jedoch je nach internen Bereinigungsprozessen in der iCloud zwischen den Konten variieren.
CloudKit
Browserverlauf aus iCloud cloudkit_safari.history
Rufen Sie im iCloud-Synchronisierungsdienst gespeicherte Safari-Browserverlaufsdaten ab.
Finde mein und finde mein iPhone
Gerätestandorte
Rufen Sie Find My Device- und Standortdaten ab.
Beachten Sie, dass für diesen Datentyp möglicherweise mehrere Abfragen erforderlich sind, wobei die zweite ~ 10 bis 30 Sekunden nach der ersten erfolgt, um vollständige Daten zurückzugeben. Dies liegt an der Funktionsweise von Find My: Bei der ersten Abfrage wird Find My ausgelöst, um neue Daten von erreichbaren Geräten anzufordern. Die Daten sind jedoch für weitere 10 bis 30 Sekunden nicht verfügbar.
Datentyp-ID | fmip.devices |
Zugehörige Einstellung | Settings > [username] > Find My |
Datenattribute
Name | Art | Beschreibung |
---|---|---|
id | Zeichenfolge | Eine Kennung für das Datenelement. Nützlich zum Deduplizieren von Daten über mehrere Umfragen hinweg. |
data_type | Zeichenfolge, immer fmip.devices | Der Datentyp des Elements. |
name | Zeichenfolge | Der vom Benutzer festgelegte Name für das Gerät. |
model_name | Zeichenfolge | Apples Marketingname für das Gerätemodell. |
model_identifier | Zeichenfolge | Apples Kennung für das Gerätemodell. |
product_type | Zeichenfolge | Die Produktkategorie des Geräts. |
location | optional verschachtelter location | Der zuletzt gemeldete Speicherort für das Gerät, falls verfügbar. |
battery_status | Zeichenfolge | Der aktuelle Batteriestatus des Geräts. |
battery_level | schweben | Falls bekannt, bleibt die prozentuale Batterieladung erhalten. |
Beispieldaten
[ { "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 } ]
Datentypen
Kennung | Beschreibung |
---|---|
icpl | Eine Datei aus der iCloud Photo Library. |
mme_contact_image | Ein Kontaktprofilbild von mme_contacts.contacts . |