iCloud API (v1)

업데이트 됨

이 문서에서는 Reincubate의 기존 iCloud API 사용에 대해 다룹니다.

개요

API 및 특히 피드는 다음과 같은 많은 실질적인 이점을 제공합니다.

  • 손쉬운 통합 . 이 API는 어느 수준의 개발 팀이라도 쉽게 작업 할 수 있으며 클라이언트가 iCloud / CloudKit 저장소 또는 타사 앱에 대해 고도의 전문 지식을 갖추지 않아도됩니다.

    iCloud에 대한 인터페이스를 개발하고 유지하는 복잡성이 상당하며 핵심 iOS 데이터 및 응용 프로그램 파일을위한 다중 데이터 형식을 지원해야 할 필요가 있습니다. iOS는 다양한 데이터 형식을 사용할뿐만 아니라 각 앱 (예 : WhatsApp)은 앱 업데이트로 주별로 변경 될 수있는 일련의 데이터 형식과 구조를 사용합니다.

    API는 iOS 9, iOS 10, CloudKit, iCloud 8 + 9 병합, 2SV / 2FA, 부분 스냅 샷, 토큰 화, A9 및 A9X와 같은 모든 "어려운" 기능을 지원합니다.

  • 미래의 교정 . Reincubate는 현대 및 과거의 iCloud 및 iOS 데이터 형식에 대한 지원을 유지하기 위해 노력하고 있으며이 공간에서 탄탄한 실적을 보유하고 있습니다.

    • iOS 데이터 액세스를 지원하는 1 위 (2008)
    • 암호화 된 iOS 데이터 액세스를 지원하는 1 위 (2009)
    • iCloud 데이터 추출을 지원하는 1 위 (2011)
    • iCloud / CloudKit iOS 9 데이터 액세스 (2015)를 지원하는 API 사용
  • 타의 추종을 불허하는 전문 기술에 대한 지원 및 액세스 . Reincubate의 팀은 앱 데이터 회사 로서의 회사의 집중과 포지셔닝의 결과로이 분야에서 타의 추종을 불허하는 경험과 지식을 보유하고 있습니다. 이 경험은 새로운 앱과 유스 케이스를 탐구하는 고객에게 특히 유용합니다.

    JSON 피드 사용자는 Reincubate의 독점 기술을 활용하여 앱 데이터를 추출하고 삭제함으로써 결과 데이터가보다 정확 해집니다.

  • Out of the box 앱 지원 . 이외에도 핵심 아이폰 OS 데이터 유형에서 - 모든 장치에서 모든 아이폰 OS 버전에서 지원되는 모두 - API는 타사 응용 프로그램의 수십을 지원하는 모듈이 있습니다. 지원되는 인기 앱에는 WhatsApp, Viber, Kik, WeChat, Line, SnapChat, Facebook Messenger 및 Skype가 있습니다.

  • Out of the box 개발자 플랫폼 지원 . API에는 Python , .NET / C#JavaScript 비롯한 다양한 언어로 제공되는 오픈 소스 클라이언트 구현이 있습니다.

  • 속도 및 확장 성 . Reincubate iCloud API 플랫폼은 확장 할 수 있도록 제작되었으며, JSON 피드 시스템은 원시 파일 액세스보다 빠르게 더 빠르게 확장됩니다.

  • 풍부한 피드 사용자 정의 옵션 . 피드 플랫폼은 파트너 배포를 위해 쉽게 사용자 지정할 수 있습니다. 예를 들면 protobuf 형식 피드 및 메시징 앱 첨부 파일 집계가 있습니다.

  • 신뢰 . Reincubate는 전 세계의 보안, LEA 및 정부 사용자가 신뢰합니다. 회사는 엄격한 영국 데이터 보호법의 적용을받으며 EU 및 미국 세이프 하버 규정을 준수합니다.

시작하기

관심있는 당사자는 API 에 문의하여 API 키에 액세스 할 수 있습니다. 그러나 모든 샘플 클라이언트 구현에는 테스트 키가 제공됩니다.

샘플 Python 클라이언트 설치하기

Python iCloud 라이브러리는 단일 명령으로 설치할 수 있습니다. 기존 라이브러리를 가져 오려면 최신 1.* 버전이 설치되어 있어야합니다.

