Apple iCloudサービス(v2)

更新しました

ricloud APIのicloudサービスは、iCloudに保存されている情報に、iOSデバイスバックアップからのバッチ形式でも、他のソースからのリアルタイムおよびicloudでもアクセスするための機能を提供します。 APIは、iCloudの最初のリリース以来、iCloudへのアクセスをサポートしています。

クライアントがiCloudサービスで実行する必要があるかもしれない4つのコアオペレーションがあります。

  • 認証: log-inperform-2fa-challengesubmit-2fa-challenge
  • デバイス列挙: list-devices
  • フィードの要求: fetch-data
  • 生ファイルの要求: download-file

APIからのモックデータを操作する

APIとの統合の開発を支援するために、一連の豊富なデータが入ったモックアカウントが利用可能になります。これにより、クライアントは実際のユーザーデータを操作する必要なしに、多くのricloud APIの機能をテストすることができます。

モックアカウントはJonny Appleseedという名前で、iCloudアカウントID john.appleseed@reincubate.comとパスワードjoshuaを使ってアクセスできます。

認証

ログイン: log-in

icloudサービスを利用するための最初のステップはログインです。

要求のために、我々は指定しなければなりません:

  • 対話するserviceicloud
  • 実行するactionlog-in
  • パラメータjohn.appleseed@reincubate.comなどのiCloudアカウントIDを表しaccount
  • アクションに必要なアクションパラメータ。この場合は単なるpassword
  • /account/ endpointでリストされているオプションのアクションパラメータも指定できます。
$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>"
    -d "service=icloud" \
    -d "action=log-in" \
    -d "account=<ACCOUNT>" \
    -d "password=<PASSWORD>" \
    <TASK_SUBMISSION_ENDPOINT>

asapiエンドポイントはJSON形式で返信します。

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_1>"
}

あなたはaschannelエンドポイント上の正しいstream_endpointに接続されている場合は、結果が一致して来るでしょう<TASK_ID_1>あなたはASAPIエンドポイントから受信しました。

{ "message": "Log-in successful",
  "auth_token": "ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG",
  "success": true
}

結果には、ログインタスクが成功した場合にtrueになるsuccessパラメータと、メッセージおよび他のサービスアクションで使用するためのApple認証トークンが含まれます。

ログインのトラブルシューティング

エラーの定義と解決方法については、 ログインエラーの応答に関するセクションを参照してください。

2FAと2SV

2SVまたは2FAで設定されているiCloudアカウントにログインしようとすると、通常のログインは失敗し、以下のようなエラーメッセージが返されます。

{ "message": "This account has Two Step Verification enabled, please select a device to challenge.",
  "data": {
    "trustedDevices": ["********12", "Renate's iPhone - iPhone 6s"],
  },
  "error": "2fa-required"
}

dataディクショナリには、 device_idキーとするデバイスのリストが含まれていdevice_id 。これらは、次の認証手順を実行するためにiCloudアカウントによって信頼されているデバイスです。

2段階認証(2SV)用

2SVの場合、 trustedDevicesのリストには1つ以上のデバイスが含まれます。クライアントは、チャレンジするためにリストされているデバイスを選択する必要があります。

これは、 trustedDevicesから選択されたデバイスのキーにchallengeセットを設定してperform-2fa-challengeを実行perform-2fa-challengeことによって行われます。

二要素認証(2FA)の場合

2FAの場合、 trustedDevicesのリストは["Challenge all 2FA devices"]に設定され、チャレンジはそのアカウントに接続されているすべてのiOSデバイスに送信する必要があることを示します。これは、実行することにより行われるperform-2fa-challengechallengeの値に設定し["Challenge all 2FA devices"]

perform-2fa-challengeを使用perform-2fa-challenge

このメソッドは、2FAの場合はアカウントのすべてのデバイスに、2SVの場合は選択したデバイスにリアルタイムで要求を送信します。

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>"
    -d "service=icloud" \
    -d "action=perform-2fa-challenge" \
    -d "challenge=<TRUSTED_DEVICE>" \
    <TASK_SUBMISSION_ENDPOINT>

<TRUSTED_DEVICE> must be set to a device_id, or to "Challenge all 2FA devices"

asapiはいつもどおりに返信します。

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_X>"
}

検索エンドポイントは以下のように返信します。

{ "message": "Challenge has been submitted.",
  "success": true
}

チャレンジがユーザーのデバイスに送信されたら、 submit-2fa-challengeを使用submit-2fa-challengeて2要素コードをAPIに返送する必要があります。以下の要求では、 <CODE>はエンドユーザーによって提供された数値コードで、2FA / 2SVログイン用にデバイスに送信されたコードを表します。

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>"
    -d "service=icloud" \
    -d "action=submit-2fa-challenge" \
    -d "code=<CODE>" \
    <TASK_SUBMISSION_ENDPOINT>

