iCloud API (v1)

aggiornato

Questa documentazione copre l'uso dell'API iCloud legacy di Reincubate.

Panoramica

L'API - e in particolare i feed - offre numerosi vantaggi sostanziali:

  • Facilità di integrazione . L'API è facile per i team di sviluppo di qualsiasi livello con cui lavorare e elimina la necessità per i clienti di avere una conoscenza altamente specialistica sull'archiviazione iCloud / CloudKit o su qualsiasi app di terze parti.

    Questo vantaggio non è facilmente sopravvalutato: la complessità dello sviluppo e della manutenzione di un'interfaccia per iCloud è notevole e su di essa è necessario supportare più formati di dati per i dati principali di iOS e di app. IOS non solo utilizza formati di dati diversi, ma ogni app (ad esempio, WhatsApp) utilizza una serie di formati e strutture di dati che possono cambiare settimana dopo settimana con gli aggiornamenti delle app.

    L'API supporta tutte le funzionalità "difficili" : iOS 9, iOS 10, CloudKit, iCloud 8 + 9, 2SV / 2FA, snapshot parziali, tokenizzazione, A9 e A9X.

  • Prove future . Reincubate si impegna a mantenere il supporto per i formati di dati iCloud e iOS contemporanei e passati e ha una solida esperienza in questo spazio:

    • 1 ° per supportare l'accesso ai dati iOS (2008)
    • 1 ° supporto per l'accesso ai dati crittografati iOS (2009)
    • 1 ° supporto per l'estrazione dei dati di iCloud (2011)
    • 1 ° e solo con un'API per supportare l'accesso ai dati iCloud / CloudKit iOS 9 (2015)
  • Supporto e accesso a competenze senza eguali . Come conseguenza del focus e del posizionamento dell'azienda come azienda di dati delle app , il team di Reincubate ha un'esperienza e una conoscenza ineguagliabili nel campo. Questa esperienza è particolarmente utile per i clienti che esplorano nuove app e casi d'uso.

    Gli utenti dei feed JSON sono in grado di sfruttare le tecniche proprietarie di Reincubate nell'estrazione e nella rimozione dei dati delle app, in modo tale che i dati risultanti siano più accurati.

  • Supporto app fuori dalla scatola . Oltre ai principali tipi di dati iOS, tutti supportati su tutte le versioni iOS su tutti i dispositivi, l'API dispone di moduli per supportare decine di app di terze parti. Alcune delle più popolari app supportate includono WhatsApp, Viber, Kik, WeChat, Line, SnapChat, Facebook Messenger e Skype.

  • Supporto per la piattaforma di sviluppo out of the box . L'API ha implementazioni client open source disponibili in un numero di lingue, tra cui Python , .NET / C# e JavaScript .

  • Velocità e scalabilità . La piattaforma Reincubate iCloud API è stata creata per ridimensionare e il sistema di feed JSON è più veloce e scalabile meglio dell'accesso ai file raw.

  • Opzioni di personalizzazione dei feed ricche . La piattaforma di alimentazione è prontamente personalizzabile per le distribuzioni dei partner. Gli esempi includono i protobuf formato protobuf e l'aggregazione degli allegati delle app di messaggistica.

  • Fiducia . La reincubazione è affidata alla sicurezza, agli utenti LEA e governativi di tutto il mondo. La società è soggetta alla rigorosa legislazione sulla protezione dei dati del Regno Unito ed è conforme alle normative Safe Harbor di UE e USA.

Iniziare

Le parti interessate possono contattare il team aziendale per accedere a una chiave API. Tuttavia, viene fornita una chiave di test in tutte le implementazioni client di esempio.

Installazione del client Python di esempio

La libreria iCloud di Python può essere installata con un singolo comando. Per ottenere la libreria legacy, è necessario installare la versione 1.* recente.

$ pip install ricloud==1.*

