9. ダウンロードエラーコード
iOS SDK は、発生した例外状況をNSErrorインスタンスのcodeプロパティとlocalizedDescriptionメッセージを組み合わせてアプリケーションレイヤーに通知します。
SDK エラーコード
(error as NSError).codeを基準に分類される主なエラーコードとトリガータイミングです。
| エラー区分 | 説明 | トリガー |
|---|---|---|
| 認証エラー | SDK キーの失効または不正なキー | start()またはstartWithCheck()のタイミング |
| デバイス非対応 | SDK または DRM をサポートしていないデバイス | start()または DRM 互換性検証失敗時 |
| ストレージ容量不足 | ディスク空き容量不足 | メタ情報ロード(load)およびファイルダウンロード(download)開始時 |
| ファイル書き込み失敗 | ファイル書き込みエラー | ダウンロード中にディスク I/O エラーが発生した場合 |
| ダウンロード重複 | 重複ダウンロードリクエスト | 同一コンテンツに対してdownloadContent(mck)を呼び出した場合 |
| ダウンロード完了済み | すでにダウンロード完了済みのコンテンツ | すでにダウンロード完了済みのコンテンツに対してdownloadContent(mck)を呼び出した場合 |
| コンテンツなし | 対象ファイルなし | コンテンツ削除(removeContent)または有効性検証(checkContentURL)のタイミング |
| 失効日超過 | DRM 失効日超過 | オフライン再生を試みた場合 |
| 再生時間超過 | DRM 残余再生時間超過(残余時間 0) | オフライン再生を試みた場合 |
| 再生回数超過 | DRM 残余再生回数超過(残余回数 0) | オフライン再生を試みた場合 |
| DRM 強制削除 | DRM Callback kind 2またはkind 3レスポンスによるコンテンツの強制削除 | デリゲート Callback(request:json:error:)パラメーター内のレス ポンス検知時 |
開発ガイドライン
SDK が出力する整数型コード値(code)の詳細な種別は、Android SDK のErrorCodes構造と対応しています。
ただし iOS 開発環境では、NSError.codeの分岐処理で例外状況を把握し、具体的なテキストの表示はlocalizedDescriptionプロパティを活用して画面にマッピングするパターンを推奨します。
エラー処理の例
do {
try storage.start()
} catch {
let nsError = error as NSError
UIApplication.presentErrorViewController(
title: "Error Code: \(nsError.code)",
errorDescription: nil,
errorReason: error.localizedDescription
)
}
SDK 外部エラー
SDK 内部ロジック以外に、モバイル OS ポリシーやネットワークエラーによって発生し得るエラー状況への対応パターンです。
- ディスク空き容量不足: ダウンロード実行前に
DiskStatus.freeDiskSpaceInBytesを呼び出して利用可能な容量を確認すること を推奨します。 - ネットワーク接続失敗: SDK が自動的にリトライを実行します。自動リトライの閾値は
storage.setNetworkTimeOut(timeOut:retry:)で調整でき、storage.setNetworkTimeOut(timeOut: 30, retry: 3)の設定を推奨します。 - バックグラウンド強制終了: アプリがバックグラウンドに移行した際に OS によって転送がキャンセルされる現象を防ぐため、
setBackgroundDownload(true)設定を有効化し、Info.plist内のUIBackgroundModes仕様を合わせて確認することを推奨します。
エラー状況別の推奨ユーザーメッセージ
| エラー区分 | ユーザーメッセージ例 |
|---|---|
| 認証エラー | "アプリの認証に問題が発生しました。アプリを最新バージョンにアップデートしてください。" |
| ストレージ不足 | "デバイスのストレージ空き容量が不足しています。視聴済みのダウンロードファイルを削除するか、ストレージ容量を確保してください。" |
| ファイル書き込み失敗 | "ファイルの保存に失敗しました。しばらくしてからもう一度お試しください。" |
| 失効エラー | "コンテンツの視聴期限が失効しました。ネ ットワークに接続してライセンスを更新してください。" |
| デバイス非対応 | "このデバイスではコンテンツをダウンロードまたは再生できません。" |