iCloud API (v1)

Aktualisierte

In dieser Dokumentation wird die Verwendung der älteren iCloud-API von Reincubate beschrieben.

Überblick

Die API - und insbesondere die Feeds - bieten eine Reihe von wesentlichen Vorteilen:

  • Einfache Integration . Die API ist für Entwicklungsteams auf jeder Ebene einfach zu handhaben und erfordert keine hochspezialisierten Kenntnisse über iCloud / CloudKit-Speicher oder über Anwendungen von Drittanbietern.

    Dieser Vorteil lässt sich nicht leicht übertreiben: Die Entwicklung und Wartung einer Schnittstelle zur iCloud ist sehr komplex. Darüber hinaus müssen mehrere Datenformate für die wichtigsten iOS-Daten- und App-Dateien unterstützt werden. IOS verwendet nicht nur unterschiedliche Datenformate, sondern jede App (z. B. WhatsApp) verwendet eine Reihe von Datenformaten und -strukturen, die sich mit App-Updates von Woche zu Woche ändern können.

    Die API unterstützt alle "schwierigen" Funktionen: iOS 9, iOS 10, CloudKit, Zusammenführen von iCloud 8 + 9, 2SV / 2FA, Teilschnappschüsse, Tokenisierung, A9 & A9X.

  • Zukunftssicherheit . Reincubate ist bestrebt, die Unterstützung für aktuelle und frühere iCloud- und iOS-Datenformate beizubehalten.

    • Erster , der iOS-Datenzugriff unterstützt (2008)
    • Erster , der verschlüsselten iOS-Datenzugriff unterstützt (2009)
    • Erster , der die iCloud-Datenextraktion unterstützt (2011)
    • Erste und einzige mit einer API zur Unterstützung des iCloud / CloudKit iOS 9-Datenzugriffs (2015)
  • Support und Zugang zu konkurrenzlosem Fachwissen . Aufgrund der Fokussierung und Positionierung des Unternehmens als App- Datenunternehmen verfügt das Team von Reincubate über beispiellose Erfahrung und Kenntnisse auf diesem Gebiet. Diese Erfahrung ist besonders wertvoll für Kunden, die sich mit neuen Apps und Anwendungsfällen befassen.

    Benutzer der JSON-Feeds können die proprietären Techniken von Reincubate zum Extrahieren und Wiederherstellen von App-Daten nutzen, sodass die resultierenden Daten genauer sind.

  • Out-of-the-Box-App-Unterstützung . Neben dem Kern iOS - Datentypen - all das in allen iOS - Versionen auf allen Geräten unterstützt werden - die API hat Module Dutzende von Drittanbieter - Anwendungen zu unterstützen. Zu den beliebtesten unterstützten Apps zählen WhatsApp, Viber, Kik, WeChat, Line, SnapChat, Facebook Messenger und Skype.

  • Out-of-the-Box-Unterstützung für Entwicklerplattformen . Die API verfügt über Open Source-Client-Implementierungen, die in einer Reihe von Sprachen verfügbar sind, einschließlich Python , .NET / C# und JavaScript .

  • Geschwindigkeit und Skalierbarkeit . Die Reincubate iCloud-API-Plattform ist maßstabsgetreu aufgebaut, und das JSON-Feed-System ist schneller und skalierbarer als der Rohdateizugriff.

  • Umfangreiche Optionen zur Anpassung von Feeds . Die Feed-Plattform kann problemlos für Partnerbereitstellungen angepasst werden. Beispiele hierfür sind Feeds im protobuf Format und die Zusammenfassung von Messaging-App-Anhängen.

  • Vertrauen . Reinkubieren wird von Sicherheits-, LEA- und Regierungsbenutzern auf der ganzen Welt als vertrauenswürdig angesehen. Das Unternehmen unterliegt den strengen britischen Datenschutzbestimmungen und entspricht den Safe Harbor-Bestimmungen der EU und der USA.

Fertig machen