L'origine per questo client può essere trovata su GitHub sotto ricloud-py .

Installazione del client JavaScript di esempio

La libreria JavaScript iCloud può essere installata con un singolo comando. Per ottenere la libreria legacy, è necessario installare la versione 1.* recente.

$ npm install ricloud==1.*

L'origine di questo client può essere trovata su GitHub sotto ricloud-js .

Installazione del client .NET / C # di esempio

La libreria C # iCloud può essere installata con un singolo comando. Per ottenere la libreria legacy, è necessario installare la versione 1.* recente.

$ nuget install ricloud==1.*

L'origine per questo client può essere trovata su GitHub sotto ricloud-csharp .

Configurazione

Ogni implementazione client viene fornita con il proprio set di documentazione in bundle e uno script di esempio che mostra come può essere utilizzato. La configurazione è in genere limitata alla specifica di un user e il valore della key per l'autenticazione rispetto all'API.

Lavorare con l'API

Esistono tre operazioni principali che un utente potrebbe dover eseguire con l'API.

  • Autenticazione ed enumerazione: sign-in , perform-2fa-challenge , submit-2fa-challenge
  • Feed data access: download-data
  • Accesso ai file raw: download-file

Gli esempi in questa sezione sono forniti in formato curl .

Su tutte le richieste fatte all'API, si deve dire a curl di seguire i reindirizzamenti con il parametro -L . Le credenziali API dell'utente devono inoltre essere impostate con --user "USER:KEY" , così come l'intestazione della versione API personalizzata, --header "Accept: application/vnd.icloud-api.v1" . Quindi tutte le chiamate di curl in questi esempi devono iniziare con:

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

Si noti che l'opzione -X POST viene anche specificata, poiché tutte le richieste vengono effettuate tramite POST . Poiché questa chiamata non cambierà, verrà indicata di seguito come CURL_CALL .

Come linea guida generale, tutte le richieste (tranne gli errori) restituiscono un campo session_key che identifica la sessione corrente. Se non viene inviato, un sign-in richiesta deve essere utilizzato per generare una nuova sessione. session_key valori di session_key dovrebbero essere usati in modo coerente.

1. Autenticazione, 2FA / 2SV e recupero del dispositivo e dell'elenco dati

Per accedere come utente con l'autenticazione a due fattori o verifica in due passaggi abilitata per proprio conto, il sign-in metodo deve essere utilizzato.

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

L'e email e la password dell'account iCloud per l'accesso vengono passati come parametri, utilizzando --data-urlencode per garantire che caratteri di controllo come @ siano --data-urlencode a escape.

Accesso con una coppia di chiavi API non valida

Se un utente effettua una richiesta dell'API con una coppia di chiavi non valida, non restituirà alcun dato oltre il 403 .

HTTP/1.1 403 FORBIDDEN

Accesso a un account in cui l'utente finale non ha accettato i T & C di iCloud

Se l'utente tenta di accedere a un account iCloud per il quale non è stata accettata una serie aggiornata di termini e condizioni di iCloud.

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

Accesso con cattive credenziali iCloud

Se un utente tenta di accedere con cattive credenziali iCloud, verrà restituito un 403 insieme a un messaggio di errore.

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

Accesso a un account che l'utente finale non ha convalidato

Se l'utente tenta di accedere a un account iCloud per il quale l'email principale non è stata convalidata dall'utente.

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

Accesso senza 2FA / 2SV

L'accesso a un account non 2FA può essere eseguito con una singola richiesta.

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

Accesso con 2SV / 2FA

Se l'account è stato assicurato con l'autenticazione a due fattori, il sign-in su richiesta restituirà un messaggio di errore che indica che two-factor authentication is enabled on this account , il session_key e, nel caso di 2SV, anche un elenco di 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"
}

Per 2SV, il passaggio successivo consiste nell'emettere un codice di verifica 2SV a uno dei trustedDevices . Per fare ciò viene richiesta di perform-2fa-challenge .

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