$ pip install ricloud==1.*

이 클라이언트의 소스는 ricloud-py 아래의 GitHub에서 찾을 수 있습니다.

샘플 JavaScript 클라이언트 설치

JavaScript iCloud 라이브러리는 단일 명령으로 설치할 수 있습니다. 기존 라이브러리를 가져 오려면 최신 1.* 버전이 설치되어 있어야합니다.

$ npm install ricloud==1.*

이 클라이언트의 소스는 ricloud-js의 GitHub에서 찾을 수 있습니다.

샘플 .NET / C # 클라이언트 설치

C # iCloud 라이브러리는 단일 명령으로 설치할 수 있습니다. 기존 라이브러리를 가져 오려면 최신 1.* 버전이 설치되어 있어야합니다.

$ nuget install ricloud==1.*

이 클라이언트의 소스는 ricloud-csharp의 GitHub에서 찾을 수 있습니다.

구성

각 클라이언트 구현에는 자체 번들로 제공되는 설명서 세트와이를 사용할 수있는 방법을 보여주는 샘플 스크립트가 함께 제공됩니다. 구성은 대개 API에 대한 인증을 위해 userkey 값을 지정하는 것으로 제한됩니다.

API 작업

사용자가 API로 수행해야하는 세 가지 핵심 작업이 있습니다.

  • 인증 및 열거 : sign-in , perform-2fa-challenge submit-2fa-challenge
  • 피드 데이터 액세스 : download-data
  • 원시 파일 액세스 : download-file

이 섹션의 예제는 curl 형식으로 제공됩니다.

API에 대한 모든 요청에서 curl-L 매개 변수로 경로 재 지정을 따르도록 지시해야합니다. 사용자 API 자격 증명은 사용자 정의 API 버전 헤더 인 --header "Accept: application/vnd.icloud-api.v1" 과 같이 --user "USER:KEY" 로 설정해야합니다. 따라서이 예제의 모든 curl 호출은 다음으로 시작해야합니다.

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

모든 요청은 POST 통해 이루어 -X POST 옵션도 지정됩니다. 이 호출이 변경되지 않으므로이를 CURL_CALL 이라고합니다.

일반적인 지침으로 모든 요청 (오류 제외)은 현재 세션을 식별하는 session_key 필드를 반환합니다. 전송되지 않으면 sign-in 요청을 사용하여 새 세션을 생성해야합니다. session_key 값은 일관되게 사용해야합니다.

1. 장치 및 데이터 목록의 인증, 2FA / 2SV 및 검색

계정에서 2 단계 인증 또는 2 단계 인증을 사용하는 사용자로 sign-in 하려면 sign-in 방법을 사용해야합니다.

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

액세스 할 iCloud 계정의 emailpassword@ --data-urlencode 를 사용하여 @ 와 같은 제어 문자가 이스케이프되도록 매개 변수로 전달됩니다.

잘못된 API 키 쌍으로 로그인

사용자가 잘못된 키 쌍으로 API를 요청하면 403 이상의 데이터를 반환하지 않습니다.

HTTP/1.1 403 FORBIDDEN

최종 사용자가 iCloud T & C를 수락하지 않은 계정에 로그인

사용자가 업데이트 된 iCloud 이용 약관 집합을 수락하지 않은 iCloud 계정에 로그인을 시도하는 경우.

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

잘못된 iCloud 자격 증명으로 로그인

사용자가 잘못된 iCloud 자격 증명으로 로그인하려고하면 오류 메시지와 함께 403 이 반환됩니다.

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

최종 사용자가 확인하지 않은 계정에 로그인

사용자가 기본 이메일의 유효성을 검사하지 않은 iCloud 계정에 로그인을 시도하는 경우.

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

2FA / 2SV없이 로그인

단일 요청으로 비 2FA 계정에 로그인 할 수 있습니다.

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

2SV / 2FA로 로그인

계정이 이중 인증으로 보안이 설정되어 있으면 요청에 sign-in two-factor authentication is enabled on this account 에서 two-factor authentication is enabled on this account session_key 및 2SV의 경우 trustedDevices 목록 two-factor authentication is enabled on this account 표시된다는 오류 메시지가 반환됩니다.

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