Interessenten können sich an das Unternehmensteam wenden, um Zugriff auf einen API-Schlüssel zu erhalten. In allen Beispielclientimplementierungen wird jedoch ein Testschlüssel bereitgestellt.

Beispiel-Python-Client installieren

Die Python iCloud-Bibliothek kann mit einem einzigen Befehl installiert werden. Um die Legacy-Bibliothek zu erhalten, muss die neueste Version 1.* installiert sein.

$ pip install ricloud==1.*

Die Quelle für diesen Client finden Sie auf GitHub unter ricloud-py .

Beispiel-JavaScript-Client installieren

Die JavaScript iCloud-Bibliothek kann mit einem einzigen Befehl installiert werden. Um die Legacy-Bibliothek zu erhalten, muss die neueste Version 1.* installiert sein.

$ npm install ricloud==1.*

Die Quelle für diesen Client finden Sie auf GitHub unter ricloud-js .

Installieren des .NET / C # -Beispielclients

Die C # iCloud-Bibliothek kann mit einem einzigen Befehl installiert werden. Um die Legacy-Bibliothek zu erhalten, muss die neueste Version 1.* installiert sein.

$ nuget install ricloud==1.*

Die Quelle für diesen Client finden Sie auf GitHub unter ricloud-csharp .

Aufbau

Jede Client-Implementierung wird mit einem eigenen Satz gebündelter Dokumentation und einem Beispielskript geliefert, das zeigt, wie es verwendet werden kann. Die Konfiguration beschränkt sich normalerweise auf die Angabe eines user und eines key für die Authentifizierung gegenüber der API.

Mit der API arbeiten

Es gibt drei Hauptvorgänge, die ein Benutzer möglicherweise mit der API ausführen muss.

  • Authentifizierung und Enumeration: sign-in , perform-2fa-challenge , submit-2fa-challenge
  • Feed Datenzugriff: download-data
  • Raw-Dateizugriff: download-file

Beispiele in diesem Abschnitt sind im curl Format angegeben.

Bei allen an die API gestellten Anforderungen muss curl angewiesen werden, Weiterleitungen mit dem Parameter -L zu folgen. Die API-Anmeldeinformationen des Benutzers müssen ebenfalls mit --user "USER:KEY" , ebenso wie der benutzerdefinierte API-Versionsheader --header "Accept: application/vnd.icloud-api.v1" . Daher müssen alle curl Aufrufe in diesen Beispielen mit Folgendem beginnen:

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

Beachten Sie, dass die Option -X POST ebenfalls angegeben ist, da alle Anforderungen über POST . Da sich dieser Aufruf nicht ändern wird, wird er im Folgenden als CURL_CALL .

Als allgemeine Richtlinie geben alle Anforderungen (mit Ausnahme von Fehlern) ein session_key Feld zurück, das die aktuelle Sitzung identifiziert. Wenn es nicht gesendet wird, sollte eine sign-in verwendet werden, um eine neue Sitzung zu generieren. session_key Werte sollten konsistent verwendet werden.

1. Authentifizierung, 2FA / 2SV und Abruf der Geräte- und Datenliste

Um als Benutzerverifikation mit Zwei-Faktor - Authentisierung oder zwei Schritt auf seinem Konto, das aktivierte anmelden sign-in Verfahren verwendet werden.

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

Die email --data-urlencode und das password des iCloud-Kontos, auf das --data-urlencode werden soll, werden mit --data-urlencode als Parameter übergeben, um sicherzustellen, dass Steuerzeichen wie @ --data-urlencode werden.

Anmelden mit einem ungültigen API-Schlüsselpaar

Wenn ein Benutzer eine Anforderung an die API mit einem ungültigen Schlüsselpaar stellt, gibt sie nach 403 keine Daten zurück.

HTTP/1.1 403 FORBIDDEN

Melden Sie sich in einem Konto an, in dem der Endbenutzer die Nutzungsbedingungen von iCloud nicht akzeptiert hat

