モバイルアプリ内で JWT URL を直接生成
- アンチパターン: セキュリティーキーが含まれた JWT 署名ロジックをモバイルクライアントアプリ(Android)のソースコードに直接実装する場合
- 問題点: セキュリティーキーが外部に漏洩する可能性があり、深刻なセキュリティ脆 弱性が発生します。
- 正しい方法: JWT は必ずお客様のサーバーで発行した後、モバイルアプリに渡す構造で実装する必要があります。
unload(mck) メソッドを一時停止目的で誤用
- アンチパターン: コンテンツのダウンロードを一時的に中断するために
unload メソッドを呼び出す場合
- 問題点:
unload はダウンロードをキャンセルする動作であるため、ダウンロード再開時に最初からやり直しになります。
- 正しい方法: 部分再開(レジューム)機能が必要な場合は、別途進行状態のトラッキングとともに SDK の resume 動作を直接確認してください。
DRM 失効コンテンツ再生時にファイル全体を自動再ダウンロード
- アンチパターン: DRM ライセンスが失効した際に 、動画ファイル自体を再ダウンロードするよう実装する場合
- 問題点: 不要なネットワークトラフィックが発生し、ユーザーのダウンロード待ち時間が長くなります。
- 正しい方法: 動画ファイルの再ダウンロードなしに、
updateDownloadDRMInfo メソッドを呼び出してDRM ライセンスのみを更新すれば十分です。詳細については 6. DRM ライセンス更新 のドキュメントを参照してください。
Android 10(API 29)以降での FOREGROUND_SERVICE_TYPE_DATA_SYNC の欠落
- アンチパターン: Android 10 以降の環境をターゲットにしながら、バックグラウンドダウンロードサービスにフォアグラウンドサービスタイプを明示しない場合
- 問題点: ダウンロード中にアプリがバックグラウンドへ移行した際に
SecurityException が発生し、ダウンロードが強制終了されます。
- 正しい方法:
startForeground() を呼び出す際にフォアグラウンドタイプを明示し、AndroidManifest.xml のサービス宣言部にも以下のようにタイプを追加する必要があります。詳細については 1. ダウンロード準備 のドキュメントを参照してください。
コールバックリスナー(Listener)の登録と解除の漏れ
- アンチパターン: Activity または Service のライフサイクルに合わせてコールバックリスナーの登録と解除をペアで処理しない場合
- 問題点: メモリリークが発生したり、すでに破棄(Destroyed)されたコンポーネントにコールバックが渡されてアプリがクラッシュ(Crash)する可能性があります。
- 正しい方法: ライフサイクルに合わせて
onCreate() で register*Listener を呼び出した場合は、必ず onDestroy() で unregister*Listener を呼び出して解除する必要があります。
空き容量を確認せずにコンテンツのダウンロードを開始
- アンチパターン: ユーザーデバイスの残りストレージ容量を確認せずに大きなコンテンツのダウンロードを開始する場合
- 問題点: ダウンロード進行中にストレージが満杯になると、
ERROR_WRITE_FILE エラーとともにダウンロードが失敗します。
- 正しい方法: ダウンロードを開始する前に、
Utils.getAvailableMemorySize(path) の値がコンテンツファイルサイズと最小空き容量の合計値以上であることを確認することを推奨します。
ダウンロード進行率を setDownloadPercent で直接任意設定
- アンチパターン: アプリコードから任意に
KollusContent.setDownloadPercent() などの Setter メソッドを直接呼び出して進行率を強制変更する場合
- 問題点: このメソッドは SDK 内部のコールバックフローでデータを加工するために使用する内部呼び出し専用メソッドです。外部から任意に変更すると SDK のデータ整合性が失われ、誤動作を引き起こす可能性があります。
- 正しい方法: ダウンロード進行率は SDK が提供する公式コールバックリスナーを通じて受け取った値のみを送信・表示する必要があり、アプリから直接変更しないでください。