asapiはいつもどおりに返信します。

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_X>"
}

検索エンドポイントは通常のログインメッセージで応答します。

{ "message": "Log-in successful",
  "auth_token": "ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG",
  "success": true
}

認証トークンを使用したアカウントログインの更新

ricloudは、完全なiCloud認証情報を使用する必要なしに、ログインを更新する際に使用するための認証トークンを提供します。トークン化メカニズムのユーザーは、ユーザー資格情報を保持する必要はありません。

これを行うには、クライアントはログイン中に取得されたauth_tokenフィールドを使用する必要があります。これは、 refresh-sessionサービス・アクション・エンドポイントに送信する必要があります。

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>"
    -d "service=icloud" \
    -d "action=refresh-session" \
    -d "auth_token=<ICLOUD_AUTH_TOKEN>" \
    <TASK_SUBMISSION_ENDPOINT>

これにより、サービスに対して任意のサービスアクションを実行できます。

デバイス列挙

デバイスの列挙: list-devices

アカウントにログインすると、クライアントはiCloudアカウントに関連付けられているデバイスとデバイスバックアップを列挙できます。これはiCloudサービスに対してlist-devicesアクションを実行することによって行われます。

これは、他のサービス処置と同じ方法で行われます。これは、このアクションに対するcurlリクエストの例です。以下の<ACCOUNT>パラメータには、 john.appleseed@reincubate.comなどのアカウントIDを入力できます。

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>"
    -d "service=icloud" \
    -d "action=list-devices" \
    -d "account=<ACCOUNT>" \
    <TASK_SUBMISSION_ENDPOINT>

asapiエンドポイントはJSON形式で返信します。

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_2>"
}

あなたの結果はすぐに検索の終点に現れるでしょう。以下はレスポンスの一例です。

{ "auth_token": "ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG",
  "devices": {
    "<DEVICE_ID_1>": {
      "ios_version": "10.0",
      "colour": "1",
      "device_name": "Johnny's iP7 iOS10 Black",
      "latest-backup": "2016-09-16 14:08:13.000000",
      "model": "D101AP",
      "serial": "ABC123AAAAAA",
      "name": "iPhone 7"
    },
    "<DEVICE_ID_2>": {
      "ios_version": "9.1",
      "colour": "#e1e4e3",
      "device_name": "Johnny's iPad",
      "latest-backup": "2016-11-16 16:36:33.000000",
      "model": "J98aAP",
      "serial": "ABC123BBBBBB",
      "name": "iPad Pro"
    },
    "<DEVICE_ID_3>": {
      "ios_version": "9.2.1",
      "colour": "#3b3b3c",
      "device_name": "Johnny's other iPhone",
      "latest-backup": "2016-06-16 16:00:49.000000",
      "model": "N49AP",
      "serial": "DFVDASDDSVAS",
      "name": "iPhone 5c"
    },
    "<DEVICE_ID_4>": {
      "ios_version": "9.0.2",
      "colour": "#e1e4e3",
      "device_name": "Johnny's white iPhone",
      "latest-backup": "2016-02-25 15:37:38.000000",
      "model": "N61AP",
      "serial": "HYTWGFHGHDSF",
      "name": "iPhone 6"
    }
  }
}

このレスポンスには、指定されたアカウントのiCloudセッションのauth_tokenと、そのアカウントに関連付けられているデバイスの一覧がdevicesセクションに含まれていdevices 。すべてのデバイスエントリには次のキーが含まれています。

  • ios_version :デバイスのiOSのバージョン
  • colour :16進数コードとしてのデバイスの色
  • device_name :ユーザーが設定したデバイスの名前
  • latest-backup :デバイスが最後にiCloudにバックアップされた日付
  • model :デバイスのモデル番号
  • serial :デバイスのシリアル番号
  • name :アップルが宣伝しているデバイスの製品名

フィードをリクエストする

フィードデータのfetch-datafetch-data

fetch-dataアクションは、APIからJSONデータのフィードにアクセスするために使用されます。以下のパラメータが必要です。

  • device :からデータを取得するデバイス、またはデバイスからデータを取得するデバイス
  • data :リクエストされたフィードモジュールのCSV

オプションのパラメータは次のとおりです。

  • since :結果が一致する期間

以下はfetch-dataアクションの例です。

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>" \
    -d "service=icloud" \
    -d "action=fetch-data" \
    -d "account=<ACCOUNT>" \
    -d "device=<DEVICE_ID>" \
    -d "data=<FEED_MODULES>" \
    <TASK_SUBMISSION_ENDPOINT>