Wenn der Benutzer versucht, sich bei einem iCloud-Konto anzumelden, für das ein aktualisierter Satz von iCloud-Nutzungsbedingungen nicht akzeptiert wurde.

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

Anmelden mit ungültigen iCloud-Anmeldeinformationen

Wenn ein Benutzer versucht, sich mit ungültigen iCloud-Anmeldeinformationen anzumelden, wird eine 403 zusammen mit einer Fehlermeldung zurückgegeben.

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

Melden Sie sich bei einem Konto an, das der Endbenutzer nicht validiert hat

Wenn der Benutzer versucht, sich bei einem iCloud-Konto anzumelden, für das die primäre E-Mail-Adresse vom Benutzer nicht validiert wurde.

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

Anmelden ohne 2FA / 2SV

Die Anmeldung in einem Nicht-2FA-Konto kann mit einer einzigen Anfrage erfolgen.

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

Anmelden mit 2SV / 2FA

Wenn das Konto mit einer Zwei-Faktor-Authentifizierung gesichert wurde, wird beim session_key sign-in der Anforderung eine Fehlermeldung zurückgegeben, die besagt, dass two-factor authentication is enabled on this account die two-factor authentication is enabled on this account , und zwar der session_key und im Fall von 2SV auch eine Liste von 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"
}

Für 2SV besteht der nächste Schritt darin, einen 2SV-Challenge-Code an eines der trustedDevices . Dazu wird eine Aufforderung zur perform-2fa-challenge .

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

Die Parameter , die geschickt sind challenge , die auf die aufgeführten Punkte auf enthalten trustedDevices und der session_key , die die gleiche wie die sein sign-in Anfrage zurückgegeben.

  • 2FA

Im Fall von 2FA besteht der Unterschied darin, dass die Anforderung eine leere Liste der 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"
}

Für 2FA können wir nicht auswählen, welches Gerät herausgefordert wird, da jedes vertrauenswürdige Gerät automatisch herausgefordert wird. Zu diesem perform-2fa-challenge wird die perform-2fa-challenge ohne das perform-2fa-challenge .

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

Daher ist für 2FA die einzigen Parameter , die gesendet wird , ist die session_key , die die gleiche wie die sein wird , sign-in Anforderung zurückgegeben.

Mit einem schlechten Gerät herausfordern (2FA / 2SV)

Wenn ein Benutzer eine Anforderung an die API mit einem ungültigen device , gibt er keine Daten über 500 .

HTTP/1.1 500 INTERNAL SERVER ERROR

Herausfordern mit einem schlechten Schlüssel (2FA / 2SV)

Wenn ein Benutzer die API mit einem ungültigen key anfordert, gibt er eine 403 mit einer Validierungsnachricht zurück.

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

Erfolgreich bestehen (2FA / 2SV)

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

Sobald die submit-2fa-challenge an das Gerät des Benutzers gesendet wurde, müssen die gesendeten Daten mit submit-2fa-challenge an die API zurückgesendet werden.

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

Senden einer falschen Challenge-Antwort (2FA / 2SV)

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

Übermittlung der richtigen Challenge-Antwort (2FA / 2SV)

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

Mit dieser Anforderung wird der Benutzer vollständig authentifiziert und die API-Sitzung wird aktiv.

Um den Anmeldevorgang abzuschließen und die Geräteliste abzurufen, senden Sie eine abschließende Anforderung zur sign-in mit derselben email Adresse und demselben password wie bei der ersten Anforderung und mit demselben key für die 2FA / 2SV-Authentifizierung verwendet wurde.

Beachten Sie, dass die Antwort nur dann den Eintrag auth_token wenn für Ihren API-Schlüssel die Tokenisierung aktiviert ist. In diesem Fall empfehlen wir Ihnen, die letzte Anfrage an die refresh-session senden, wie in Abschnitt 4 unten beschrieben, anstatt sie an die sign-in senden. Die Verwendung von auth_token ist robuster, da es ein Indikator für eine bereits eingerichtete Sitzung auf Apples Systemen ist.