I parametri che hanno inviato sono challenge , che deve contenere sugli elementi elencati sul trustedDevices , e la session_key , che sarà lo stesso del sign-in richiesta restituito.

  • 2FA

Nel caso di 2FA, la differenza è che la richiesta restituirà un elenco trustedDevices vuoto.

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

Per 2FA, non è possibile scegliere quale dispositivo è messo in discussione, poiché ogni dispositivo attendibile verrà automaticamente messo in discussione. Per fare ciò viene richiesta di perform-2fa-challenge , senza l'argomento challenge.

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

Pertanto, per 2FA gli unici parametri che viene inviato è il session_key , che sarà lo stesso del sign-in richiesta restituito.

Sfidare con un dispositivo non valido (2FA / 2SV)

Se un utente effettua una richiesta dell'API con un device non valido, non restituirà alcun dato oltre il 500 .

HTTP/1.1 500 INTERNAL SERVER ERROR

Sfidare con una cattiva chiave (2FA / 2SV)

Se un utente effettua una richiesta dell'API con una key non valida, restituirà un 403 con un messaggio di convalida.

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

Sfida con successo (2FA / 2SV)

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

Una volta che la sfida è stata inviata al dispositivo dell'utente, i dati inviati devono essere ritrasmessi all'API utilizzando submit-2fa-challenge .

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

Invio di una risposta non valida (2FA / 2SV)

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

Invio della giusta risposta alla sfida (2FA / 2SV)

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

Con questa richiesta, l'utente sarà completamente autenticato e la sessione API sarà attiva.

Per completare la procedura di accesso e recuperare l'elenco dei dispositivi, inviare una richiesta finale di sign-in utilizzando la stessa e email e password della prima richiesta e utilizzando la stessa key utilizzata attraverso il processo di autenticazione 2FA / 2SV.

Nota, la risposta conterrà solo la voce auth_token se la tua chiave API ha abilitato la tokenizzazione. In questo caso, ti consigliamo di inviare la richiesta finale alla refresh-session di refresh-session come descritto nella Sezione 4 di seguito, invece di inviarla per l' sign-in . L'utilizzo di auth_token è più auth_token in quanto è un indicatore di una sessione già stabilita sui sistemi Apple.

Sul nuovo adattatore di backend API è necessario prevedere una risposta diversa. Ciò è dovuto alle ottimizzazioni nel flusso del processo 2FA / 2SV.

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

2. Recupero dei dati del feed: download-data

Il metodo di download-data viene utilizzato per accedere ai dati del feed.

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/

I parametri necessari per questa richiesta sono la corrente session_key , l' device_id di uno dei dispositivi dalla risposta di login, e la data_mask , che è un OR combinazione di tutte le bandiere del modulo di alimentazione l'utente è interessato a. È inoltre possibile specificare un since data da cui iniziare a cercare i dati.

Supponendo che la chiave API del client sia valida per tutti questi moduli, il metodo restituirà i dati richiesti in formato JSON.

Invio di una richiesta di feed valida

Se i valori passati al metodo sono validi, restituirà il contenuto del feed nel corpo della risposta HTTP.

HTTP/1.1 200 OK

Invio di una richiesta di feed con parametri mancanti

Se manca uno dei parametri richiesti, il metodo restituirà un codice di risposta di richiesta non valida.

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

Invio di una richiesta di feed con parametri non validi

Se viene inviato un valore non valido o errato per qualsiasi parametro, il metodo restituirà un codice di risposta di richiesta non valida.

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

Esempio di flag dei moduli di alimentazione

