iCloud-API (v1)

bijgewerkt

Deze documentatie behandelt het gebruik van de verouderde iCloud-API van Reincubate.

Overzicht

De API - en in het bijzonder de feeds - bieden een aantal substantiële voordelen:

  • Eenvoudige integratie . De API is eenvoudig voor ontwikkelingsteams op elk niveau om mee te werken en ze maken het voor klanten niet meer nodig om specialistische kennis te hebben over iCloud / CloudKit-opslag of over apps van derden.

    Dit voordeel is niet gemakkelijk overdreven: de complexiteit van het ontwikkelen en onderhouden van een interface met de iCloud is aanzienlijk, en bovendien is er de noodzaak om meerdere gegevensindelingen te ondersteunen voor de belangrijkste iOS-gegevens en app-bestanden. Niet alleen gebruikt iOS verschillende gegevensformaten, maar elke app (bijvoorbeeld WhatsApp) maakt gebruik van een reeks gegevensformaten en structuren die van week tot week kunnen veranderen met app-updates.

    De API ondersteunt alle "moeilijke" functies: iOS 9, iOS 10, CloudKit, iCloud 8 + 9 samenvoegen, 2SV / 2FA, gedeeltelijke snapshots, tokenisatie, A9 en A9X.

  • Toekomstbestendig maken . Reincubate zet zich in voor het behoud van ondersteuning voor de huidige en vorige iCloud- en iOS-gegevensformaten en heeft een solide staat van dienst op dit gebied:

    • 1e om iOS-gegevenstoegang te ondersteunen (2008)
    • 1e om versleutelde iOS-gegevenstoegang te ondersteunen (2009)
    • 1e om iCloud-gegevensextractie te ondersteunen (2011)
    • 1e en alleen met een API ter ondersteuning van iCloud / CloudKit iOS 9-gegevenstoegang (2015)
  • Ondersteuning en toegang tot ongeëvenaarde expertise . Als gevolg van de focus en positionering van het bedrijf als het app-gegevensbedrijf , heeft Reincubate's team een ongeëvenaarde ervaring en kennis op dit gebied. Deze ervaring is vooral waardevol voor klanten die nieuwe apps en use-cases verkennen.

    Gebruikers van de JSON-feeds kunnen profiteren van Reincubate's eigen technieken voor het extraheren en verwijderen van app-gegevens, zodat de resulterende gegevens nauwkeuriger zijn.

  • Out of the box app-ondersteuning . Naast de belangrijkste iOS-datatypes - die alle worden ondersteund in alle iOS-versies op alle apparaten - heeft de API modules om tientallen apps van derden te ondersteunen. Enkele van de meer populaire ondersteunde apps zijn WhatsApp, Viber, Kik, WeChat, Line, SnapChat, Facebook Messenger en Skype.

  • Out of the box ontwikkelaarsplatformondersteuning . De API heeft opensource-clientimplementaties die beschikbaar zijn in een aantal talen, waaronder Python , .NET / C# en JavaScript .

  • Snelheid en schaalbaarheid . Het Reincubate iCloud API-platform is op schaal gebouwd en het JSON-invoersysteem sneller en schalen beter dan onbewerkte bestandstoegang.

  • Aanpassingsopties voor rich feed . Het feedplatform kan gemakkelijk worden aangepast voor partnerimplementaties. Voorbeelden hiervan zijn feeds in het protobuf formaat en aggregatie van bijlagen in de berichten-app.

  • Vertrouwen . Reincubate wordt vertrouwd door gebruikers van beveiliging, LEA en overheid over de hele wereld. Het bedrijf is onderworpen aan de strenge Britse wetgeving inzake gegevensbescherming en voldoet aan de veiligehavenvoorschriften van de EU en de VS.

Ermee beginnen

Geïnteresseerde partijen kunnen contact opnemen met het bedrijfsteam voor toegang tot een API-sleutel. Er is echter een testsleutel aanwezig in alle implementaties van de voorbeeldclient.

Installeren van de voorbeeld Python-client

De Python iCloud-bibliotheek kan met één opdracht worden geïnstalleerd. Om de oude bibliotheek te krijgen, moet de nieuwste 1.* -versie geïnstalleerd zijn.

