Сервис Apple iCloud
API поддерживает извлечение различных данных и файлов из сервисов Apple iCloud.
сессии
Настроить сеанс для служб iCloud в API так же просто, как войти в учетную запись 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. Это запустит процесс 2FA, который отправит код аутентификации на устройства iOS и macOS, связанные с учетной записью. Попытка создания сеанса не удастся с
error="code-required"
. - Используйте пароль учетной записи iCloud и код аутентификации, полученный в (1), для создания сеанса. Если код принят, сессия будет успешно создана.
Шаг 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
.
{ "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. Поскольку требуется
error_info={"choices": [<2SV enabled devices>]}
, произойдет сбой сerror="choice-required"
иerror_info={"choices": [<2SV enabled devices>]}
. - Попытайтесь снова создать сеанс, используя пароль учетной записи iCloud и выбор из
error_info["choices"]
. На этот раз попытка вызовет процесс 2SV, который отправит код аутентификации на выбранное устройство. Попытка не удастся сerror="code-required"
. - Используйте пароль учетной записи iCloud и код аутентификации, полученный в (2), для создания сеанса. Если код принят, сессия будет успешно создана.
Это запустит процесс 2SV, который отправит код аутентификации на устройства iOS и macOS, связанные с учетной записью. Попытка создания сеанса не удастся с 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
ошибки.
{ "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
.
{ "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
используется для запроса получения двоичных файлов из целевого источника.
Идентификаторы обычно извлекаются из предыдущего опроса для типов данных, которые включают прямые ссылки на файлы, такие как библиотека фотографий 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 | Получите данные устройства и местоположения Find My iPhone. |
Библиотека фотографий iCloud
Фотографии, видео и другие медиа
Получает информацию о фотографиях, видео и других медиафайлах, хранящихся в библиотеке фотографий iCloud (ICPL).
Этот модуль требует, чтобы библиотека фотографий iCloud была включена в учетной записи iCloud пользователя.
Идентификатор типа данных | icpl.photos |
Связанные настройки | Settings > [username] > iCloud > Photos > iCloud Photo Library |
Атрибуты данных
название | тип | описание |
---|---|---|
id | строка | Идентификатор для элемента данных. Полезно для дедупликации данных по нескольким опросам. |
filename | строка | Имя файла в том виде, в котором оно хранится в ICPL. |
files | список image , video , audio предметов | Файлы, связанные с этим активом ICPL. Исходный файл, живые фотографии, миниатюры будут включены в этот список. |
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 позже указанного значения. |
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 Контакты
контакты
Получает данные контактов iOS, хранящиеся в iCloud.
Идентификатор типа данных | mme_contacts.contacts |
Связанные настройки | Settings > [username] > iCloud > Contacts |
Атрибуты данных
mme_contacts.contact
данных 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 Notes отмечает mme_notes.notes
Получает iCloud сохраненные данные iOS Notes.
CallKit
Звонки из CallKit callkit.calls
Извлекает журналы вызовов, синхронизированные со службой CallKit.
ошибки
callkit-uninitialised
Указывает, что служба CallKit не была настроена для этой учетной записи. Владелец учетной записи iCloud может устранить эту ошибку с помощью устройства iOS, связанного с учетной записью iCloud, с помощью следующих шагов: - Убедитесь, что устройство подключено к 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
Получить данные истории браузера Safari, хранящиеся в службе синхронизации iCloud
Найди мой и найди мой айфон
Расположение устройства
Получить Find My устройство и данные о местоположении.
Обратите внимание, что для этого типа данных может потребоваться несколько опросов, причем второй идет через ~ 10-30 секунд после первого, чтобы вернуть полные данные. Это связано с тем, как работает Find My: первый опрос вызовет Find My для запроса новых данных с доступных устройств, но эти данные не будут доступны в течение следующих 10-30 секунд.
Идентификатор типа данных | 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 | An mme_contacts.contacts изображение профиля контакта. |