I seguenti flag dei moduli possono essere mascherati insieme per il parametro mask del metodo dei download-data . Questa non è una lista esaustiva.

  • 0000000000001 Messaggi
  • 0000000000002 Foto e video
  • 0000000000004 Cronologia del browser
  • 0000000000008 Cronologia chiamate
  • 0000000000016 Contatti
  • 0000000000032 App installate
  • 0000000000256 Ubicazione (live)
  • 0000000000512 messaggi di WhatsApp
  • 0000000001024 messaggi Skype
  • 0000000002048 Calendario
  • 0000000004096 Messaggi di linea
  • 0000000008192 Messaggi Kik
  • 0000000016384 Messaggi Viber
  • 0000000032768 messaggi di Facebook
  • 0000000065536 Messaggi WeChat
  • 0000000131072 Messaggi Snapchat
  • 0000000262144 Elenco file
  • 0000000524288 Cronologia del browser (live)
  • 0000001048576 Cronologia delle chiamate di WhatsApp
  • 0000002097152 Cronologia delle chiamate di Viber
  • 0000004194304 Utilizzo app
  • 0000008388608 Note
  • 0000033554432 HealthKit
  • 0000067108864 HealthKit solo per i passaggi
  • 0000134217728 Cookie di Safari
  • 0000268435456 Contatti Kik
  • 0000536870912 Contatti Viber
  • 0001073741824 conversazioni di Viber
  • 0002147483648 Cronologia chiamate (live)
  • 0004294967296 posizioni
  • 0008589934592 messaggi di escursione
  • 0017179869184 Storie di Snapchat
  • 0034359738368 Messaggi vocali
  • 0068719476736 Registrazioni
  • 0137438953472 Video
  • 0274877906944 Foto e video (live)
  • 0549755813888 messaggi Tinder
  • 1099511627776 Apple Watch collegati
  • 2199023255552 escursione
  • 4398046511104 Contatti (live)
  • 8796093022208 Informazioni sull'account

Ad esempio, per richiedere un feed di messaggi, cronologia chiamate e cronologia browser, la maschera sarebbe 1 + 4 + 8 = 13 .

Formati di feed JSON

I feed JSON sono progettati per essere il più semplice da analizzare. Il feed restituirà tutti i tipi di dati richiesti all'interno di una singola risposta.

Ogni modulo di feed specificato nel flag del modulo avrà la propria chiave nel dizionario JSON di livello superiore che viene restituito.

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

3. Recupero di file non elaborati: download-file

Il metodo di download-file è disponibile per scaricare allegati di messaggi o per scaricare direttamente file più esoterici da 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

I parametri necessari sono session_key , device_id destinazione e file_id . La richiesta precedente scaricherà il file e lo memorizzerà nel percorso specificato per curl con l'opzione -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.

Invio di una richiesta di file valida

Se i valori passati al metodo sono validi, restituirà il contenuto del file binario nel corpo della risposta HTTP.

HTTP/1.1 200 OK

Invio di una richiesta di file per un file inesistente

Se un file non è presente su iCloud o non è possibile recuperarlo dalla terza parte appropriata, il metodo verrà comunque restituito correttamente, tuttavia il corpo del messaggio sarà vuoto.

HTTP/1.1 200 OK

Invio di una richiesta di file dopo la sessione è scaduta

Se la sessione è scaduta, i client riceveranno un codice di risposta di richiesta non valida.

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

Esempio file_id s