$ pip install ricloud==1.*

Bron voor deze cliënt is te vinden op GitHub onder ricloud-py .

Installeren van de voorbeeld JavaScript-client

De JavaScript iCloud-bibliotheek kan met één opdracht worden geïnstalleerd. Om de oude bibliotheek te krijgen, moet de nieuwste 1.* -versie geïnstalleerd zijn.

$ npm install ricloud==1.*

Bron voor deze cliënt is te vinden op GitHub onder ricloud-js .

Installeren van de sample .NET / C # client

De C # iCloud-bibliotheek kan met één opdracht worden geïnstalleerd. Om de oude bibliotheek te krijgen, moet de nieuwste 1.* -versie geïnstalleerd zijn.

$ nuget install ricloud==1.*

Bron voor deze cliënt is te vinden op GitHub onder ricloud-csharp .

Configuratie

Elke client-implementatie wordt geleverd met een eigen set van gebundelde documentatie en een voorbeeldscript dat laat zien hoe het kan worden gebruikt. Configuratie is meestal beperkt tot het opgeven van een user en key voor verificatie ten opzichte van de API.

Werken met de API

Er zijn drie kernbewerkingen die een gebruiker moet uitvoeren met de API.

  • Verificatie en opsomming: sign-in , perform-2fa-challenge , submit-2fa-challenge
  • Feedgegevenstoegang: download-data
  • Raw-bestandstoegang: download-file

Voorbeelden in dit gedeelte worden gegeven in curl .

Op alle aanvragen die aan de API worden gedaan, moet curl worden verteld dat omleidingen met de parameter -L moeten worden gevolgd. De API-inloggegevens van de gebruiker moeten ook worden ingesteld met --user "USER:KEY" , evenals de aangepaste API- --header "Accept: application/vnd.icloud-api.v1" , --header "Accept: application/vnd.icloud-api.v1" . Dus alle curl in deze voorbeelden moeten beginnen met:

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

Merk op dat de optie -X POST ook is opgegeven, omdat alle aanvragen via POST worden gedaan. Aangezien deze oproep niet zal veranderen, wordt dit hieronder CURL_CALL .

Als algemene richtlijn retourneren alle verzoeken (behalve fouten) een session_key veld dat de huidige sessie identificeert. Als het niet wordt verzonden, moet een sign-in worden gebruikt om een nieuwe sessie te genereren. session_key moeten consistent worden gebruikt.

1. Authenticatie, 2FA / 2SV en ophalen van apparaat- en gegevenslijst

Om in te loggen als een gebruiker met tweefactorauthenticatie of tweestapsverificatie ingeschakeld voor zijn account, moet de sign-in worden gebruikt.

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

De toegang tot email en password van de iCloud-account wordt doorgegeven als parameters, met behulp van --data-urlencode om ervoor te zorgen dat besturingstekens zoals @ worden --data-urlencode .

Aanmelden met een ongeldig API-sleutelpaar

Als een gebruiker een verzoek indient voor de API met een ongeldig keypair, retourneert deze geen gegevens van meer dan een 403 .

HTTP/1.1 403 FORBIDDEN

Aanmelden bij een account waarbij de eindgebruiker iCloud T & C's niet heeft geaccepteerd

Als de gebruiker probeert in te loggen op een iCloud-account waarvoor een bijgewerkte set van iCloud-voorwaarden niet is geaccepteerd.

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

Aanmelden met slechte iCloud-referenties

Als een gebruiker probeert in te loggen met slechte iCloud-referenties, wordt een 403 geretourneerd samen met een foutbericht.

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

Aanmelden bij een account dat de eindgebruiker niet heeft gevalideerd

Als de gebruiker probeert in te loggen op een iCloud-account waarvoor de primaire e-mail niet door de gebruiker is gevalideerd.

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

Aanmelden zonder 2FA / 2SV

Aanmelden bij een niet-2FA-account kan met een enkele aanvraag.

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

Aanmelden met 2SV / 2FA

Als het account is beveiligd met tweefactorauthenticatie, retourneert de sign-in het verzoek een foutmelding dat de two-factor authentication is enabled on this account , de session_key en, in het geval van 2SV, ook een lijst met 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"
}

