メインコンテンツまでスキップ

6. DRM ライセンス更新

お知らせ

このドキュメントは機械翻訳で作成された下書きであり、現在レビュー中です。機械翻訳の特性上、一部の内容が不正確であったり、韓国語の原文と異なる場合があります。より正確な情報については、韓国語のドキュメントをご参照ください。

オフラインストレージに保管されたダウンロードコンテンツの DRM 失効有無を判別し、失効した権限をリアルタイムまたは一括で安全に更新する方法について説明します。

このドキュメントのすべてのサンプルコードは、公式サンプルアプリ kollus_player_v2_android をもとに作成されています。


ライセンス失効の確認

コンテンツオブジェクトの DRM 失効状態を事前にチェックし、更新プロセスへ進むかどうかを判断するための基準コードです。

KollusContent c = ...;
boolean expired =
c.getDrmExpireDate() < System.currentTimeMillis()
|| c.getDrmExpirePlayTime() <= 0
|| c.getDrmExpireCount() >= c.getDrmExpireCountMax();

ライセンス一括更新 API

updateDownloadDRMInfo メソッドを使用すると、ストレージに登録されたコンテンツの DRM ライセンスを一度に一括更新できます。 メソッドが呼び出されると、注入された KollusPlayerDRMUpdateListener コールバックループを通じて、コンテンツごとの更新進捗・完了状態・更新エラー結果がアプリケーションレイヤーへ通知されます。

multiStorage.updateDownloadDRMInfo(
diskIndex, // Physical storage index (-1 to renew all disks)
drmUpdateListener, // KollusPlayerDRMUpdateListener object to receive renewal events
bAll); // true: force renew all content in the list / false: renew only expired content

バックグラウンド更新の制約事項

Android の Doze モードおよび App Standby バッテリー最適化ポリシーにより、アプリが画面に表示されていないバックグラウンド状態での継続的なライセンス更新が制限される場合があります。 安定した連携のために、以下のようなパターンを推奨します。

  • フォアグラウンドサービスの活用: ダウンロード処理が進行中でフォアグラウンドサービス(Foreground Service)がすでに有効化されているタイミングで、更新 API を合わせて呼び出します。
  • フォアグラウンド移行タイミングの活用: ユーザーがアプリを再起動したり画面をアクティブにするタイミングに合わせて、更新プロセスを実行します。
連携推奨ポリシー

WorkManager コンポーネントと定期的なワーク(Periodic Work)構造を組み合わせてバックグラウンド更新を試みることもできますが、OS の仕様によって正確な実行タイミングは保証されません。 サービスの安定性を確保するには、ユーザーが動画を再生する直前のタイミングで失効確認を行い、同期(Sync)方式で API を呼び出す構造が最も確実です。


ネットワーク復旧後の自動更新

公式サンプルアプリには、ネットワーク復旧時のライセンス自動更新ロジックは含まれていません。 商用サービスの開発時には、以下のフローで例外処理コードを実装することを推奨します。

  1. ConnectivityManager.NetworkCallback システムシグナルを登録して、デバイスのネットワーク復旧タイミングを検知します。
  2. ユーザーがオフラインライブラリで再生ボタンをタップするタイミングで、対象コンテンツのライセンス状態を確認します。
  3. 失効が確認された場合は、直ちに updateDownloadDRMInfo メソッドを呼び出してライセンス更新を完了させてから、メディアを安全に再生します。

ライセンス更新失敗の例外処理

サーバー障害やネットワーク瞬断によりライセンス更新が最終的に失敗した場合、SDK は以下の 2 つの経路のいずれかを通じて例外を通知します。

  • MultiKollusPlayerDRMListener.onDRM(storage, request, response) コールバックのレスポンスパラメータとして異常レスポンス(response)値が受信される場合
  • MultiKollusPlayerDRMListener.onDRMInfo コールバックで、リモート強制制御コードである DCB_INFO_DELETE(強制削除)または DCB_INFO_EXPIRED(強制失効)シグナルが受信される場合
更新失敗時の UX 推奨事項

ライセンス更新失敗のシグナルが検知された場合は、画面に「ライセンスの更新に失敗しました。ネットワークの状態を確認するか、コンテンツを再ダウンロードしてください。」という例外メッセージを表示し、 ユーザーの選択に応じて 再試行 / 再ダウンロード / サポート の UI 分岐へ誘導することが最善です。詳細なコールバックの種類については、8. ダウンロードイベント/コールバック のドキュメントを参照してください。