Auf dem neuen API-Backend-Adapter sollte eine andere Antwort angezeigt werden. Dies ist auf Optimierungen im Ablauf des 2FA / 2SV-Prozesses zurückzuführen.

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

2. Abruf von Feed-Daten: download-data

Die download-data Methode wird verwendet, um auf Feed-Daten zuzugreifen.

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/

Die für diese Anforderung erforderlichen Parameter sind der aktuelle session_key , die Geräte- device_id eines der Geräte aus der data_mask und die data_mask , die eine OR Verknüpfung aller Feed-Modul-Flags darstellt, an denen der Benutzer interessiert ist. Sie können auch ein since angeben Datum, ab dem nach Daten gesucht werden soll.

Vorausgesetzt, der API-Schlüssel des Clients ist für alle diese Module gültig, gibt die Methode die angeforderten Daten im JSON-Format zurück.

Senden einer gültigen Feed-Anfrage

Wenn die an die Methode übergebenen Werte gültig sind, wird der Feedinhalt im HTTP-Antworttext zurückgegeben.

HTTP/1.1 200 OK

Senden einer Feed-Anfrage mit fehlenden Parametern

Wenn einer der erforderlichen Parameter fehlt, gibt die Methode einen ungültigen Anforderungsantwortcode zurück.

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

Senden einer Feed-Anfrage mit ungültigen Parametern

Wenn für einen Parameter ein ungültiger oder falsch formatierter Wert übergeben wird, gibt die Methode einen ungültigen Anforderungsantwortcode zurück.

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

Flags des Probenvorschubmoduls

Die folgenden Modul-Flags können für den mask der download-data Methode zusammen maskiert werden. Dies ist keine vollständige Liste.

  • 0000000000001 Nachrichten
  • 0000000000002 Fotos und Videos
  • 0000000000004 Browserverlauf
  • 0000000000008 Anrufliste
  • 0000000000016 Kontakte
  • 0000000000032 Installierte Apps
  • 0000000000256 Ort (live)
  • 0000000000512 WhatsApp-Nachrichten
  • 0000000001024 Skype-Nachrichten
  • 0000000002048 Kalender
  • 0000000004096 Leitungsnachrichten
  • 0000000008192 Kik-Nachrichten
  • 0000000016384 Viber-Nachrichten
  • 0000000032768 Facebook-Nachrichten
  • 0000000065536 WeChat-Nachrichten
  • 0000000131072 Snapchat-Nachrichten
  • 0000000262144
  • 0000000524288 (live)
  • 0000001048576 WhatsApp-Anrufverlauf
  • 0000002097152 Viber Anrufliste
  • 0000004194304 Verwendung der App
  • 0000008388608 Hinweise
  • 0000033554432 HealthKit
  • 0000067108864 HealthKit-Schritte
  • 0000134217728 Safari-Cookies
  • 0000268435456 Kik-Kontakte
  • 0000536870912 Kontakte für Viber
  • 0001073741824 Viber-Gespräche
  • 0002147483648 (live)
  • 0004294967296 Standorte
  • 0008589934592 Hike-Nachrichten
  • 0017179869184 Snapchat Geschichten
  • 0034359738368 Voicemails
  • 0068719476736 Aufnahmen
  • 0137438953472 Videos
  • 0274877906944 Fotos und Videos (live)
  • 0549755813888 Nachrichten
  • 1099511627776 Verknüpfte Apple Watches
  • 2199023255552
  • 4398046511104 Kontakte (lebend)
  • 8796093022208

Um beispielsweise einen Feed mit Nachrichten, Anrufverlauf und Browserverlauf anzufordern, lautet die Maske 1 + 4 + 8 = 13 .

JSON-Feed-Formate

Die JSON-Feeds sollen so einfach wie möglich zu analysieren sein. Der Feed gibt alle angeforderten Datentypen in einer einzigen Antwort zurück.