Voor 2SV, De volgende stap is om een 2SV uitdaging code af te geven aan een van de trustedDevices . Om dit te doen, wordt een verzoek gedaan om een perform-2fa-challenge .

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

De verzonden parameters zijn een challenge , die moet bestaan uit de items die worden vermeld op trustedDevices en de session_key , die hetzelfde is als de teruggestuurde sign-in .

  • 2FA

In het geval van 2FA is het verschil dat de aanvraag een lege lijst met trustedDevices retourneert.

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

Voor 2FA kunnen we niet kiezen welk apparaat wordt uitgedaagd, omdat elk vertrouwd apparaat automatisch wordt uitgedaagd. Om dit te doen, wordt een verzoek gedaan om een perform-2fa-challenge , zonder het challenge-argument.

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

Daarom is voor 2FA de enige parameter die wordt verzonden de session_key , die hetzelfde is als de teruggestuurde sign-in .

Uitdagend met een slecht apparaat (2FA / 2SV)

Als een gebruiker een aanvraag indient voor de API met een ongeldig device , retourneert deze geen gegevens van meer dan 500 .

HTTP/1.1 500 INTERNAL SERVER ERROR

Uitdagen met een sleuteltje (2FA / 2SV)

Als een gebruiker een aanvraag indient voor de API met een ongeldige key , retourneert deze een 403 met een validatiebericht.

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

Succesvol uitdagen (2FA / 2SV)

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

Nadat de uitdaging is verzonden naar het apparaat van de gebruiker, moeten de verzonden gegevens worden teruggestuurd naar de API met behulp van submit-2fa-challenge .

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

Een slechte uitdagingsreactie indienen (2FA / 2SV)

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

De juiste uitdagingsreactie indienen (2FA / 2SV)

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

Met dit verzoek wordt de gebruiker volledig geverifieerd en is de API-sessie actief.

Om het inlogproces te voltooien en de apparatenlijst op te halen, dient u een laatste verzoek om in te sign-in met hetzelfde email en password als het eerste verzoek en met dezelfde key gebruikt via het 2FA / 2SV-authenticatieproces.

Let op: het antwoord bevat alleen de vermelding auth_token als tokenisatie is ingeschakeld op uw API-sleutel. In dit geval raden we aan dat u de laatste aanvraag voor een refresh-session indient zoals uiteengezet in Sectie 4 hieronder, in plaats van deze in te dienen bij sign-in . Het gebruik van de auth_token is robuuster omdat het een indicator is van een reeds bestaande sessie op de systemen van Apple.

Op de nieuwe API-backend-adapter zou u een ander antwoord verwachten. Dit komt door optimalisaties in de stroom van het 2FA / 2SV-proces.

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

2. Ophalen van feedgegevens: download-data

De download-data wordt gebruikt om toegang te krijgen tot feedgegevens.

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/

De parameters die nodig zijn voor dit verzoek zijn de huidige session_key , de device_id van één van de apparaten van de login-respons, en de data_mask , dat is een OR combinatie van alle de invoermodule vlaggen van de gebruiker is geïnteresseerd in. U kunt ook een specificeren since datum van waaruit u naar gegevens gaat zoeken.

Ervan uitgaande dat de API-sleutel van de client geldig is voor al deze modules, retourneert de methode de gevraagde gegevens in JSON-indeling.

Een geldig feedverzoek indienen

Als de waarden die aan de methode zijn doorgegeven geldig zijn, retourneert deze de feedinhoud in het HTTP-antwoordgedeelte.

HTTP/1.1 200 OK

Een feedaanvraag indienen met ontbrekende parameters

Als een van de vereiste parameters ontbreekt, retourneert de methode een reactiecode voor een onjuist verzoek.

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

Een feedaanvraag indienen met ongeldige parameters

Als voor elke parameter een ongeldige of verkeerd ingedeelde waarde wordt ingediend, retourneert de methode een reactiecode voor een onjuist verzoek.

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

Monster invoermodule vlaggen

