要約
MediaDrmを使ってリセマラを防ぎます
概要
Androidでリセマラ(リセットマラソン)を防ぐために、一意のIDを取得します。
ここでいうリセマラとは、アプリをアンインストール/インストールを繰り返して、初回限定の利益を何度も受ける行為を指します。
公式のドキュメント
リセマラのように何度もアプリを再インストールしてIDを作成することをシビル攻撃というらしいです。
そして、公式にも不正行為防止: 無料コンテンツ制限を適用し、シビル攻撃を検知するというドキュメントがあります。
GUID やインスタンス ID を使用すると、ユーザーがコンテンツ上限の適用を回避するにはアプリを再インストールしなければならなくなるため、ほとんどのユーザーに思いとどまらせることができます。
しかし、これで思いとどまらないのがリセマラという行為なので、もう一つある
APK ごとの識別子である Widevine ID を使用してコンテンツへのアクセスを制限できます。
この、Widevine IDを使ってリセマラを防いでみます。
Widevineとは
Widevineとは、デジタル著作権管理技術プロバイダーです。
他のデジタル著作権管理技術プロバイダーとして、MicrosoftではPlayReady、AppleではFairPlayというものがあり、WidevineはGoogleのデジタル著作権管理技術プロバイダーになります。
Widevine IDを取得する
Widevine IDを取得するために、MediaDrmというものを使います。
val widevineUuid = UUID.fromString("edef8ba9-79d6-4ace-a3c8-27dcd51d21ed")
val id = MediaDrm(widevineUuid).getPropertyByteArray(MediaDrm.PROPERTY_DEVICE_UNIQUE_ID)
といった感じに、MediaDrmをWidevineのUUIDで初期化して、MediaDrm.PROPERTY_DEVICE_UNIQUE_IDを取得することにより、端末固有のIDを取得できます。
本来であれば、暗号化されたコンテンツのメタデータを取得し、それにあったデジタル著作権管理技術プロバイダーを設定する使い方をするのがMediaDrmなのですが、今回の目的はWidevine IDなので、WidevineのUUIDを直接入れています。
ちなみにUUIDの参考先はこちらのサイトです。
https://dashif.org/identifiers/content_protection/
Widevine IDの挙動について
アンインストールして再インストールした場合
初回取得時と同じIDになります。
端末ID取得処理を別アプリに実装した場合
別アプリの場合、違うIDになります。
マルチユーザーの場合
Android同一端末でマルチユーザーの機能を利用している場合、どのユーザーに切り替えても同じIDになります。
まとめ
つかおう!MediaDrm!