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:
- 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"
. - 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:
- Tente criar uma sessão usando a senha da conta do iCloud. Como o 2SV é necessário, isso falhará com
error="choice-required"
eerror_info={"choices": [<2SV enabled devices>]}
. - 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 oerror="code-required"
. - 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 . |