Сервис 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 состоит из двух этапов:

  1. Попытайтесь создать сеанс, используя только пароль учетной записи iCloud. Это запустит процесс 2FA, который отправит код аутентификации на устройства iOS и macOS, связанные с учетной записью. Попытка создания сеанса не удастся с error="code-required" .
  2. Используйте пароль учетной записи 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 состоит из трех этапов:

  1. Попытайтесь создать сеанс, используя пароль учетной записи iCloud. Поскольку требуется error_info={"choices": [<2SV enabled devices>]} , произойдет сбой с error="choice-required" и error_info={"choices": [<2SV enabled devices>]} .
  2. Попытайтесь снова создать сеанс, используя пароль учетной записи iCloud и выбор из error_info["choices"] . На этот раз попытка вызовет процесс 2SV, который отправит код аутентификации на выбранное устройство. Попытка не удастся с error="code-required" .
  3. Используйте пароль учетной записи 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 изображение профиля контакта.

Как мы можем помочь?

Наша служба поддержки здесь, чтобы помочь!

Наш офис работает с понедельника по пятницу с 9:00 до 17:00 по Гринвичу. Время в настоящее время 1:29 ДП с GMT.

Мы стремимся отвечать на все сообщения в течение одного рабочего дня.

Наша отличная команда поддержки

© 2008 - 2024 Reincubate Ltd. Все права защищены. Зарегистрировано в Англии и Уэльсе #5189175, VAT GB151788978. Reincubate® и Camo® являются зарегистрированными товарными знаками. Политика конфиденциальности & условия.