De volgende modulevlaggen kunnen samen worden gemaskeerd voor de mask van de download-data . Dit is geen uitputtende lijst.

  • 0000000000001 Berichten
  • 0000000000002 Foto's en video's
  • 0000000000004 Browser geschiedenis
  • 0000000000008 Oproepgeschiedenis
  • 0000000000016 Contacten
  • 0000000000032 Geïnstalleerde apps
  • 0000000000256 Locatie (live)
  • 0000000000512 WhatsApp-berichten
  • 0000000001024 Skype-berichten
  • 0000000002048 Agenda
  • 0000000004096
  • 0000000008192 Kik-berichten
  • 0000000016384 Viber-berichten
  • Facebook-berichten 0000000032768
  • 0000000065536 WeChat-berichten
  • 0000000131072 Snapchat-berichten
  • 0000000262144 Bestandslijst
  • 0000000524288 Browser geschiedenis (live)
  • 0000001048576 WhatsApp-oproepgeschiedenis
  • 0000002097152 Viber-oproepgeschiedenis
  • 0000004194304 App-gebruik
  • 0000008388608 Opmerkingen
  • 0000033554432 HealthKit
  • 0000067108864 HealthKit-stappen
  • 0000134217728 Safari-cookies
  • 0000268435456 Kik-contacten
  • 0000536870912 Viber-contacten
  • 0001073741824 Viber-gesprekken
  • 0002147483648 Oproepgeschiedenis (live)
  • 0004294967296 Locaties
  • 0008589934592
  • 0017179869184 Snapchat-verhalen
  • 0034359738368 Voicemails
  • 0068719476736 Opnamen
  • 0137438953472 Video's
  • 0274877906944 Foto's en video's (live)
  • 0549755813888 Tinder-berichten
  • 1099511627776 Linked Apple Watches
  • 2199023255552
  • 4398046511104 Contacten (live)
  • 8796093022208 Accountgegevens

Als u bijvoorbeeld een feed met berichten, oproepgeschiedenis en browsergeschiedenis wilt aanvragen, is het masker 1 + 4 + 8 = 13 .

JSON-feedindelingen

De JSON-feeds zijn zo ontworpen dat ze zo eenvoudig mogelijk te ontleden zijn. De feed retourneert alle gegevenstypen die binnen één antwoord zijn aangevraagd.

Elke invoermodule die is opgegeven in de modulevlag, heeft zijn eigen sleutel in het JSON-woordenboek op het hoogste niveau dat wordt geretourneerd.

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

3. Ophalen van onbewerkte bestanden: download-file

De download-file is beschikbaar voor het downloaden van berichtbijlagen of het rechtstreeks downloaden van meer esoterische bestanden van de 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

De benodigde parameters zijn de session_key , de target device_id en een file_id . Het bovenstaande verzoek zal het bestand downloaden en het pad opslaan dat is gespecificeerd om te curl met de optie -o .

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.

Een geldig bestandsverzoek indienen

Als de waarden die aan de methode zijn doorgegeven geldig zijn, wordt de inhoud van het binaire bestand in de instantie voor HTTP-respons geretourneerd.

HTTP/1.1 200 OK

Een bestandsaanvraag indienen voor een niet-bestaand bestand

Als een bestand niet aanwezig is op de iCloud, of we kunnen het niet ophalen bij de juiste derde partij, zal de methode nog steeds succesvol terugkeren, maar de berichttekst zal leeg zijn.

HTTP/1.1 200 OK

Een bestandsaanvraag indienen nadat de sessie is verlopen

Als de sessie is verlopen, krijgen clients een reactiecode voor een onjuist verzoek.

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

Monster file_id s