Jedes im Modul-Flag angegebene Feed-Modul verfügt über einen eigenen Schlüssel im zurückgegebenen JSON-Wörterbuch der obersten Ebene.

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

3. Abruf von Rohdateien: download-file

Die download-file Methode ist für das Herunterladen von Nachrichtenanlagen zur Verfügung, oder direkt esoterischeren Dateien aus dem iCloud herunterzuladen.

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

Die erforderlichen Parameter sind session_key , target device_id und file_id . Der Antrag über die Datei herunterladen und speichern sie den Pfad zum angegebenen curl mit der -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.

Senden einer gültigen Dateianforderung

Wenn die an die Methode übergebenen Werte gültig sind, wird der Inhalt der Binärdatei im HTTP-Antworttext zurückgegeben.

HTTP/1.1 200 OK

Senden einer Dateianforderung für eine nicht vorhandene Datei

Wenn eine Datei in der iCloud nicht vorhanden ist oder wir sie nicht von dem entsprechenden Drittanbieter abrufen können, wird die Methode weiterhin erfolgreich zurückgegeben, der Nachrichtentext ist jedoch leer.

HTTP/1.1 200 OK

Senden einer Dateianforderung nach Ablauf der Sitzung

Wenn die Sitzung abgelaufen ist, wird den Clients ein ungültiger Anforderungs-Antwortcode zugestellt.

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

Beispiel file_id s

Zu den gebräuchlichen Hash-Schlüsseln, die mit Apps für den direkten Dateizugriff verknüpft sind, gehören die folgenden.

  • 3d0d7e5fb2ce288813306e4d4636395e047a3d28 SMS
  • 1b6b187a1b60b9ae8b720c79e2c67f472bab09c0 WhatsApp
  • 1c6a49018bcace96656e4fe8f08d572ce071b92c WhatsApp
  • 7c7fba66680ef796b916b067077cc246adacf01d WhatsApp
  • b39bac0d347adfaf172527f97c3a5fa3df726a3a Viber
  • 8e281be6657d4523710d96341b6f86ba89b56df7 Kik
  • ff1324e6b949111b2fb449ecddb50c89c3699a78 Anrufe
  • a49bfab36504be1bf563c1d1813b05efd6076717 Anrufe
  • 2b2b0084a1bc3a5ac8c27afdf14afb42c61a19ca Anrufe
  • 5a4935c78a5255723f707230a451d79c540d2741 Anrufe
  • 12b144c0bd44f2b3dffd9186d3f9c05b917cee25 Fotos
  • adb8c77534444e97c31ff15924d50f3ed1fbd3b1 Kontakte
  • 2041457d5fe04d39d0ab481178355df6781e6858 Termine
  • 3ecf3efff3a55d6155efce2828579e8a3cd881c1 Browserverlauf
  • cd89f9e10d3497912bfc92e5dc674ca989cfdd44 Browserverlauf
  • 2d711a1f5613f5259730b98328a3f7e816698f88 Line

Einige Messenger-Anwendungen wie Skype, Facebook Messenger und WeChat variieren die file_id abhängig von der Konversation.

4. Aktualisieren einer Kontoanmeldung mithilfe von Authentifizierungstoken

Das auth_token ist ein Login-Token bei Apple. Sie dauert mindestens einen Tag und wird aktualisiert, wenn eine Anforderung an den Endpunkt der refresh-session in der API gestellt wird. Eine tägliche Abfrage des Endpunkts der refresh-session ist alles, was erforderlich ist, um dieses Token zu speichern.

Da der refresh-session Endpunkt nur das auth_token als Eingabe benötigt und die Geräteliste sowie einen neuen Sitzungsschlüssel zurückgibt, kann er verwendet werden, um eine neue Sitzung auf der API zu starten, ohne sich erneut beim Konto anmelden zu müssen. Dies ist besonders nützlich für 2FA / 2SV aktivierte Konten wie der Authentifizierungsprozess muss nur für die erste abgeschlossen werden sign-in Anfrage.

