1. ダウンロードの準備
このドキュメントは機械翻訳で作成された下書きであり、現在レビュー中です。機械翻訳の特性上、一部の内容が不正確であったり、韓国語の原文と異なる場合があります。より正確な情報については、韓国語のドキュメントをご参照ください。
SDK の初期化および認証、ストレージ権限の確認、デバイスの利用可能容量チェックなど、コンテンツダウンロードに必要な準備手順について説明します。
このドキュメントのすべてのサンプルコードは、公式サンプルアプリ kollus_player_v2_android をもとに作成されています。
KollusStorage の初期化
サンプルアプリケーションは、内部および外部ストレージの管理のために MultiKollusStorage インスタンスを作成し、SD カードの Mount/Unmount 状態変化イベントに対応します。
開発プロジェクトへの組み込み時も、同じ構造パターンの構成を推奨します。
// BaseActivity.java
mMultiStorage = MultiKollusStorage.getInstance(getApplicationContext());
mMultiStorage.setCertification(
KollusConstants.KEY, // SDK key issued by Catenoid
KollusConstants.EXPIRE_DATE, // Set authentication expiration date (e.g., "2050/12/31")
isTablet); // Device type (true: tablet, false: mobile)
int nRet = mMultiStorage.getErrorCode();
if (nRet != ErrorCodes.ERROR_OK) {
// If an error such as ERROR_INCORRECT_AUTH_KEY occurs, notify the user of key expiration or incorrect input, then terminate the process
}
// Register listener callbacks for event detection
mMultiStorage.registerKollusStorageListener(mKollusStorageListener);
mMultiStorage.registerKollusPlayerDRMListener(mKollusPlayerDRMListener);
mMultiStorage.registerSDStateChangeListener(mSDCardStateChangeListener);
setCertification メソッドが呼び出されると、SDK によって以下の処理が順番に実行されます。
KollusStorage.initialize(key, expireDate, packageName)の呼び出しによる SDK キーの検証- 登録された各ストレージパスに対して
storage.setDevice(path, isTablet)を通じたデバイスバインディング
ストレージ権限と容量の確認
コンテンツダウンロード処理を進めるには、アプリケーションのマニフェストおよびシステムランタイム環境に有効な権限を宣言し、残りのディスク利用可能容量を確認する必要があります。
- 外部ストレージアクセス権限:
AndroidManifest.xmlにREAD_EXTERNAL_STORAGE権限を宣言します。API 33 以上の環境では、メディア別の詳細権限であるREAD_MEDIA_VIDEOなどを処理する必要があります。 - フォアグラウンドサービス権限: アプリがバックグラウンドに移行した状態でもダウンロードおよび再生状態を維持するためのフォアグラウンド(Foreground)制御権限を設定します。
- デバイスの利用可能容量確認:
Utils.getAvailableMemorySize(path)メソッドを呼び出して、残りのディスク容量を確認します。 - ダウンロード拒否しきい値の設定: サンプルアプリガイドの基準として
MIN_FREE_SIZE = 150 MB定数を定義します。コンテンツファイルサイズ + 150MB より現在のディスク空き容量が少ない場合はERROR_STORAGE_FULLを返し、処理を拒否します。 - ダウンロード状態維持ロック制御: ダウンロード中の省電力モードへの移行および Wi-Fi 切断を防止するため、
PowerManager.WakeLockとWifiManager.WifiLockを使用します。
フォアグラウンドサービス権限の設定
1. マニフェストへの権限宣言
フォアグラウンドサービスを使用するには、AndroidManifest.xml に以下のように権限を宣言する必要があります。
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
FOREGROUND_SERVICE_MEDIA_PLAYBACK: 再生フォアグラウンドサービス(MoviePlayerServiceなど)FOREGROUND_SERVICE_DATA_SYNC: ダウンロードフォアグラウンドサービス(DownloadServiceなど)
2. ダウンロードフォアグラウンドサービス登録パターン
バックグラウンド実行制限ポリシーによる強制終了を防ぐため、長時間実行されるタスクは必ず Service(例:DownloadService)内で実装することを推奨します。
Android 10(API 29)以上のビルドターゲットの場合、ダウンロードコンポーネントの実行パターン構成時に FOREGROUND_SERVICE_TYPE_DATA_SYNC サービス属性の定義が必須となります。
// DownloadService.java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
startForeground(
KollusConstants.SERVICE_DOWNLOAD,
notificationBuilder.build(),
ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC);
} else {
startForeground(KollusConstants.SERVICE_DOWNLOAD, notificationBuilder.build());
}
また、同様に AndroidManifest.xml のサービス宣言部にも一致するタイプを合わせて定義する必要があります。
<service
android:name=".download.DownloadService"
android:foregroundServiceType="dataSync" />
コンテンツダウンロード URL とセキュリティ上の注意事項
ダウンロード対象の URL は、一般的に https://v.jp.kollus.com/s?jwt=... のような形式のワンタイム(One-time) URL 構造を持ちます。
- サーバー間連携必須: JWT 発行ロジックにはセキュリティキーが含まれるため、必ずお客様のバックエンドサーバーで実行する必要があります。セキュリティ上の脆弱性が生じる可能性があるため、モバイルアプリのクライアントが JWT を直接生成してはなりません。
- SDK の処理方式: モバイルアプリはお客様のサーバーから受け取った URL を変更せずそのまま SDK の
load(url, ...)メソッドに渡して使用します。