Gemeenschappelijke hash-sleutels die zijn gekoppeld aan apps voor directe toegang tot bestanden omvatten het volgende.

  • 3d0d7e5fb2ce288813306e4d4636395e047a3d28 SMS
  • 1b6b187a1b60b9ae8b720c79e2c67f472bab09c0 WhatsApp
  • 1c6a49018bcace96656e4fe8f08d572ce071b92c WhatsApp
  • 7c7fba66680ef796b916b067077cc246adacf01d WhatsApp
  • b39bac0d347adfaf172527f97c3a5fa3df726a3a Viber
  • 8e281be6657d4523710d96341b6f86ba89b56df7 Kik
  • ff1324e6b949111b2fb449ecddb50c89c3699a78 Oproepen
  • a49bfab36504be1bf563c1d1813b05efd6076717 Oproepen
  • 2b2b0084a1bc3a5ac8c27afdf14afb42c61a19ca Oproepen
  • 5a4935c78a5255723f707230a451d79c540d2741 Oproepen
  • 12b144c0bd44f2b3dffd9186d3f9c05b917cee25 Foto's
  • adb8c77534444e97c31ff15924d50f3ed1fbd3b1 Contacten
  • 2041457d5fe04d39d0ab481178355df6781e6858 Afspraken
  • 3ecf3efff3a55d6155efce2828579e8a3cd881c1 Browsegeschiedenis
  • cd89f9e10d3497912bfc92e5dc674ca989cfdd44 Browsegeschiedenis
  • Lijn 2d711a1f5613f5259730b98328a3f7e816698f88

Sommige messenger-applicaties - zoals Skype, Facebook Messenger en WeChat - variëren de file_id afhankelijk van het gesprek.

4. Een accountaanmelding vernieuwen met behulp van authenticatietokens

Het auth_token is een auth_token met Apple. Het duurt minimaal een dag en wordt vernieuwd wanneer een verzoek wordt ingediend bij het eindpunt van de refresh-session in de API. Een dagelijkse peiling naar het eindpunt van de refresh-session is alles wat nodig is om dit token voort te zetten.

Aangezien het eindpunt van de refresh-session alleen het auth_token als invoer heeft en de apparaatlijst plus een nieuwe sessiesleutel retourneert, kan het worden gebruikt om een nieuwe sessie op de API te starten zonder opnieuw in te loggen op het account. Dit is vooral handig voor 2FA / 2SV ingeschakeld accounts als het authenticatieproces alleen moet worden afgerond voor de eerste sign-in aanvraag.

Om het te gebruiken, moet men het auth_token veld gebruiken dat is opgehaald tijdens het inloggen. Dit moet worden verzonden naar het eindpunt van de refresh-session .

De parameter auth_token is terug van het initiële verzoek sign-in en moet worden gebruikt tegen het eindpunt van de refresh-session .

We raden dat ook de optionele parameter account in het verzoek, omdat dit helpt ons toezicht op de aanvraag via ons hele systeem. De waarde van deze parameter is simpelweg de gebruikersnaam van de iCloud-account van de gebruiker.

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

Een ongeldige verificatietoken indienen

Als het token niet geldig is, retourneert het eindpunt een onjuiste aanvraagcode.

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

Een geldig verificatietoken indienen

Het antwoord is vergelijkbaar met het inlog-eindpunt: een nieuw gemaakte sessiesleutel en de bijgewerkte lijst met apparaten met alle metadata die nodig zijn om ze te identificeren. Men kan de nieuwe sessie gebruiken om door te gaan met het verzamelen van gegevens.

HTTP/1.1 200 OK

5. Verwijderen van iCloud-fotobibliotheekbestanden: delete-file

De methode voor het verwijderen van delete-file is beschikbaar voor het verwijderen van foto's uit de iCloud-fotobibliotheek. Het accepteert file , key en een permament vlag als parameters.

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

De file bevat de id van de foto (opvraagbaar via de web_photos feed) en de permanent markeringen als het bestand zacht of hard verwijderd zal worden. Als het is ingesteld op False , zorgt het verzoek ervoor dat het bestand wordt verplaatst naar het fotoalbum 'Onlangs verwijderd' (ook wel 'zachte verwijdering' genoemd). Aan de andere kant, als het is ingesteld op True , zal het verzoek het bestand verwijderen uit het album "Recently deleted" en zal het permanent worden verwijderd (bekend als hard verwijderen).

Succesvolle zachte verwijdering

Als de zachte verwijdering succesvol was, wordt de foto verplaatst naar het album "Recent verwijderd" en wordt een succesbericht weergegeven.

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

Succesvolle harde verwijdering

Als de harde verwijdering succesvol was, wordt de foto verwijderd van gekoppelde apparaten wanneer deze apparaten worden gesynchroniseerd met iCloud. Door de gebruikte techniek zullen echter hard verwijderde bestanden nog steeds voor een onbepaalde tijd te vinden en te downloaden zijn van Reincubate's iCloud Photo API. Dit gedrag kan worden gebruikt om niet-vermelde bestanden te verwijderen.