2SV의 경우, 다음 단계는 trustedDevices 중 하나에 2SV 챌린지 코드를 발행하는 것입니다. 이렇게하려면 perform-2fa-challengeperform-2fa-challenge 하라는 요청이 이루어집니다.

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

보낸 매개 변수는 challenge 이며, trustedDevices 나열된 항목에 포함되어야하며 session_key 는 반환 된 sign-in 요청과 같습니다.

  • 2FA

2FA의 경우 차이점은 요청이 빈 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"
}

2FA의 경우, 모든 신뢰할 수있는 장치에 자동으로 도전 할 수있는 장치를 선택하지 않아도됩니다. 이렇게하기 perform-2fa-challenge challenge 인수없이 perform-2fa-challengeperform-2fa-challenge 하라는 요청이 이루어집니다.

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

따라서 2FA의 경우 보내지는 매개 변수는 session_key 뿐이며 반환 된 sign-in 요청과 동일합니다.

불량 장치 (2FA / 2SV)로 해결하기

사용자가 잘못된 device API를 요청하면 500 넘는 데이터가 반환되지 않습니다.

HTTP/1.1 500 INTERNAL SERVER ERROR

잘못된 키로 도전 (2FA / 2SV)

사용자가 잘못된 key 를 사용하여 API를 요청하면 유효성 확인 메시지와 함께 403 을 반환합니다.

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

성공적으로 도전 중 (2FA / 2SV)

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

챌린지가 사용자 기기로 전송되면 submit-2fa-challenge 데이터는 submit-2fa-challenge 사용하여 API로 다시 전달되어야합니다.

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

나쁜 요청 응답 제출 (2FA / 2SV)

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

올바른 챌린지 응답 제출 (2FA / 2SV)

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

이 요청으로 사용자는 완전히 인증되고 API 세션이 활성화됩니다.

로그인 프로세스를 완료하고 장치 목록을 검색하려면 첫 번째 요청과 동일한 emailpassword 를 사용하고 2FA / 2SV 인증 프로세스에서 사용 된 것과 동일한 key 사용하여 sign-in 요청을 제출하십시오.

API 키에 토큰 화가 설정된 경우 응답에는 auth_token 항목 만 포함됩니다. 이 경우 sign-in 하기 위해 제출하는 대신 아래 섹션 4에 설명 된대로 refresh-session 대한 최종 요청을 제출하는 것이 좋습니다. auth_token 사용하는 것이 Apple 시스템에서 이미 설정된 세션의 지표이기 때문에 더욱 강력합니다.

새 API 백엔드 어댑터에서는 다른 응답을보아야합니다. 이것은 2FA / 2SV 프로세스의 흐름 최적화에 기인합니다.

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

2. 피드 데이터 검색 : download-data

download-data 메소드는 피드 데이터에 액세스하는 데 사용됩니다.

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/

이 요청에 필요한 매개 변수는 현재이다 session_keydevice_id 로그인 응답에서 장치 중 하나의, 그리고 data_mask 이다, OR 사용자가 관심있는 모든 급지 모듈 플래그의 조합. 당신은 또한 지정할 수 since 데이터 찾기를 시작할 날짜입니다.

클라이언트의 API 키가이 모든 모듈에 대해 유효하다고 가정하면 메서드는 요청 된 데이터를 JSON 형식으로 반환합니다.

유효한 피드 요청 제출

메서드에 전달 된 값이 유효하면 HTTP 응답 본문의 피드 내용을 반환합니다.

HTTP/1.1 200 OK

누락 된 매개 변수가있는 피드 요청 제출

필수 매개 변수 중 하나가 누락 된 경우 메소드는 잘못된 요청 응답 코드를 리턴합니다.

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

잘못된 매개 변수로 피드 요청 제출

유효하지 않거나 형식이 잘못된 값이 매개 변수에 대해 제출되면 메소드는 잘못된 요청 응답 코드를 리턴합니다.

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

샘플 피드 모듈 플래그