Le comuni chiavi di hash associate alle app per l'accesso diretto ai file includono quanto segue.

  • 3d0d7e5fb2ce288813306e4d4636395e047a3d28 SMS
  • 1b6b187a1b60b9ae8b720c79e2c67f472bab09c0 WhatsApp
  • 1c6a49018bcace96656e4fe8f08d572ce071b92c WhatsApp
  • 7c7fba66680ef796b916b067077cc246adacf01d WhatsApp
  • b39bac0d347adfaf172527f97c3a5fa3df726a3a Viber
  • 8e281be6657d4523710d96341b6f86ba89b56df7 Kik
  • Chiamate ff1324e6b949111b2fb449ecddb50c89c3699a78
  • a49bfab36504be1bf563c1d1813b05efd6076717 Chiamate
  • Chiamate 2b2b0084a1bc3a5ac8c27afdf14afb42c61a19ca
  • 5a4935c78a5255723f707230a451d79c540d2741 Chiamate
  • 12b144c0bd44f2b3dffd9186d3f9c05b917cee25 foto
  • adb8c77534444e97c31ff15924d50f3ed1fbd3b1 Contatti
  • 2041457d5fe04d39d0ab481178355df6781e6858 Appuntamenti
  • 3ecf3efff3a55d6155efce2828579e8a3cd881c1 Cronologia di navigazione
  • cd89f9e10d3497912bfc92e5dc674ca989cfdd44 Cronologia di navigazione
  • Linea 2d711a1f5613f5259730b98328a3f7e816698f88

Alcune applicazioni di messaggistica, come Skype, Facebook Messenger e WeChat, variano il file_id base alla conversazione.

4. Aggiornamento di un account di accesso tramite token di autenticazione

auth_token è un token di accesso con Apple. Dura per almeno un giorno e viene aggiornato quando viene effettuata una richiesta all'endpoint di refresh-session sull'API. Un sondaggio giornaliero per l'endpoint della refresh-session è tutto ciò che è necessario per mantenere questo token.

Poiché l'endpoint della refresh-session richiede solo l' auth_token come input e restituisce l'elenco dei dispositivi più una nuova chiave di sessione, può essere utilizzato per avviare una nuova sessione sull'API senza la necessità di accedere nuovamente all'account. Ciò è particolarmente utile per gli account abilitati 2FA / 2SV poiché il processo di autenticazione deve essere completato solo per la richiesta di sign-in iniziale.

Per usarlo, è necessario utilizzare il campo auth_token recuperato durante l'accesso. Questo deve essere inviato all'endpoint della refresh-session .

Il parametro auth_token viene restituito dalla richiesta di sign-in iniziale e deve essere utilizzato contro l'endpoint della refresh-session .

Ti consigliamo di includere anche l' account parametri facoltativi nella richiesta, poiché questo ci aiuta a monitorare la richiesta attraverso l'intero sistema. Il valore di questo parametro è semplicemente il nome utente dell'account iCloud dell'utente.

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

Invio di un token di autenticazione non valido

Se il token non è valido, l'endpoint restituirà un codice di richiesta errato.

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

Invio di un token di autenticazione valido

La risposta sarà simile all'endpoint di accesso: una chiave di sessione appena creata e l'elenco aggiornato di dispositivi con tutti i metadati necessari per identificarli. Si può usare la nuova sessione per continuare a tirare i dati.

HTTP/1.1 200 OK

5. Eliminazione dei file di iCloud Photo Library: delete-file

Il metodo delete-file è disponibile per l'eliminazione di foto dalla Libreria fotografica di iCloud. Accetta file , key e un flag di permament come parametri.

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

Il parametro del file conterrà l'id della foto (recuperabile tramite il feed web_photos ) e il flag permanent se il file sarà soft o hard cancellato. Se è impostato su False , la richiesta farà spostare il file nell'album delle foto "Eliminato di recente" (noto come soft delete). D'altra parte, se è impostato su True , la richiesta rimuoverà il file dall'album "Recently deleted" e causerà l'eliminazione definitiva (nota come hard delete).

Eliminazione riuscita riuscita

Se l'eliminazione soft ha avuto esito positivo, la foto verrà spostata nell'album "Eliminato di recente" e restituirà un messaggio di successo.

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

Eliminazione difficile riuscita

Se l'eliminazione definitiva ha avuto esito positivo, la foto verrà rimossa dai dispositivi associati quando questi dispositivi verranno sincronizzati su iCloud. Tuttavia, a causa della tecnica utilizzata, i file cancellati saranno comunque rilevabili e scaricati dall'API iCloud Photo di Reincubate per un periodo di tempo indeterminato. Questo comportamento può essere utilizzato per annullare la cancellazione di file non in elenco.