Houd er rekening mee dat voor een bestand dat hard moet worden verwijderd, het eerst soft-gewist moet zijn.

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

Mislukt zacht of hard verwijderen

Als het verzoek mislukt, retourneert het een foutreactie.

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

Downloads versnellen met native SDK

Voor sterk geparallelliseerde bestandsdownloads bieden we een C ++ SDK waarmee clients lokaal bestanden kunnen downloaden en decoderen, waardoor overhead (maar het gemak) van het eindpunt van het download-file wordt vermeden. Deze SDK is beschikbaar voor Linux (Ubuntu 12.04, Ubuntu 14.04, Debian Jessie) en Windows.

Het is geïntegreerd met de rest van de workflow van de API.

downloads

Gebruikers kunnen de huidige bibliotheek laden en DownloadFiles oproepen, het SDK-toegangspunt, dat de volgende handtekening heeft:

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)

Met deze externe callback-definities:

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

De parameters zijn:

  • clientID De API-client-ID.
  • clientKey De sleutel API-client.
  • sessionKey Huidige sessiesleutel.
  • apparaatID deviceID ID.
  • fileIDs Array van vereiste file_ids .
  • fileIDs_count Lengte van de array fileIDs .
  • targetDir Uitvoermap waar de bestanden worden gedownload.
  • progFunc Voortgang callback-functie, die wordt aangeroepen telkens wanneer een voortgangsupdate wordt uitgevoerd.
  • progParam Aangepaste parameter die kan worden doorgegeven aan de progFunc callback.
  • getErrorBuffer Deze callback-functie moet een buffer retourneren die de fouten bevat die optreden tijdens het downloaden.

Nadat de download is voltooid, bevinden de aangevraagde bestands-ID's zich in de map die is aangewezen door targetDir .

Oudere SDK-versies

In oudere versies had het ingangspunt van DownloadFiles een iets andere signatuur:

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)

De extra parameter is:

  • getReplyBuffer Net als getErrorBuffer is deze callback-functie verantwoordelijk voor het retourneren van een geldige buffer waar de methode DownloadFiles kan schrijven. In dit geval bevat deze buffer het antwoord met de definitieve status van de download.

Account en apparaat deactiveren en opnieuw activeren

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/
Account reactivering
CURL_CALL --data-urlencode "account=ACCOUNT_ID"
          https://api.icloudextractor.com/c/client-management/activation/
Apparaat deactivering
CURL_CALL --data-urlencode "device=DEVICE_ID"
          https://api.icloudextractor.com/c/client-management/deactivation/
Heractivering van het apparaat
CURL_CALL --data-urlencode "device=DEVICE_ID"
          https://api.icloudextractor.com/c/client-management/activation/

Een geldig verzoek indienen

Als de waarden die zijn doorgegeven aan de accountdeactiveringsmethode geldig zijn, retourneert deze een bericht in de HTTP-responslichaam.

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

Als een gebruiker verzoekt om een apparaat te deactiveren, wordt een vergelijkbaar bericht geretourneerd in het HTTP-antwoordgedeelte:

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

Een aanvraag indienen met ongeldige inloggegevens

Als de gebruiker een verzoek om uit te schakelen of opnieuw een account met een ongeldig maakt account_id of ongeldige device_id , of als de account_id of device_id niet worden geassocieerd met de gebruiker, het zal een HTTP 400 terug te keren.

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

Eenzelfde fouten en bericht wordt geretourneerd ongeldig account_id of account_id die niet associted de gebruiker.

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

Een verzoek herhalen

Als een gebruiker een apparaat of account aanvraagt om te worden gedeactiveerd of gereactiveerd wanneer het al in die staat bestaat, wordt een bericht geretourneerd in de HTTP-antwoordinstantie, waarin de gebruiker wordt geïnformeerd dat het gevraagde device_id of account_id zich al in de aangevraagde staat bevindt:

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

Een soortgelijk bericht wordt getoond in het geval van een herhaald verzoek om deactivering van het apparaat en reactivering en reactivering van het account.

Gegevens opvragen voor een gedeactiveerd account of apparaat

