Serviço Apple iCloud

Atualizada
Cover image for: Serviço Apple iCloud

A API suporta a recuperação de uma variedade de dados e arquivos dos serviços iCloud da Apple.

Sessões

Configurar uma sessão para os serviços do iCloud na API é tão simples quanto um login em uma conta do iCloud. O processo pode exigir várias tentativas de criar a sessão se a conta tiver ativado a autenticação multifator, como 2FA ou 2SV.

Criando uma sessão para uma conta sem 2FA / 2SV

A carga útil da sessão para criar uma sessão para uma conta sem o 2FA / 2SV ativado contém os seguintes parâmetros.

nome tipo descrição
password corda A senha da conta do iCloud.

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

Resposta

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "succeeded",
  "error": null,
  ...
}

Criando uma sessão para uma conta com 2FA

Criar uma sessão para uma conta habilitada para 2FA é um processo de duas etapas:

  1. Tente criar uma sessão usando apenas a senha da conta do iCloud. Isso acionará o processo 2FA, que envia um código de autenticação para dispositivos iOS e macOS associados à conta. A tentativa de criação da sessão falhará com o error="code-required" .
  2. Use a senha da conta do iCloud e o código de autenticação recebido em (1) para criar uma sessão. Se o código for aceito, a sessão será criada com sucesso.

Etapa 1: criar sessão

nome tipo descrição
password corda A senha da conta do iCloud.

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

Resposta

Se o processo 2FA for acionado conforme o esperado, a sessão deverá falhar ao ser criada com o erro: code-required .

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "failed",
  "error": "code-required",
  ...
}

Etapa 2: criar sessão com código

nome tipo descrição
password corda A senha da conta do iCloud.
code corda O código de autenticação.

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

Resposta

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "succeeded",
  "error": null,
  ...
}

Criando uma sessão para uma conta com 2SV

O processo para criar uma sessão para uma conta habilitada para 2SV possui três etapas:

  1. Tente criar uma sessão usando a senha da conta do iCloud. Como o 2SV é necessário, isso falhará com error="choice-required" e error_info={"choices": [<2SV enabled devices>]} .
  2. Tente criar uma sessão novamente usando a senha da conta do iCloud e uma opção da lista error_info["choices"] . Desta vez, a tentativa acionará o processo 2SV, que envia um código de autenticação para o dispositivo escolhido. A tentativa falhará com o error="code-required" .
  3. Use a senha da conta do iCloud e o código de autenticação recebido em (2) para criar uma sessão. Se o código for aceito, a sessão será criada com sucesso.

Isso acionará o processo 2SV, que envia um código de autenticação para dispositivos iOS e macOS associados à conta. A tentativa de criação da sessão falhará com o error="code-required" .

Etapa 1: criar sessão

nome tipo descrição
password corda A senha da conta do iCloud.

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

Resposta

Se o 2SV estiver ativado na conta, a tentativa de criação da sessão falhará com a choice-required erro choice-required .

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "failed",
  "error": "choice-required",
  "error_info": {
    "choices": [
      "********02 - SMS to Phone Number"
    ]
  }
  ...
}

Etapa 2: criar sessão com escolha

nome tipo descrição
password corda A senha da conta do iCloud.
choice corda O dispositivo escolhido para o qual enviar um código de autenticação.

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

Resposta

Se o processo 2FA for acionado conforme o esperado, a sessão deverá falhar ao ser criada com o erro: code-required .

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "failed",
  "error": "code-required",
  ...
}

Etapa 3: criar sessão com código

nome tipo descrição
password corda A senha da conta do iCloud.
code corda O código de autenticação.

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

Resposta

{
  "id": "<session ID>",
  "resource": "session",
  ...
  "state": "succeeded",
  "error": null,
  ...
}

Tipos de fonte

identificador descrição
icloud.account fonte primária Corresponde a uma conta do iCloud.

Pesquisas

O serviço iCloud suporta todos os atributos do esquema de carga útil da pesquisa.

Recuperando informações de origem

Este tipo de pesquisa recupera informações sobre a origem de destino. Os resultados são publicados no formato JSON.

Usando 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": ["*"]
  }
}'

Usando * 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": ["*"]
  }
)

Recuperando dados

Esse tipo de pesquisa recupera e processa dados da sessão de destino. Os resultados são publicados no formato JSON.

Consulte a lista de tipos de dados disponíveis para obter mais informações sobre tipos de dados específicos.

Usando 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"]
    }
}'

Usando * 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,
)

Recuperando Arquivos