다음 모듈 플래그는 download-data 메소드의 mask 매개 변수에 대해 함께 마스크 될 수 있습니다. 이것은 완전한 목록은 아닙니다.

  • 0000000000001 메시지
  • 0000000000002 사진 및 동영상
  • 0000000000004 브라우저 기록
  • 0000000000008 통화 내역
  • 0000000000016 연락처
  • 0000000000032 설치된 앱
  • 0000000000256 위치 (실시간)
  • 0000000000512 WhatsApp 메시지
  • 0000000001024 Skype 메시지
  • 0000000002048 캘린더
  • 0000000004096 회선 메시지
  • 0000000008192 Kik 메시지
  • 0000000016384 Viber 메시지
  • 0000000032768 Facebook 메시지
  • 0000000065536 WeChat 메시지
  • 0000000131072 스냅 삿 메시지
  • 0000000262144 파일 목록
  • 0000000524288 브라우저 기록 (실시간)
  • 0000001048576 WhatsApp 통화 내역
  • 0000002097152 Viber 통화 내역
  • 0000004194304 앱 사용
  • 0000008388608 주의 사항
  • 0000033554432 HealthKit
  • 0000067108864 HealthKit 단계 전용
  • 0000134217728 사파리 쿠키
  • 0000268435456 Kik 연락처
  • 0000536870912 Viber 연락처
  • 0001073741824 Viber 대화
  • 0002147483648 통화 내역 (실시간)
  • 0004294967296 위치
  • 0008589934592 하이킹 메시지
  • 0017179869184 스냅 0017179869184 이야기
  • 0034359738368 음성 메일
  • 0068719476736 녹음
  • 0137438953472 비디오
  • 0274877906944 사진 및 동영상 (실시간)
  • 0549755813888 Tinder 메시지
  • 1099511627776 연결된 Apple 시계
  • 2199023255552 하이킹 게시물
  • 4398046511104 연락처 (라이브)
  • 8796093022208 계정 정보

예를 들어 메시지 피드, 통화 기록 및 브라우저 기록을 요청하려면 마스크가 1 + 4 + 8 = 13 됩니다.

JSON 피드 형식

JSON 피드는 가능한 한 파싱하기 쉽도록 디자인되었습니다. 피드는 단일 응답 내에서 요청 된 모든 데이터 유형을 반환합니다.

모듈 플래그에 지정된 각 피드 모듈은 반환되는 최상위 JSON 사전에 자체 키를 갖습니다.

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

3. 원시 파일 검색 : download-file

download-file 방법은 메시지 첨부 파일을 다운로드하거나 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

필요한 매개 변수는 session_key , 대상 device_idfile_id 입니다. 위의 요청은 파일을 다운로드하고 지정된 경로를 -o 옵션과 함께 curl 저장합니다.

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.

유효한 파일 요청 제출

메소드에 전달 된 값이 유효하면 HTTP 응답 본문에 2 진 파일 내용을 리턴합니다.

HTTP/1.1 200 OK

존재하지 않는 파일에 대한 파일 요청 제출

파일이 iCloud에 없거나 적절한 제 3 자에서 파일을 검색 할 수없는 경우에도 메서드는 계속 반환되지만 메시지 본문은 비어 있습니다.

HTTP/1.1 200 OK

세션이 만료 된 후 파일 요청 제출

세션이 만료되면 클라이언트에 잘못된 요청 응답 코드가 제공됩니다.

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

샘플 file_id s

직접 파일 액세스를 위해 앱과 관련된 일반적인 해시 키는 다음과 같습니다.

  • 3d0d7e5fb2ce288813306e4d4636395e047a3d28 SMS
  • 1b6b187a1b60b9ae8b720c79e2c67f472bab09c0 WhatsApp
  • 1c6a49018bcace96656e4fe8f08d572ce071b92c WhatsApp
  • 7c7fba66680ef796b916b067077cc246adacf01d WhatsApp
  • b39bac0d347adfaf172527f97c3a5fa3df726a3a Viber
  • 8e281be6657d4523710d96341b6f86ba89b56df7
  • ff1324e6b949111b2fb449ecddb50c89c3699a78 통화
  • a49bfab36504be1bf563c1d1813b05efd6076717 통화
  • 2b2b0084a1bc3a5ac8c27afdf14afb42c61a19ca 통화
  • 5a4935c78a5255723f707230a451d79c540d2741 통화
  • 12b144c0bd44f2b3dffd9186d3f9c05b917cee25 사진
  • adb8c77534444e97c31ff15924d50f3ed1fbd3b1 연락처
  • 2041457d5fe04d39d0ab481178355df6781e6858 약속
  • 3ecf3efff3a55d6155efce2828579e8a3cd881c1 인터넷 사용 기록
  • cd89f9e10d3497912bfc92e5dc674ca989cfdd44 검색 기록
  • 2d711a1f5613f5259730b98328a3f7e816698f88 라인

