Apple iCloud 서비스
API는 Apple의 iCloud 서비스에서 다양한 데이터 및 파일 검색을 지원합니다.
세션
API에서 iCloud 서비스에 대한 세션을 설정하는 것은 iCloud 계정에 로그인하는 것만큼이나 간단합니다. 계정에서 다중 요소 인증 (예 : 2FA 또는 2SV)을 사용하도록 설정 한 경우 세션을 만들 때 여러 번 시도해야 할 수 있습니다.
2FA / 2SV가없는 계정에 대한 세션 생성
2FA / 2SV를 사용하지 않는 계정에 대한 세션을 작성하기위한 세션 페이로드에는 다음 매개 변수가 포함됩니다.
이름 | 유형 | 기술 |
---|---|---|
password | 끈 | iCloud 계정 비밀번호 |
cURL 사용
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>" } }'
응답
{ "id": "<session ID>", "resource": "session", ... "state": "succeeded", "error": null, ... }
2FA를 사용하여 계정에 대한 세션 생성
2FA 지원 계정에 대한 세션을 만드는 것은 두 단계 프로세스입니다.
- iCloud 계정 비밀번호 만 사용하여 세션을 작성하십시오. 그러면 계정과 연결된 iOS 및 macOS 장치에 인증 코드를 보내는 2FA 프로세스가 시작됩니다. 세션 생성 시도는
error="code-required"
와 함께 실패error="code-required"
. - (1)에서받은 iCloud 계정 비밀번호와 인증 코드를 사용하여 세션을 작성하십시오. 코드가 승인되면 세션이 성공적으로 생성됩니다.
1 단계 : 세션 생성
이름 | 유형 | 기술 |
---|---|---|
password | 끈 | iCloud 계정 비밀번호 |
cURL 사용
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>" } }'
응답
2FA 프로세스가 예상대로 트리거되면 code-required
오류와 함께 세션이 작성되지 않아야 code-required
.
{ "id": "<session ID>", "resource": "session", ... "state": "failed", "error": "code-required", ... }
2 단계 : 코드로 세션 만들기
이름 | 유형 | 기술 |
---|---|---|
password | 끈 | iCloud 계정 비밀번호 |
code | 끈 | 인증 코드 |
cURL 사용
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>", "code": "<authentication code>" } }'
응답
{ "id": "<session ID>", "resource": "session", ... "state": "succeeded", "error": null, ... }
2SV를 사용하여 계정에 대한 세션 생성
2SV 지원 계정에 대한 세션을 생성하는 프로세스에는 세 단계가 있습니다.
- iCloud 계정 비밀번호를 사용하여 세션을 작성하십시오. 2SV가 필요하므로
error="choice-required"
및error_info={"choices": [<2SV enabled devices>]}
와 함께 실패error="choice-required"
. - iCloud 계정 비밀번호와
error_info["choices"]
목록에서 선택하여 세션을 다시 작성하십시오. 이번에는 인증 코드를 선택한 장치로 보내는 2SV 프로세스가 시작됩니다.error="code-required"
시도가 실패error="code-required"
. - (2)에서받은 iCloud 계정 비밀번호와 인증 코드를 사용하여 세션을 작성하십시오. 코드가 승인되면 세션이 성공적으로 생성됩니다.
그러면 2SV 프로세스가 시작되어 계정과 연결된 iOS 및 macOS 장치에 인증 코드가 전송됩니다. 세션 생성 시도는 error="code-required"
와 함께 실패 error="code-required"
.
1 단계 : 세션 생성
이름 | 유형 | 기술 |
---|---|---|
password | 끈 | iCloud 계정 비밀번호 |
cURL 사용
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>" } }'
응답
계정에서 2SV를 사용하도록 설정하면 세션 choice-required
시도가 choice-required
오류와 함께 실패 choice-required
.
{ "id": "<session ID>", "resource": "session", ... "state": "failed", "error": "choice-required", "error_info": { "choices": [ "********02 - SMS to Phone Number" ] } ... }
2 단계 : 선택 사항이있는 세션 생성
이름 | 유형 | 기술 |
---|---|---|
password | 끈 | iCloud 계정 비밀번호 |
choice | 끈 | 인증 코드를 보낼 선택된 장치입니다. |
cURL 사용
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>", "choice": "********02 - SMS to Phone Number" } }'
응답
2FA 프로세스가 예상대로 트리거되면 code-required
오류로 세션이 작성되지 않아야 code-required
.
{ "id": "<session ID>", "resource": "session", ... "state": "failed", "error": "code-required", ... }
3 단계 : 코드로 세션 만들기
이름 | 유형 | 기술 |
---|---|---|
password | 끈 | iCloud 계정 비밀번호 |
code | 끈 | 인증 코드 |
cURL 사용
curl https://ricloud-api.reincubate.com/sessions \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "source": { "user": "1", "type": "icloud.account", "identifier": "<iCloud account username>" }, "payload": { "password": "<iCloud account password>", "code": "<authentication code>" } }'
응답
{ "id": "<session ID>", "resource": "session", ... "state": "succeeded", "error": null, ... }
소스 유형
식별자 | 기술 |
---|---|
icloud.account | 기본 소스 iCloud 계정에 해당합니다. |
투표소
iCloud 서비스는 모든 폴 페이로드 스키마 속성을 지원합니다.
소스 정보 검색
이 폴링 유형은 대상 소스에 대한 정보를 검색합니다. 결과는 JSON 형식으로 게시됩니다.
cURL 사용
curl https://ricloud-api.reincubate.com/polls \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "session": "<session ID>", "payload": { "info_types": ["*"] } }'
* ricloud-py * 사용
import ricloud # The ID of a session we made earlier. session_id = "<session ID>" poll = ricloud.Poll.create( session=session_id, payload={ "info_types": ["*"] } )
데이터 검색
이 폴링 유형은 대상 세션에서 데이터를 검색하고 처리합니다. 결과는 JSON 형식으로 게시됩니다.
특정 데이터 유형에 대한 자세한 정보 는 사용 가능한 데이터 유형 목록을 참조하십시오.
cURL 사용
curl https://ricloud-api.reincubate.com/polls \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "session": "<session ID>", "payload": { "data_types": ["icpl.photos"] } }'
* ricloud-py * 사용
import ricloud # The ID of a session we made earlier. session_id = "<session ID>" poll_payload = { "data_types": ["icpl.photos"] } poll = ricloud.Poll.create( session=session_id, payload=poll_payload, )
파일 검색 중
files
폴 페이로드 속성은 대상 소스에서 이진 파일 검색을 요청하는 데 사용됩니다.
ID는 일반적으로 iCloud 사진 보관함과 같은 직접 파일 참조를 포함하거나 메시지 데이터 유형과 같은 첨부 파일을 포함하는 데이터 유형에 대한 이전 폴에서 검색됩니다.
cURL 사용
curl https://ricloud-api.reincubate.com/polls \ -X POST \ -H 'Authorization: Token <your key_token>' \ -H 'Content-Type: application/json' \ -d '{ "session": "<session ID>", "payload": { "files": [ "icpl://ATnrIxddlwbCEjN33NBq8zXQwYgE", "icpl://AbfMRXQ55H4WfS5YguuUWxir4hq6" ] } }'
* ricloud-py * 사용
import ricloud # The ID of a session we made earlier. session_id = "<session ID>" poll_payload = { 'files': [ 'icpl://ATnrIxddlwbCEjN33NBq8zXQwYgE', 'icpl://AbfMRXQ55H4WfS5YguuUWxir4hq6', ] } poll = ricloud.Poll.create( session=session_id, payload=poll_payload, )
자료형
iCloud 데이터 유형
식별자 | 기술 |
---|---|
icpl.photos | iCloud 사진 보관함 자산을 검색합니다. |
mme_contacts.contacts | iCloud에 저장된 iOS 연락처 데이터를 검색합니다. |
mme_calendar.events | iCloud에 저장된 iOS 캘린더 데이터를 검색합니다. |
mme_notes.notes | iCloud에 저장된 iOS Notes 데이터를 검색합니다. |
callkit.calls | CallKit 동기화 된 iOS 전화 데이터를 검색합니다. |
cloudkit_safari.history | iCloud에 저장된 Safari 브라우저 기록 데이터를 검색합니다. |
fmip.devices | 내 iPhone 장치 및 위치 데이터 찾기를 검색합니다. |
iCloud 사진 보관함
사진, 비디오 및 기타 미디어
iCloud 사진 보관함 (ICPL)에 저장된 사진, 비디오 및 기타 미디어에 관한 정보를 검색합니다.
이 모듈을 사용하려면 사용자의 iCloud 계정에서 iCloud 사진 보관함이 활성화되어 있어야합니다.
데이터 타입 ID | icpl.photos |
관련 설정 | Settings > [username] > iCloud > Photos > iCloud Photo Library |
데이터 속성
이름 | 유형 | 기술 |
---|---|---|
id | 끈 | 데이터 항목의 식별자입니다. 여러 설문 조사에서 데이터 중복 제거에 유용합니다. |
filename | 끈 | ICPL에 저장된 파일의 이름입니다. |
files | image , video , audio 항목 목록 | 이 ICPL 자산과 관련된 파일. 원본 파일 인 Live Photos, 썸네일이이 목록에 포함됩니다. |
date_created | 날짜 시간 | 파일이 처음 만들어 졌을 때 iOS 기기에서 촬영 한 사진 또는 비디오의 경우 촬영 날짜입니다. ICPL로 가져온 기존 자산의 경우 원래 수입 날짜가됩니다. |
date_uploaded | 날짜 시간 | 파일이 ICPL에 마지막으로 업로드 된시기 이는 ricloud API를 통해 파일을 처음 검색 한 시점에 해당합니다. |
local_date_created |
optional datetime | When the asset was originally created, in local time. This attribute is only populated if sufficient metadata is stored with the asset in ICPL, and is currently supported for parsing by the API. The value of this attribute can vary by a few seconds from that of date_created , as the two are determined from different sources. |
데이터 필터
이름 | 유형 | 기술 |
---|---|---|
since | 날짜 시간 | 제공된 값보다 늦게 date_uploaded 가 date_uploaded 항목 만 포함합니다. |
until | 날짜 시간 | 제공된 값보다 date_uploaded 빠른 항목 만 포함합니다. |
샘플 데이터
[ { "id": "7f1384f5038255f5", "data_type": "icpl.asset", "filename": "IMG_0002.HEIC", "files": [ { "id": "icpl://AWo/lDeN8fEExAUJajRHzVx2j605", "data_type": "image", "extension": "heic", "size": 905818, "width": 4032, "height": 3024 }, { "id": "icpl://ASDPdJ/LvFWjsBy4YOOp7B5c+XOi", "data_type": "video", "extension": "mov", "size": 2456163, "width": 980, "height": 1308 }, { "id": "icpl://ASAwWOvwrvAUuO71uXcU6mm+nMU4", "data_type": "image", "extension": "jpg", "size": 595624, "width": 1536, "height": 2048 }, { "id": "icpl://ATy/qmemCas1jzYWuhR4mQywhpzz", "data_type": "image", "extension": "jpg", "size": 65407, "width": 360, "height": 480 } ], "date_created": "2020-09-18T12:32:17Z", "date_uploaded": "2020-09-18T12:41:19Z", "local_date_created": "2020-09-18T13:32:17+01:00" } ]
MobileMe 연락처
콘택트 렌즈
iCloud에 저장된 iOS 연락처 데이터를 검색합니다.
데이터 타입 ID | mme_contacts.contacts |
관련 설정 | Settings > [username] > iCloud > Contacts |
데이터 속성
mme_contacts.contact
데이터 유형은 기본 contact
데이터 유형에서 대부분의 속성을 상속합니다. 아래 표에는 추가 또는 다른 속성이 요약되어 있습니다.
이름 | 유형 | 기술 |
---|---|---|
id | 끈 | 데이터 항목의 식별자입니다. 여러 설문 조사에서 데이터 중복 제거에 유용합니다. |
data_type | 문자열, 항상 mme_contacts.contact | 아이템의 데이터 타입. |
uid | 끈 | 다양한 iOS 연락처 데이터 소스에서 중복 제거하는 데 사용할 수있는 고유 식별자입니다. |
image | 중첩 된 image 항목 (선택 사항) | 연락처의 프로필 이미지입니다. |
샘플 데이터
[ { "id": "2cf6a837304d6614", "data_type": "mme_contacts.contact", "uid": "NzNlNjkxYjctOTBmYi00MTYxLWI5YzYtZTk0ZDlhZjljMmE5", "first_name": "John", "middle_name": "'Gala'", "last_name": "Appleseed", "prefix": "Mr.", "suffix": "Jr.", "nickname": "John'o", "records": [ { "type": "Phone", "name": "MAIN", "value": "1-800-MY-APPLE" }, { "type": "Phone", "name": "UK", "value": "0800 039 1010" }, { "type": "URL", "name": "HOMEPAGE", "value": "http://www.apple.com" }, { "type": "URL", "name": "HOMEPAGE", "value": "http://www.apple.com/uk/" }, { "City": "Cupertino", "State": "CA", "ZIP": "95014", "name": "WORK", "CountryCode": "US", "Country": "United States", "Street": "1 Infinite Loop", "type": "Address", "SubLocality": null, "Municipality": null } ], "organisation": "Apple Inc.", "department": "Marketing", "jobtitle": "VP Coring", "birthday": "1976-04-01", "image": { "id": "mme_contact_image://2cf6a837304d6614", "data_type": "image", "extension": "jpg" } } ]
MobileMe 캘린더 이벤트 mme_calendar.events
iCloud에 저장된 iOS 캘린더 데이터를 가져옵니다.
MobileMe 노트 노트 mme_notes.notes
iCloud에 저장된 iOS Notes 데이터를 검색합니다.
콜킷
CallKit callkit.calls
호출
CallKit 서비스와 동기화 된 통화 기록을 검색합니다.
오류
callkit-uninitialised
이 계정에 대해 CallKit 서비스가 설정되지 않았 음을 나타냅니다. iCloud 계정 소유자는 다음 단계를 통해 iCloud 계정과 연관된 iOS 장치를 사용하여이 오류를 해결할 수 있습니다.-장치가 Wi-Fi에 연결되어 있는지 확인하십시오. - Settings > [username] > iCloud
. -iCloud Drive를 끄고 변경 사항이 적용되기를 30 ~ 60 초 동안 기다리십시오. -이전 변경이 완료되면 iCloud Drive를 켭니다. 초기화가 시작됩니다.
이 과정을 수행 한 후에도 오류가 지속되면 지원 부서에 문의하십시오.
callkit-sync-disabled
이 경우 CallKit 서비스가 초기화되었지만 기기가 iCloud에 통화 내역을 동기화하기 위해 필요한 조건이 충족되지 않았습니다. API는 iCloud를 통해이 문제를 원격으로 해결하지만 iCloud 계정과 연결된 기기는 캐시 된 상태이므로 동기화 상태를 재평가 할 수 없습니다.
iCloud 계정 소유자는 다음 단계를 통해 디바이스가 통화 기록 동기화 조건을 다시 확인하도록 트리거 할 수 있습니다.
-
Settings > [username] > iCloud
. - iCloud Drive를 끄고 변경 사항이 적용되기를 30 ~ 60 초 동안 기다리십시오.
- 이전 변경이 완료되면 iCloud Drive를 켭니다. 초기화가 시작됩니다.
문제 해결
- 최근 통화 기록이 설문 조사 결과에 표시되지 않습니다.
이는 일반적으로 기기가 최신 통화 기록 레코드를 iCloud와 동기화하지 않았기 때문에 발생합니다. CallKit 서비스는 내부 iOS 서비스이며 설정에서 켜거나 끌 수 없거나 수동으로 동기화되도록 트리거 될 수 없습니다. 이로 인해 장치가 iCloud와 동기화되었거나 동기화되지 않았는지 여부가 불분명하여 누락 된 데이터를 디버그하는 것이 어려워 질 수 있습니다.
이 문제는 동기화 할 데이터가 많지 않은 계정 (~ 3 통화 미만)에 더 일반적이며, 이는 종종 계정 테스트의 경우 일 수 있습니다.
추천 :
- 장치에 동기화 할 통화 기록 레코드가 몇 개 이상 있는지 확인하십시오. 테스트 결과 통화 기록 레코드가 두 개인 기기 만 iCloud 동기화 프로세스를 트리거하지 않는 것으로 나타났습니다.
- 장치가 주기적 동기화를 수행 할 때까지 기다리십시오. 장치 사용 방법, 연결 상태 및 충전 상태에 따라 최대 12 시간이 걸릴 수 있습니다.
장치를 전원에 연결하십시오. 이 상태에서는 장치가 동기화를 트리거 할 가능성이 높습니다.
이전 통화 기록은 설문 조사 결과에 반환되지 않습니다.
CallKit 서비스는 장치간에 호출 기록 레코드를 동기화하고 이러한 레코드를 무기한 저장하지 않기 위해 설계되었습니다. 일반적으로 통화 기록 레코드는 CallKit에서 약 3 개월 동안 검색 할 수 있지만 iCloud의 내부 정리 프로세스에 따라 계정마다 다를 수 있습니다.
CloudKit
iCloud cloudkit_safari.history
브라우저 기록
iCloud 동기화 서비스에 저장된 Safari 브라우저 기록 데이터를 검색하십시오.
내 찾기 및 내 아이폰 찾기
장치 위치
내 장치 및 위치 데이터 찾기를 검색합니다.
이 데이터 유형은 완전한 데이터를 리턴하기 위해 첫 번째 후 ~ 10-30 초 후에 두 번째 폴링이 필요한 다중 폴링이 필요할 수 있습니다. 이는 나의 찾기 작동 방식 때문입니다. 첫 번째 폴링은 나의 찾기를 트리거하여 도달 가능한 장치에서 새 데이터를 요청하지만 10-30 초 동안 데이터를 사용할 수 없게됩니다.
데이터 타입 ID | fmip.devices |
관련 설정 | Settings > [username] > Find My |
데이터 속성
이름 | 유형 | 기술 |
---|---|---|
id | 끈 | 데이터 항목의 식별자입니다. 여러 설문 조사에서 데이터 중복 제거에 유용합니다. |
data_type | 문자열, 항상 fmip.devices | 아이템의 데이터 타입. |
name | 끈 | 장치의 사용자 설정 이름입니다. |
model_name | 끈 | 장치 모델에 대한 Apple의 마케팅 이름. |
model_identifier | 끈 | 장치 모델에 대한 Apple의 식별자입니다. |
product_type | 끈 | 장치의 제품 범주입니다. |
location | 선택적 중첩 location | 사용 가능한 경우 장치에 대해 마지막으로보고 된 위치입니다. |
battery_status | 끈 | 장치의 현재 배터리 상태입니다. |
battery_level | 흙손 | 알려진 경우 배터리 잔량 백분율입니다. |
샘플 데이터
[ { "id": "e7694d7a0d2ab6cf", "data_type": "fmip.device", "name": "John's iMac", "model_name": "iMac with Retina 5K display", "model_identifier": "iMac15,1", "product_type": "iMac", "location": null, "battery_status": "Unknown", "battery_level": 0.0 }, { "id": "4d86a6181808d152", "data_type": "fmip.device", "name": "John's iPhone 11", "model_name": "iPhone 11", "model_identifier": "iPhone6,2", "product_type": "iPhone", "location": { "data_type": "location", "latitude": 51.507452392689146, "longitude": -0.07398372304584414, "altitude": 0.0, "horizontal_accuracy": 65.0, "vertical_accuracy": 0.0, "positioning_type": "Wifi", "date_created": "2020-01-01T00:00:00.000000Z" }, "battery_status": "Unknown", "battery_level": 0.0 } ]
파일 형식
식별자 | 기술 |
---|---|
icpl | iCloud 사진 보관함의 파일. |
mme_contact_image | mme_contacts.contacts 연락처 프로필 이미지를 접촉합니다. |