O atributo de carga útil da pesquisa de files é usado para solicitar a recuperação de arquivos binários da origem de destino.

Os IDs normalmente serão recuperados de uma pesquisa anterior para tipos de dados que incluem referências diretas a arquivos, como a Biblioteca de Fotos do iCloud, ou que incluem anexos, como tipos de dados de mensagens.

Usando 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"
        ]
    }
}'

Usando * 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,
)

Tipos de dados

tipos de dados do iCloud

identificador descrição
icpl.photos Recupera ativos da Biblioteca de Fotos do iCloud.
mme_contacts.contacts Recupera os dados de contatos do iOS armazenados no iCloud.
mme_calendar.events Recupera dados do calendário iOS armazenados no iCloud.
mme_notes.notes Recupera os dados armazenados do iCloud no iOS Notes.
callkit.calls Recupera dados do telefone iOS do CallKit sincronizados.
cloudkit_safari.history Recupere os dados de histórico do navegador Safari armazenados no iCloud.
fmip.devices Recuperar dados do dispositivo Find My iPhone e locais.

Biblioteca de Fotos do iCloud

Fotos, vídeos e outras mídias

Recupera informações sobre fotos, vídeos e outras mídias armazenadas na Biblioteca de Fotos do iCloud (ICPL).

Este módulo requer que a Biblioteca de fotos do iCloud esteja ativada na conta do usuário do iCloud.

ID do tipo de dados icpl.photos
Configuração associada Settings > [username] > iCloud > Photos > iCloud Photo Library

Atributos de dados

nome tipo descrição
id corda Um identificador para o item de dados. Útil para desduplicar dados em várias pesquisas.
filename corda O nome do arquivo como ele é armazenado no ICPL.
files lista de itens de image , video e audio Arquivos associados a este ativo ICPL. O arquivo original, Fotos ao vivo, miniaturas será incluído nesta lista.
date_created data hora Quando o arquivo foi criado originalmente. No caso de fotos ou vídeos tirados em um dispositivo iOS, essa será a data em que foram tirados. No caso de ativos existentes importados para o ICPL, essa será a data original da importação.
date_uploaded data hora Quando o arquivo foi carregado pela última vez no ICPL. Isso corresponderá a quando o arquivo foi recuperado pela primeira vez pela API do ricloud.
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.

Filtros de dados

nome tipo descrição
since data hora Inclui apenas itens com um date_uploaded posterior ao valor fornecido.
until data hora Inclui apenas itens com um date_uploaded anterior ao valor fornecido.

Dados de amostra

[
  {
    "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"
  }
]

Contatos do MobileMe

Contatos

Recupera os dados dos Contatos do iOS armazenados no iCloud.

ID do tipo de dados mme_contacts.contacts
Configuração associada Settings > [username] > iCloud > Contacts

Atributos de dados

O tipo de dados mme_contacts.contact herda a maioria dos atributos do tipo de dados de contact base. A tabela abaixo descreve atributos adicionais ou diferentes.

nome tipo descrição
id corda Um identificador para o item de dados. Útil para desduplicar dados em várias pesquisas.
data_type string, sempre mme_contacts.contact O tipo de dados do item.
uid corda Um identificador exclusivo que pode ser usado para desduplicar em diferentes fontes de dados de contatos do iOS.
image item de image aninhada, opcional Imagem do perfil para o contato.

Dados de amostra

[
  {
    "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"
    }
  }
]

Eventos do MobileMe Calendar mme_calendar.events

Recupera os dados do Calendário iOS armazenados no iCloud.

Notas do MobileMe notes mme_notes.notes

Recupera os dados armazenados do iCloud no iOS Notes.

CallKit

Chamadas de CallKit callkit.calls

Recupera logs de chamadas sincronizados com o serviço CallKit.

Erros

callkit-uninitialised

Indica que o serviço CallKit não foi configurado para esta conta. O proprietário da conta do iCloud pode resolver esse erro usando um dispositivo iOS associado à conta do iCloud através das seguintes etapas: - Verifique se o dispositivo está conectado ao Wi-Fi. - Navegue para Settings > [username] > iCloud . - Desligue o iCloud Drive, aguardando 30 a 60 segundos para que a alteração entre em vigor. - Ligue o iCloud Drive assim que a alteração anterior for concluída. Isso deve acionar a inicialização.

Se o erro persistir após a execução deste processo, entre em contato com o suporte.

callkit-sync-disabled

Nesse caso, o serviço CallKit foi inicializado, mas as condições necessárias para que os dispositivos iniciem a sincronização do histórico de chamadas para o iCloud não foram atendidas. A API resolverá isso remotamente por meio do iCloud, mas o dispositivo associado à conta do iCloud não poderá reavaliar seu estado de sincronização, pois isso é armazenado em cache.