Si noti che, per un file che deve essere cancellato, deve essere stato eliminato per primo.

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

Cancellazione soft o hard fallita

Se la richiesta non riesce, verrà restituita una risposta di errore.

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

Accelerazione dei download con l'SDK nativo

Per download di file altamente paralleli, offriamo un SDK C ++ che consente ai client di scaricare e decrittografare i file localmente, evitando il sovraccarico (ma la perdita di praticità) dell'endpoint del download-file . Questo SDK è disponibile per Linux (Ubuntu 12.04, Ubuntu 14.04, Debian Jessie) e Windows.

È integrato con il resto del flusso di lavoro dell'API.

download

Gli utenti possono caricare la libreria corrente e chiamare DownloadFiles , il punto di accesso SDK, che ha la seguente firma:

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)

Con queste definizioni di callback esterne:

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

I parametri sono:

  • clientID L'ID del client API.
  • clientKey La chiave del client API.
  • sessionKey Chiave di sessione corrente.
  • deviceID ID destinazione del dispositivo.
  • fileIDs Matrice di file_ids necessari.
  • fileIDs_count Lunghezza della matrice fileIDs .
  • targetDir Output directory in cui verranno scaricati i file.
  • progFunc Progresso funzione di callback, che viene chiamata ogni volta che viene effettuato un aggiornamento di avanzamento.
  • progParam Parametro personalizzato che può essere passato al callback progFunc .
  • getErrorBuffer Questa funzione di callback dovrebbe restituire un buffer che manterrà gli errori occorsi durante il download.

Al termine del download, gli ID file richiesti si troveranno nella cartella designata da targetDir .

Versioni precedenti dell'SDK

Nelle versioni precedenti, il punto di accesso di DownloadFiles aveva una firma leggermente diversa:

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)

Il parametro aggiuntivo è:

  • getReplyBuffer Simile a getErrorBuffer , questa funzione di callback è responsabile della restituzione di un buffer valido in cui il metodo DownloadFiles può scrivere. In questo caso, questo buffer conterrà la risposta con lo stato finale del download.

Disattivazione e riattivazione dell'account e del dispositivo

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/
Riattivazione dell'account
CURL_CALL --data-urlencode "account=ACCOUNT_ID"
          https://api.icloudextractor.com/c/client-management/activation/
Disattivazione del dispositivo
CURL_CALL --data-urlencode "device=DEVICE_ID"
          https://api.icloudextractor.com/c/client-management/deactivation/
Riattivazione del dispositivo
CURL_CALL --data-urlencode "device=DEVICE_ID"
          https://api.icloudextractor.com/c/client-management/activation/

Invio di una richiesta valida

Se i valori passati al metodo di disattivazione dell'account sono validi, restituirà un messaggio nel corpo della risposta HTTP.

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

Nel caso in cui un utente che richiede la disattivazione di un dispositivo, viene restituito un messaggio simile nel corpo della risposta HTTP:

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

Invio di una richiesta con credenziali non valide

Se l'utente effettua una richiesta per disattivare o riattivare un account con un invalido account_id o non valido device_id , o se account_id o device_id non sono associati con l'utente, verrà restituito un HTTP 400.

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

Un errore e un messaggio simili vengono restituiti per account_id non valido o un account_id che non è associato all'utente.

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

Ripetere una richiesta

Se un utente richiede un dispositivo o un conto per essere disattivato o riattivato quando esiste già in quello stato, un messaggio verrà restituito nel corpo risposta HTTP, informando l'utente che la richiesta device_id o account_id è già nello stato richiesto:

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

Un messaggio simile viene visualizzato in caso di richiesta ripetuta di disattivazione e riattivazione del dispositivo e riattivazione dell'account.

Richiesta di dati per un account o dispositivo disattivato