Um es zu verwenden, muss das Feld auth_token verwendet werden, das während der Anmeldung abgerufen wurde. Dies muss an den Endpunkt der refresh-session gesendet werden.

Der auth_token Parameter Rückkehr von der anfänglichen sign-in Anfrage, und muss gegen die verwendet werden refresh-session Endpunkt.

Wir empfehlen, auch den optionalen Parameter account in der Anforderung, da dies hilft uns , die Anfrage durch unser gesamtes System zu überwachen. Der Wert dieses Parameters ist einfach der Benutzername des iCloud-Kontos des Benutzers.

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

Senden eines ungültigen Authentifizierungstokens

Wenn das Token nicht gültig ist, gibt der Endpunkt einen ungültigen Anforderungscode zurück.

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

Senden eines gültigen Authentifizierungstokens

Die Antwort ähnelt dem Anmeldeendpunkt: Ein neu erstellter Sitzungsschlüssel und die aktualisierte Liste der Geräte mit allen zur Identifizierung erforderlichen Metadaten. In der neuen Sitzung können Sie weiterhin Daten abrufen.

HTTP/1.1 200 OK

5. Löschen von iCloud Photo Library-Dateien: delete-file

Die Methode zum Löschen von delete-file steht zum Löschen von Fotos aus der iCloud-Fotobibliothek zur Verfügung. Es akzeptiert file , key und ein permament als Parameter.

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

Der file Parameter enthält die ID des Fotos (über den web_photos Feed abrufbar) und das permanent Flag, mit dem web_photos wird, ob die Datei web_photos oder permanent gelöscht wird. Wenn der Wert auf " False , wird die Datei durch die Anforderung in das Album "Zuletzt gelöschte Fotos " verschoben (so genanntes "soft delete"). Auf der anderen Seite, wenn es gesetzt ist True , dann wird die Anforderung die Datei aus dem „Vor kurzem gelöscht“ Album zu entfernen, und bewirkt , dass sie permanent ( auch bekannt als Fest löscht) gelöscht werden.

Erfolgreiches vorläufiges Löschen

Wenn das vorläufige Löschen erfolgreich war, wird das Foto in das Album "Zuletzt gelöscht" verschoben und es wird eine Erfolgsmeldung zurückgegeben.

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

Erfolgreiches hartes Löschen

Wenn das Löschen erfolgreich war, wird das Foto von den zugeordneten Geräten entfernt, wenn diese Geräte das nächste Mal mit iCloud synchronisiert werden. Aufgrund der verwendeten Technik können hart gelöschte Dateien jedoch noch auf unbestimmte Zeit von Reincubates iCloud Photo API erkannt und heruntergeladen werden. Dieses Verhalten kann verwendet werden, um das Löschen nicht aufgelisteter Dateien aufzuheben.

Bitte beachten Sie, dass eine Datei, die hart gelöscht werden soll, zuerst vorläufig gelöscht werden muss.

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

Fehler beim Löschen von Soft- oder Hardwares

Wenn die Anforderung fehlschlägt, wird eine Fehlerantwort zurückgegeben.

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

Beschleunigen von Downloads mit nativem SDK

Für stark parallelisierte Dateidownloads bieten wir ein C ++ SDK an, mit dem Clients Dateien lokal herunterladen und entschlüsseln können, wodurch der Overhead (aber der Komfort) des download-file Endpunkts vermieden wird. Dieses SDK ist für Linux (Ubuntu 12.04, Ubuntu 14.04, Debian Jessie) und Windows verfügbar.

Es ist in den Rest des API-Workflows integriert.

Downloads

Benutzer können die aktuelle Bibliothek laden und DownloadFiles , den SDK-Entypoint, mit der folgenden Signatur aufrufen:

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)

Mit diesen externen Rückrufdefinitionen:

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