Skype, Facebook Messenger 및 WeChat과 같은 일부 메신저 응용 프로그램은 file_id 대화에 따라 다릅니다.

4. 인증 토큰을 사용하여 계정 로그인 새로 고침

auth_token 은 Apple의 로그인 토큰입니다. 최소 하루 동안 지속되며 API의 refresh-session 끝점에 대한 요청이있을 때 새로 고쳐집니다. refresh-session 끝점에 대한 일일 폴링 만이이 토큰을 유지하는 데 필요합니다.

refresh-session 끝점은 입력으로 auth_token 만 필요로하고 장치 목록과 새 세션 키를 반환하므로 계정에 다시 로그인 할 필요없이 API에서 새 세션을 시작하는 데 사용할 수 있습니다. 이는 초기 sign-in 요청에 대해서만 인증 과정을 완료하면되므로 2FA / 2SV 사용 계정에 특히 유용합니다.

이를 사용하려면 로그인 중에 검색된 auth_token 필드를 사용해야합니다. 이는 refresh-session 엔드 포인트로 보내야합니다.

auth_token 매개 변수는 초기 sign-in 요청의 리턴이며 refresh-session 엔드 포인트에 대해 사용해야합니다.

요청에 선택적 매개 변수 account 을 포함하는 것이 좋습니다. 그러면 시스템 전체에서 요청을 모니터링하는 데 도움이됩니다. 이 매개 변수의 값은 단순히 사용자의 iCloud 계정 사용자 이름입니다.

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

유효하지 않은 인증 토큰 제출

토큰이 유효하지 않으면 엔드 포인트는 잘못된 요청 코드를 리턴합니다.

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

유효한 인증 토큰 제출

응답은 로그인 엔드 포인트와 유사합니다. 새로 생성 된 세션 키와 각각을 식별하는 데 필요한 모든 메타 데이터가있는 업데이트 된 장치 목록입니다. 새 세션을 사용하여 계속 데이터를 가져올 수 있습니다.

HTTP/1.1 200 OK

5. iCloud 사진 라이브러리 파일 delete-file : delete-file

delete-file 방법은 iCloud 사진 보관함에서 사진을 삭제할 때 사용할 수 있습니다. file , keypermament 플래그를 매개 변수로 허용 file .

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

file 매개 변수에는 사진의 ID ( web_photos 피드를 통해 web_photos 수 있음)가 포함되며 permanent 플래그는 파일이 부드럽거나 딱딱하게 삭제 될 경우 제어합니다. False 설정하면 파일이 "최근에 삭제 된" 사진 앨범 (소프트 삭제라고 함)으로 이동하게 됩니다 . 반면에 True 설정하면 요청은 "최근에 삭제 된" 앨범에서 파일을 제거하고 영구 삭제됩니다 (하드 삭제라고 함).

성공적인 소프트 삭제

소프트 삭제가 완료되면 사진이 "최근에 삭제 된" 앨범으로 이동되고 성공 메시지가 반환됩니다.

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

성공적인 하드 삭제

강제 삭제가 성공하면 해당 장치가 다음에 iCloud에 동기화 될 때 연결된 장치에서 사진이 제거됩니다. 그러나 사용 된 기술 덕분에 하드 삭제 된 파일은 Reincubate의 iCloud Photo API에서 여전히 일정 기간 동안 검색 및 다운로드 할 수 있습니다. 이 동작은 목록에없는 파일의 삭제를 취소하는 데 사용할 수 있습니다.