O proprietário da conta do iCloud pode acionar um dispositivo para verificar novamente as condições de sincronização do histórico de chamadas através das seguintes etapas:

  • Navegue para Settings > [username] > iCloud .
  • Desligue o iCloud Drive, aguardando 30 a 60 segundos para que a alteração entre em vigor.
  • Ligue o iCloud Drive assim que a alteração anterior for concluída. Isso deve acionar a inicialização.

Solução de problemas

  • O histórico de chamadas recentes não está sendo retornado nos resultados da pesquisa.

Isso geralmente é causado pelo fato de o dispositivo não ter sincronizado seus registros mais recentes de histórico de chamadas com o iCloud. O serviço CallKit é um serviço interno do iOS e não pode ser ativado ou desativado nas configurações ou acionado para sincronização manual. Isso pode dificultar a depuração de dados ausentes, pois não está claro o que o dispositivo tem ou não sincronizado com o iCloud.

Esse problema é mais comum em contas que não têm muitos dados para sincronizar (menos de três chamadas), o que pode ser o caso de contas de teste.

Recomendações:

  • Verifique se o dispositivo possui mais de um punhado de registros do histórico de chamadas para sincronizar. Nossos testes mostraram que um dispositivo com apenas alguns registros do histórico de chamadas não acionará o processo de sincronização do iCloud.
  • Aguarde o dispositivo executar uma sincronização periódica. Isso pode levar até 12 horas, dependendo de como o dispositivo está sendo usado, seu estado de conectividade e seu estado de carga.
  • Conecte o dispositivo à energia. É mais provável que o dispositivo acione uma sincronização neste estado.

  • O histórico de chamadas antigas não está sendo retornado nos resultados da pesquisa.

O serviço CallKit é projetado para sincronizar registros de histórico de chamadas entre dispositivos e não para armazenar esses registros indefinidamente. Normalmente, os registros do histórico de chamadas podem ser recuperados do CallKit por aproximadamente 3 meses, mas isso pode variar entre as contas, dependendo dos processos de limpeza internos no iCloud.

CloudKit

Histórico do navegador do iCloud cloudkit_safari.history

Recupere os dados do histórico do navegador Safari armazenados no serviço de sincronização do iCloud.

Encontre o meu e encontre o meu iPhone

Localizações do dispositivo

Recupere os dados do Find My Device e Location.

Observe que esse tipo de dados pode exigir várias pesquisas, com a segunda chegando de 10 a 30 segundos após a primeira, para retornar dados completos. Isso se deve à maneira como o Find My opera: a primeira pesquisa acionará o Find My para solicitar novos dados de dispositivos acessíveis, mas os dados não estarão disponíveis por mais 10 a 30 segundos.

ID do tipo de dados fmip.devices
Configuração associada Settings > [username] > Find My

Atributos de dados

nome tipo descrição
id corda Um identificador para o item de dados. Útil para desduplicar dados em várias pesquisas.
data_type string, sempre fmip.devices O tipo de dados do item.
name corda O nome do conjunto de usuários para o dispositivo.
model_name corda Nome de marketing da Apple para o modelo do dispositivo.
model_identifier corda Identificador da Apple para o modelo do dispositivo.
product_type corda A categoria do produto do dispositivo.
location location aninhado opcional O último local relatado para o dispositivo, se houver um disponível.
battery_status corda O status atual da bateria do dispositivo.
battery_level flutuador Se conhecido, a porcentagem de carga restante da bateria.

Dados de amostra

[
  {
    "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
  }
]

Tipos de arquivo

identificador descrição
icpl Um arquivo da Biblioteca de Fotos do iCloud.
mme_contact_image Uma imagem de perfil de contato mme_contacts.contacts .

Como podemos ajudar?

Nossa equipe de suporte está aqui para ajudar!

Nosso horário de atendimento é de segunda a sexta, das 9h às 17h GMT. A hora é atualmente 10:08 AM GMT.

Nosso objetivo é responder a todas as mensagens dentro de um dia útil.

Vá para a seção de apoio › Entre em contato com a equipe da empresa ›
Nossa equipe de suporte incrível

© 2008 - 2020 Reincubate Ltd. Todos os direitos reservados. Registrado na Inglaterra e no País de Gales #5189175, VAT GB151788978. Reincubate e Camo são marcas comerciais. Política de Privacidade & termos. Recomendamos 2FA. Construído com em Londres.