Die Parameter sind:

  • clientID Die API-Client-ID.
  • clientKey Der API- clientKey .
  • sessionKey Aktueller Sitzungsschlüssel.
  • deviceID Zielgerät ID.
  • fileIDs Array der erforderlichen file_ids .
  • fileIDs_count Länge des fileIDs Arrays.
  • targetDir in das die Dateien heruntergeladen werden.
  • progFunc Progress-Rückruffunktion, die jedes Mal aufgerufen wird, wenn eine Fortschrittsaktualisierung durchgeführt wird.
  • progParam Benutzerdefinierter Parameter, der an den progFunc Rückruf übergeben werden kann.
  • getErrorBuffer Diese Callback-Funktion sollte einen Puffer zurückgeben, der die beim Download aufgetretenen Fehler enthält.

Nach Abschluss des Downloads befinden sich die angeforderten Datei-IDs in dem von targetDir Ordner.

Ältere SDK-Versionen

In älteren Versionen hatte der DownloadFiles-Entypoint eine etwas andere Signatur:

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)

Der zusätzliche Parameter ist:

  • getReplyBuffer Ähnlich wie getErrorBuffer gibt diese Rückruffunktion einen gültigen Puffer zurück, in den die DownloadFiles Methode schreiben kann. In diesem Fall enthält dieser Puffer die Antwort mit dem endgültigen Status des Downloads.

Deaktivierung und Reaktivierung von Konten und Geräten

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/
Reaktivierung des Kontos
CURL_CALL --data-urlencode "account=ACCOUNT_ID"
          https://api.icloudextractor.com/c/client-management/activation/
Gerätedeaktivierung
CURL_CALL --data-urlencode "device=DEVICE_ID"
          https://api.icloudextractor.com/c/client-management/deactivation/
Reaktivierung des Geräts
CURL_CALL --data-urlencode "device=DEVICE_ID"
          https://api.icloudextractor.com/c/client-management/activation/

Senden einer gültigen Anfrage

Wenn die an die Konto-Deaktivierungsmethode übergebenen Werte gültig sind, wird eine Nachricht im HTTP-Antworttext zurückgegeben.

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

Wenn ein Benutzer die Deaktivierung eines Geräts anfordert, wird im HTTP-Antworttext eine ähnliche Nachricht zurückgegeben:

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

Senden einer Anfrage mit ungültigen Anmeldeinformationen

Wenn der Benutzer die Deaktivierung oder Reaktivierung eines Kontos mit einer ungültigen account_id oder einer ungültigen account_id device_id oder wenn die account_id oder device_id nicht dem Benutzer zugeordnet sind, wird ein HTTP 400 zurückgegeben.

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

Ein ähnlicher Fehler und eine ähnliche Nachricht werden für eine ungültige account_id oder eine account_id die nicht dem Benutzer zugeordnet ist.

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

Eine Anfrage wiederholen

Wenn ein Benutzer anfordert, dass ein Gerät oder Konto in diesem Zustand deaktiviert oder reaktiviert wird, wird im HTTP-Antworttext eine Nachricht zurückgegeben, die den Benutzer darüber informiert, dass sich die angeforderte device_id oder account_id bereits im angeforderten Zustand befindet:

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

Eine ähnliche Meldung wird bei einer wiederholten Aufforderung zur Deaktivierung und Reaktivierung des Geräts sowie zur Reaktivierung des Kontos angezeigt.

Anfordern von Daten für ein deaktiviertes Konto oder Gerät

Wenn ein Benutzer Daten von einem Konto oder Gerät anfordert, das deaktiviert wurde, wird ein HTTP 403 gesendet:

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

Auch hier wird eine ähnliche Meldung angezeigt, wenn Daten von einem deaktivierten Konto angefordert werden.

Der Feed gibt eine Nachricht zurück: "Wenden Sie sich an enterprise@reincubate.com, um Zugriff auf diese Daten zu erhalten."

Diese Nachricht wird zurückgegeben, wenn der Demonstrationsschlüssel verwendet wird. Bitte kontaktieren Sie uns für einen Testschlüssel mit Zugriff auf weitere Daten. Wenn Sie bereits einen Testschlüssel haben, geben Sie diesen in Ihrer Client-Implementierung korrekt an?