파일을 하드 삭제하려면 먼저 소프트 삭제해야합니다.

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

소프트 또는 하드 삭제 실패

요청이 실패하면 오류 응답을 반환합니다.

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

기본 SDK로 다운로드 가속화

고도로 병렬화 된 파일 다운로드의 경우, 클라이언트가 파일을 로컬에서 다운로드하고 해독 할 수있게 해주는 C ++ SDK를 제공하여 download-file 엔드 포인트의 오버 헤드를 피할 수 있지만 편리함을 잃지 않습니다. 이 SDK는 Linux (Ubuntu 12.04, Ubuntu 14.04, Debian Jessie) 및 Windows에서 사용할 수 있습니다.

이 API는 나머지 API 워크 플로와 통합되어 있습니다.

다운로드

사용자는 현재 라이브러리를로드하고 다음 서명이있는 SDK 진입 점인 DownloadFiles 호출 할 수 있습니다.

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)

다음과 같은 외부 콜백 정의를 사용합니다.

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

매개 변수는 다음과 같습니다.

  • clientID API 클라이언트 ID입니다.
  • clientKey API 클라이언트 키.
  • sessionKey 현재 세션 키입니다.
  • deviceID 대상 장치 ID입니다.
  • fileIDs 요구의 배열 file_ids .
  • fileIDs_count fileIDs 배열의 길이.
  • targetDir 파일을 다운로드 할 디렉토리를 출력합니다.
  • progFunc 진행률 업데이트가 수행 될 때마다 호출되는 진행 콜백 함수입니다.
  • progParam progFunc 콜백에 전달할 수있는 사용자 정의 매개 변수입니다.
  • getErrorBuffer 이 콜백 함수는 다운로드 중에 발생한 오류를 보유 할 버퍼를 반환해야합니다.

다운로드가 끝나면 요청 된 파일 ID는 targetDir 의해 지정된 폴더에 있습니다.

이전 SDK 버전

이전 버전에서는 DownloadFiles 시작점에 약간 다른 서명이 있습니다.

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)

추가 매개 변수는 다음과 같습니다.

  • getReplyBuffer getErrorBuffer 와 마찬가지로,이 콜백 함수는 DownloadFiles 메소드가 쓸 수있는 유효한 버퍼를 리턴합니다. 이 경우이 버퍼에는 다운로드의 최종 상태가 포함 된 응답이 포함됩니다.

계정 및 장치 비활성화 및 재 활성화

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/
계정 재 활성화
CURL_CALL --data-urlencode "account=ACCOUNT_ID"
          https://api.icloudextractor.com/c/client-management/activation/
장치 비활성화
CURL_CALL --data-urlencode "device=DEVICE_ID"
          https://api.icloudextractor.com/c/client-management/deactivation/
장치 재 활성화
CURL_CALL --data-urlencode "device=DEVICE_ID"
          https://api.icloudextractor.com/c/client-management/activation/

유효한 요청 제출

계정 비활성화 방법에 전달 된 값이 유효하면 HTTP 응답 본문에 메시지를 반환합니다.

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

사용자가 장치를 비활성화하도록 요청하는 경우 비슷한 메시지가 HTTP 응답 본문에 반환됩니다.

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

잘못된 자격 증명으로 요청 제출

사용자가 잘못된 account_id 또는 잘못된 device_id 하여 계정을 비활성화 또는 다시 활성화하도록 요청하거나 account_id 또는 device_id 가 사용자와 연결되어 있지 않은 경우 HTTP 400을 반환합니다.

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

비슷한 오류 및 메시지가 잘못 반환됩니다 account_id 또는 account_id 사용자와 associted되지 않습니다.

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

요청 반복하기

사용자가 이미 해당 상태에있는 장치 또는 계정을 비활성화하거나 다시 활성화하도록 요청한 경우 요청 된 device_id 또는 account_id 가 요청 된 상태에 있음을 알리는 메시지가 HTTP 응답 본문에 반환됩니다.

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

장치 비활성화 및 재 활성화 및 계정 재 활성화에 대한 반복 요청의 경우에도 유사한 메시지가 표시됩니다.

비활성화 된 계정 또는 기기에 대한 데이터 요청