<FEED_MODULES> can be any of the feed modules listed in feed modules.

たとえば、上記のコマンドで<FEED_MODULES>smsを使用すると、バックアップ内のSMS、MMS、およびiMessagesにアクセスできます。コマンドで<FEED_MODULES>の値sms,whatsapp_messages,snapchat_messagesを使用すると、SMS、MMS、およびiMessages、WhatsAppメッセージ、およびSnapchatメッセージにアクセスでき、すべて同じJSONの結果になります。

asapi次のように答えます。

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_3>"
}

その直後に、結果が同じtask_id結果エンドポイントに表示されます。

{ "sms": [
    { "group_handles": [
        "+441234567890",
        "renate@reincubate.com"
      ],
      "attachments": [],
      "deleted": false,
      "text": "Welcome to Vodafone!",
      "conversation_id": "vodafone",
      "from_me": false,
      "date": "2015-10-28 09:18:17.000000",
      "handle": "vodafone",
      "type": "SMS",
      "id": 6
    }
  ]
}

他のフィードモジュールは、他の形式のコンテンツにアクセスするために使用できる情報を提供します。たとえば、特定のデバイスに対して<FEED_MODULES>として「photos」を使用したfetch-dataアクションは、次のようになります。

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>" \
    -d "service=icloud" \
    -d "action=fetch-data" \
    -d "account=<ACCOUNT>" \
    -d "device=<DEVICE_ID>" \
    -d "data=photos" \
    <TASK_SUBMISSION_ENDPOINT>

asapiに次のように応答させます。

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_4>"
}

次の結果が適切なエンドポイントに表示されます。

{ "photos": [{
    "file_path": "Media/DCIM/100APPLE/IMG_0001.PNG",
    "last_modified": "2016-10-05 10:24:03.000000",
    "file_id": "c8ada38b9acf7368c6347be1c353dc68ed2c7741",
    "filename": "IMG_0001.PNG"
  }, {
    "file_path": "Media/DCIM/100APPLE/IMG_0002.MOV",
    "last_modified": "2016-10-11 09:39:25.000000",
    "file_id": "5c3e35cc01689340a34d13d34a0591e2ed450e63",
    "filename": "IMG_0002.MOV"
  }]
}

JSONフィードフォーマット

JSONフィードは、できるだけ簡単に解析できるように設計されています。フィードは、単一の応答内で要求されたすべてのデータ型を返します。

moduleフラグで指定された各フィードモジュールは、返されるトップレベルのJSON辞書に独自のキーを持ちます。

{
    "first_module_name": "Module's data",
    "second_module_name": "Module's data",
    "etc.": "etc."
}

生ファイルの要求

生ファイルの検索: download-file

download-filedownload-fileアクションは、ファイルまたはメッセージの添付ファイルをiCloudから直接ダウンロードするために使用できます。必要なパラメータは、ターゲットの<DEVICE_ID><FILE_ID>です。

file_listおよびphotoモジュールを含むフィードモジュールの中には、ダウンロード可能なファイルまたは添付ファイルへの参照が含まれています。これらには、ファイルの識別とダウンロードに使用される<FILE_ID> 、およびfilenamefilename file_pathsizetypeなどの追加のメタデータが含まれていfilename 。詳細については、 情報抽出プログラムを参照してください。

コマンド

$ curl \
    -X POST \
    -H "Authorization: Token <TOKEN>" \
    -d "service=icloud" \
    -d "action=download-file" \
    -d "account=<ACCOUNT>" \
    -d "device=<DEVICE_ID>" \
    -d "file=<FILE_ID>" \
    <TASK_SUBMISSION_ENDPOINT>

asapi次のように答えます。

{ "retrieval_protocol": "aschannel",
  "stream": "<STREAM>",
  "success": true,
  "task_id": "<TASK_ID_5>"
}

結果が同じtask_idエンドポイントに表示される直後に。

エラー応答のトラブルシューティング

一般的なエラー応答

次の表は、あらゆるアクションで発生する可能性があるエラーコードを示しています。

応答概要
task-failed 未知の失敗
deactivated-account アカウントが無効になりました
deactivated-device 端末が無効になりました
client-account-disabled APIトークンが無効
account-locked アカウントがロックされました
account-credentials-blocked アカウントはロックされ保護されています
push-api-timeout 内部タイムアウト
icloud-unauthorised アップルセッションタイムアウト
service-inactive-error 未初期化のアップルサービス

未知の失敗

ログインタスクが失敗しました。理由は不明です。このコードでタスクが失敗した場合、クライアントはサポートチームに連絡してください。