Ich versuche, die Datenbankdatei einer App von file_id , file_id jedoch keine Daten zurück

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.

Manchmal ändern App-Autoren jedoch den Namen der Datei, in der sie Daten speichern (und manchmal Apple in neuen iOS-Versionen). Aus diesem Grund müssen beispielsweise beim file_id WhatsApp-Daten verschiedene file_id s überprüft werden. Diese file_id s können jederzeit geändert werden, wenn eine App aktualisiert wird.

Es wird empfohlen, dass Benutzer JSON-Feeds abrufen, anstatt mit Dateien zu arbeiten und diese direkt zu bearbeiten. Bei der Verwendung der Feeds muss man sich keine Gedanken über die Wirksamkeit von SQL, das Parsen oder Wiederherstellen von PList machen, und die Feeds sind schneller und einfacher zu verarbeiten.

Ich erhalte ratenbegrenzende Fehler vom Server

Die API-Ratenbeschränkungen werden in einem 15-Minuten-Fenster angefordert und diese Beschränkung wird pro Schlüssel konfiguriert. Die meisten Schlüssel sind aus Sicherheitsgründen ratenbeschränkt.

API-Clients erhalten Daten zu ihrer Verwendung anhand der Grenzwerte in den empfangenen HTTP Header-Antworten zurück. Diese Antworten verwenden die folgenden Überschriften:

  • X-Rate-Limit-Limit Die Anzahl der Anforderungen, die in einem 15-Minuten-Fenster zulässig sind.
  • X-Rate-Limit-Remaining Die Anzahl der Anforderungen, die in der aktuellen Fensterzuordnung verbleiben.
  • X-Rate-Limit-Reset Die verbleibende Zeit bis zum Ende des aktuellen Rate-Limit-Fensters in Millisekunden.

Hier ist ein Beispielsatz von Live-Headern von einem Schlüssel mit einem Anforderungsratenlimit von 1.000.

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

Wenn das Ratenlimit erreicht wird, antwortet der Server mit:

HTTP/1.1 429 TOO MANY REQUESTS

Der Server fügt die drei Header für Ratenbegrenzungen in diese Antwort ein.

Das richtige Client-Verhalten besteht darin, zu warten, bis die durch X-Rate-Limit-Reset festgelegte Dauer X-Rate-Limit-Reset ist. An diesem Punkt wird X-Rate-Limit-Remaining zurückgesetzt.

Ich habe eine E-Mail über den Fernzugriff auf das iCloud-Konto erhalten, auf das ich zugegriffen habe

Durch das Abrufen der älteren Live-Feed-Module (wie oben im Abschnitt mit den Beispiel-Feed-Modul-Flags angegeben) kann eine E-Mail an die Adresse gesendet werden, die diesem iCloud-Konto zugeordnet ist. Beachten Sie, dass dies nur für die älteren Live-Feed-Module und nicht für die Produktionsmodule auftritt.

Wie können wir helfen?

Unser Support-Team hilft Ihnen gerne weiter!

Unsere Bürozeiten sind Montag bis Freitag von 9 bis 17 Uhr GMT. Die Zeit ist aktuell 12:50 vorm. GMT.

Wir bemühen uns, auf alle Mitteilungen innerhalb eines Arbeitstages zu antworten.

Zum Support-Bereich gehen › Wenden Sie sich an das Unternehmensteam ›
Unser großartiges Supportteam

Können wir diesen Artikel verbessern?

Wir hören gerne von Nutzern: Warum schicken Sie uns nicht eine E-Mail, schreiben Sie einen Kommentar oder tweeten Sie @reincubate?

© 2008 - 2019 Reincubate Ltd. Alle Rechte vorbehalten. Registriert in England und Wales #5189175, VAT GB151788978. Reincubate® ist eine eingetragene Marke. Datenschutz. Wir empfehlen die Multi-Faktor-Authentifizierung. Mit Liebe in London gebaut.