사용자가 비활성화 된 계정이나 장치에서 데이터를 요청하면 HTTP 403 :

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

다시 한 번, 비활성화 된 계정에서 데이터를 요청할 경우 비슷한 메시지가 표시됩니다.

피드가 "이 데이터에 액세스하려면 enterprise@reincubate.com에 문의하십시오."라는 메시지를 반환합니다.

이 메시지는 데모 키를 사용할 때 반환됩니다. 더 많은 데이터에 액세스 할 수있는 평가판 키를 문의하십시오. 평가판 키가 이미있는 경우 클라이언트 구현에 올바르게 지정 했습니까?

file_id 로 앱의 데이터베이스 파일을 가져 file_id 데이터를 다시 가져 오지 못했습니다.

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.

그러나 때로는 앱 작성자가 데이터를 저장하는 파일의 이름을 변경합니다 (그리고 때로는 Apple이 새로운 iOS 버전에서 변경하는 경우도 있음). 그래서 WhatsApp 데이터를 가져올 때 여러 개의 file_id 가 검사되어야합니다. 이 file_id 는 앱이 업데이트 될 때마다 변경 될 수 있습니다.

사용자가 파일 작업 및 직접 조작 대신 JSON 피드 가져 오기를 권장합니다. 피드를 사용하면 SQL, PList 구문 분석 또는 삭제 취소의 효과를 걱정할 필요가 없으며 피드가 더 빠르고 간단하게 작업 할 수 있습니다.

서버에서 속도 제한 오류가 발생합니다.

API는 요청 시간을 15 분 동안 제한하고이 제한은 키마다 구성됩니다. 대부분의 키는 보안을 위해 속도 제한적입니다.

API 클라이언트는 수신 한 HTTP 헤더 응답의 제한에 대한 사용 데이터를 반환합니다. 이 응답은 다음 헤더를 사용합니다.

  • X-Rate-Limit-Limit 15 분 동안 허용 된 요청 수입니다.
  • X-Rate-Limit-Remaining 현재 창 할당에 남아있는 요청 수입니다.
  • X-Rate-Limit-Reset 현재 속도 제한 창이 끝날 때까지 남은 시간 (밀리 초)입니다.

다음은 1,000 개의 요청 속도 제한에 대한 키의 라이브 헤더 예제입니다.

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

속도 제한에 도달하면 서버는 다음과 같이 응답합니다.

HTTP/1.1 429 TOO MANY REQUESTS

서버는이 응답에 세 가지 속도 제한 헤더를 포함합니다.

올바른 클라이언트 동작은 X-Rate-Limit-Remaining 이 재설정 될 시점에서 X-Rate-Limit-Reset 에 지정된 기간을 경과 할 때까지 대기하는 것입니다.

내가 액세스 한 iCloud 계정에 대한 원격 액세스에 관한 이메일을 받았습니다.

위에서 설명한 샘플 피드 모듈 플래그 섹션에서 설명한대로 기존 라이브 피드 모듈을 폴링하면 해당 iCloud 계정과 연결된 주소로 이메일이 전송됩니다. 이 작업은 프로덕션 모듈이 아닌 레거시 라이브 피드 모듈 에서만 발생합니다.

어떻게 도와 드릴까요?

지원 팀이 도와 드리겠습니다!

근무 시간은 월요일부터 금요일, 오전 9 시부 터 오후 5시 (그리니치 표준시)입니다. 시간은 현재 6:43 오전 GMT입니다.

우리는 1 일 이내에 모든 메시지에 답장하고자합니다.

지원 섹션으로 이동 › 엔터프라이즈 팀에 문의하십시오. ›
우리의 멋진 지원 팀

이 기사를 개선 할 수 있습니까?

사용자의 의견을 듣고 싶습니다. 전자 메일을 보내지 말고, 의견을 남기거나, 트윗하지 마십시오. @reincubate?

© 2008 - 2019 Reincubate Ltd. 판권 소유. 영국과 웨일즈에 등록 #5189175, VAT GB151788978. Reincubate®는 등록 상표입니다. 개인 정보 및 이용 약관. 우리는 2FA를 권장합니다. 런던에서 Built로 지어졌습니다.