アカウントが無効になりました

これは、アカウント非アクティブ化管理コマンドを使用してアカウントが非アクティブ化されたことを意味します。手動の起動コマンドが送信されない限り、アクセスできません。

端末が無効になりました

これは、デバイス非アクティブ化管理コマンドを使用してデバイスが非アクティブ化されたことを意味します。手動の起動コマンドが送信されない限り、アクセスできません。

APIトークンが無効

APIへのアクセスに使用されているトークンが無効になっています。サポートチームに連絡してください。

内部タイムアウト

他のサービスアクションの実行中にAPIセッションが期限切れになると、クライアントはエラーコードpush-api-timeoutを受け取り、再度ログインする必要があります。

{ "message": "Unable to recover the session. Please re-login and try again",
  "error": "push-api-timeout"
}

iCloudは承認されていません

Appleとのセッションがアクションの前に期限切れになったり無効になったりした場合は、アクションを中止する必要があります。新しいlog-inタスクで再認証することでセッションを再確立する必要があります。この場合、 refresh-sessionを使用しても、有効期限が切れているAppleとのセッションに関連付けられているトークンが使用されるため、機能しません。

場合によっては、セッションが部分的に期限切れになることがあります。たとえば、 list-devicesまだ有効な最新のデバイスリストを返しますが、 fetch-dataicloud-unauthorised失敗します。この場合、セッションは引き続きアクセス可能なデータに使用できますが、それ以上のデータを取得するにはlog-inタスクを使用して完全に更新する必要があります。

サービス停止エラー

APIがサービスを初期化しようとしたが、ユーザーのアカウントで無効にされていないことを示す応答をAppleから受信した場合、この応答が返されます。照会されているデータ・タイプに対応する設定を調べて、それが活動化され初期化されていることを確認してください。

ログインエラー応答

次の表は、上記の一般的なコードに加えて、 log-inおよびsubmit-2fa-challengeアクションによって発生する可能性があるエラーコードを示しています。

応答概要
unable-to-login 資格情報が正しくありません
2fa-required 2FAが必要
invalid-2fa-code 無効な2FAコード
too-many-2fa-requests 2FAレート制限
account-locked アカウントがロックされました
account-credentials-blocked アカウントはロックされ保護されています
terms-of-service-update-client 利用規約は受け入れられていません
session-creation-error セッション初期化中の回復可能なエラー
session-corrupt-error セッション初期化中の回復不能エラー

資格情報が正しくありません

アカウントに指定された資格情報が正しくなかったため、認証ができません。

2FAが必要

2要素認証(2FA)または2段階認証(2SV)を使用するアカウントにログインするには、いくつか追加の手順が必要です。以下の「2FAと2SV」のセクションを参照してください。

無効な2FAコード

2FAチャレンジに応答して、無効または不正確な2FAコードが送信されました。

2FAレート制限

このアカウントに対して最近送信された2FAリクエストが多すぎます:レート制限されています。 30分後に再試行してください。

アカウントがロックされました

iCloudアカウントはアップルによってロックされています。短期間に別の試みでアカウントにアクセスしようとすると、代わりにaccount-credentials-blockedエラーが返されます。

アカウントはロックされ保護されています

iCloudアカウントはAppleによってロックされており、 ricloudはすでにaccount-lockedクライアントに通知しています。このメッセージは、サービスがリクエストをAppleに中継していないことを示すために使用されています。

利用規約は受け入れられていません

iCloudアカウントは、最新のiCloud利用規約に同意するまで無効になっています。ユーザーは自分のデバイス上で、またはicloud.comにログインしてこれらを受け入れることができます。

セッション作成エラー

iCloudバックエンドはセッションの初期化中にエラーで応答しましたが、再試行することで問題が解決し成功する可能性があります。

セッション破損エラー

iCloudバックエンドはセッションの初期化中にエラーで応答しました。再試行しても別の結果にはなりません。このエッジケースを調査できるように、サポートに連絡してください(できればアカウント資格情報を使用して)。

どのように我々は助けることができます?

サポートチームがお手伝いします!

営業時間は月曜日から金曜日の午前9時から午後5時(GMT)です。 時間は現在 1:08 AM GMTです。

1営業日以内に、お返事を差し上げます。メールアドレスはこちら。

サポートセクションに移動 › エンタープライズチームに連絡する ›
私たちの素晴らしいサポートチーム

© 2008 - 2019 Reincubate Ltd. 無断複写・転載を禁じます。 イングランドとウェールズに登録 #5189175, VAT GB151788978. Reincubate®は登録商標です。 プライバシーと利用規約. マルチファクタ認証をお勧めします。 ロンドンで愛と建てられた。