Se un utente richiede dati da un account o dispositivo che è stato disattivato, sarà un HTTP 403:

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

Ancora una volta, un messaggio simile è dato nel caso di richiesta di dati da un account disattivato.

Il feed restituisce un messaggio: "Contatta enterprise@reincubate.com per accedere a questi dati"

Questo messaggio verrà restituito quando viene utilizzata la chiave di dimostrazione. Vi preghiamo di contattarci per una chiave di prova con accesso a più dati. Se hai già una chiave di prova, la stai specificando correttamente nella tua implementazione client?

Sto cercando di estrarre il file di database di file_id da file_id ma non riesco a recuperare alcun dato

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.

Tuttavia, a volte gli autori di app cambiano il nome del file in cui memorizzano i dati (e talvolta Apple lo fa nelle nuove versioni di iOS). Ecco perché, ad esempio, ci sono diversi file_id da esaminare quando si ricevono i dati di WhatsApp. Questi file_id potrebbero essere modificati ogni volta che un'app viene aggiornata.

Si consiglia agli utenti di estrarre i feed JSON invece di lavorare con i file e manipolarli direttamente. Utilizzando i feed, non è necessario preoccuparsi dell'efficacia di SQL, dell'analisi PList o del processo di eliminazione e i feed sono più veloci e molto più semplici da utilizzare.

Sto ricevendo errori limitanti la velocità dal server

Le richieste di limiti di velocità dell'API su una finestra di 15 minuti e questa limitazione sono configurate per chiave. La maggior parte delle chiavi ha una velocità limitata per motivi di sicurezza.

I client API restituiscono i dati sul loro utilizzo rispetto ai limiti nelle risposte di intestazione HTTP che ricevono. Queste risposte utilizzano le seguenti intestazioni:

  • X-Rate-Limit-Limit Il numero di richieste consentite in una finestra di 15 minuti.
  • X-Rate-Limit-Remaining Il numero di richieste rimanenti nell'assegnazione della finestra corrente.
  • X-Rate-Limit-Reset Il tempo rimanente fino alla fine della finestra del limite di velocità corrente, in millisecondi.

Ecco un esempio di serie di intestazioni live da una chiave su un limite di frequenza di 1.000 richieste.

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

Se viene raggiunto il limite di velocità, il server risponderà con:

HTTP/1.1 429 TOO MANY REQUESTS

Il server includerà le tre intestazioni limite di velocità in questa risposta.

Il comportamento corretto del client è di attendere la durata specificata da X-Rate-Limit-Reset per passare, a quel punto X-Rate-Limit-Remaining verrà ripristinato.

Ho ricevuto un'email relativa all'accesso remoto all'account iCloud a cui ho avuto accesso

Il polling dei moduli di feed live legacy (come indicato sopra nella sezione dei flag dei moduli di feed di esempio) può attivare l'invio di un'email all'indirizzo associato a quell'account iCloud. Si noti che ciò si verifica solo per i moduli di feed live legacy e non per i moduli di produzione.

Come possiamo aiutare?

Il nostro team di supporto è qui per aiutarti!

I nostri orari di ufficio sono dal lunedì al venerdì, dalle 9:00 alle 17:00 GMT. L'ora è attualmente 2:36 PM GMT.

Miriamo a rispondere a tutti i messaggi entro un giorno lavorativo.

Vai alla sezione di supporto › Contatta il team aziendale ›
Il nostro fantastico team di supporto

Possiamo migliorare questo articolo?

Ci piace ascoltare gli utenti: perché non mandarci un'email, lasciare un commento o twittare @reincubate?

© 2008 - 2019 Reincubate Ltd. Tutti i diritti riservati. Registrato in Inghilterra e Galles #5189175, VAT GB151788978. Reincubate® è un marchio registrato. Termini e Condizioni. Raccomandiamo 2FA. Costruito con a Londra.