Als een gebruiker gegevens opvraagt van een account of apparaat dat is gedeactiveerd, wordt er een HTTP 403 gebruikt:

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

Nogmaals, een soortgelijk bericht wordt gegeven in het geval van het opvragen van gegevens van een gedeactiveerd account.

De feed retourneert een bericht: "Neem contact op met enterprise@reincubate.com voor toegang tot deze gegevens"

Dit bericht wordt teruggestuurd wanneer de demonstratiesleutel wordt gebruikt. Neem contact met ons op voor een proefsleutel met toegang tot meer gegevens. Als u al een evaluatiesleutel heeft, geeft u deze dan correct op in uw clientimplementatie?

Ik probeer het databasebestand van een app op te halen op file_id maar ik krijg geen gegevens terug

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.

Soms veranderen app-auteurs echter de naam van het bestand waarin ze gegevens opslaan (en soms doet Apple dit in nieuwe iOS-releases). Dat is waarom, bijvoorbeeld, er verschillende file_id 's zijn om te onderzoeken bij het verkrijgen van WhatsApp-gegevens. Deze file_id 's kunnen worden gewijzigd wanneer een app wordt bijgewerkt.

Het is aan te bevelen dat gebruikers JSON-feeds halen in plaats van met bestanden te werken en ze direct te manipuleren. Met behulp van de feeds hoeft u zich geen zorgen te maken over de effectiviteit van SQL, PList-parsing of -herstel en de feeds zijn sneller en veel eenvoudiger om mee te werken.

Ik ontvang snelheidsbeperkende fouten van de server

De API-tarieflimieten worden gedurende een periode van 15 minuten aangevraagd en deze beperking wordt per sleutel geconfigureerd. De meeste sleutels zijn voor beveiligingsdoeleinden beperkt.

API-clients zijn gegevens geretourneerd over hun gebruik tegen limieten in de HTTP headerreacties die ze ontvangen. Deze reacties gebruiken de volgende headers:

  • X-Rate-Limit-Limit Het aantal toegestane verzoeken in een venster van 15 minuten.
  • X-Rate-Limit-Remaining Het aantal resterende verzoeken in de toewijzing van het huidige venster.
  • X-Rate-Limit-Reset De resterende tijd totdat het huidige snelheidslimietvenster eindigt, in milliseconden.

Hier is een voorbeeld van een reeks actieve headers van een sleutel op een limiet van 1.000 verzoeken.

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

Als de snelheidslimiet wordt geraakt, reageert de server met:

HTTP/1.1 429 TOO MANY REQUESTS

De server bevat de drie rate-limit headers in dit antwoord.

Het correcte clientgedrag is om te wachten totdat de duur die is opgegeven door X-Rate-Limit-Reset wordt doorgegeven, waarna X-Rate-Limit-Remaining opnieuw wordt ingesteld.

Ik ontvang een e-mail over externe toegang tot het iCloud-account dat ik heb geopend

Peiling van de legacy-livefeedmodules (zoals hierboven vermeld in de sectie met voorbeeldfeedmodule-vlaggen) kan een e-mail verzenden naar het adres dat is gekoppeld aan dat iCloud-account. Let op: dit gebeurt alleen voor de oudere live-feedmodules en niet voor de productiemodules.

Hoe kunnen we helpen?

Ons ondersteuningsteam is er om u te helpen!

Onze kantooruren zijn van maandag tot vrijdag van 09.00 tot 17.00 uur GMT. De tijd is momenteel 1:07 AM GMT.

We streven ernaar om alle berichten binnen één werkdag te beantwoorden.

Ga naar het ondersteuningsgedeelte › Neem contact op met het Enterprise-team ›
Ons geweldige ondersteuningsteam

Kunnen we dit artikel verbeteren?

We horen graag van gebruikers: Stuur ons een e-mail, laat een reactie achter of stuur een tweet @reincubate?

© 2008 - 2019 Reincubate Ltd. Alle rechten voorbehouden. Geregistreerd in Engeland en Wales #5189175, VAT GB151788978. Reincubate® is een geregistreerd handelsmerk. Privacy en voorwaarden. Wij bevelen 2FA aan. Gebouwd met in Londen.